Here is how I would audit any cloud GPU bill. Take the hourly rate, multiply it by 730 hours in a month, then ask a rude question: for how many of those hours was anything actually running?
Most teams have never done that sum. The answer tends to be uncomfortable, and it is only one of three places money leaks out. Let me walk through all three with one real-looking example, so you can run the same check on your own invoice.
What are the hidden costs of a cloud GPU?
Three things that either bill separately or bill silently: idle time, storage and egress. The hourly rate you see on a pricing page only pays for the GPU being switched on.
Idle time: the meter runs while the GPU waits, not while it works
Storage: disks keep billing by the GB-month, whether or not the GPU is on
Egress: data leaving the provider's network is charged per GB on many platforms
Smaller items like public IPs and paid support plans can join the list, but these three do most of the damage.
How do you audit a cloud GPU bill?
Split every line into two buckets: money that bought work, and money that bought waiting, holding or moving. Anything in the second bucket is a leak worth looking at.
I will use an nvidia l4 gpu as the example. It is a cheap card, which makes the hidden costs look big next to the rate. The setup is a small image generation service:
One L4 at $0.44 an hour, left running all month
Real traffic for about 10 hours a day
500GB of persistent storage for models, outputs and logs
800GB of outbound data a month, at a typical hyperscaler egress rate of $0.09 per GB
What does the audit actually show?
Line
Monthly cost
Bought work?
GPU, 300 busy hours
$132
Yes
GPU, 430 idle hours
$189
No, waiting
Storage, 500GB at $0.10
$50
Partly, much of it is old files
Egress, 800GB at $0.09
$72
Moving, not computing
Total
$443
Only about $132 of that $443 paid for the GPU doing something. Under a third. The rest went to waiting, holding and moving. This is a deliberately unoptimised setup, but it is not an unusual one.
How much does idle time really cost?
You pay for provisioned hours, not busy hours. Billing follows the time the instance exists, not the time the GPU is working.
Studies disagree on how bad it is, mostly because they measure different things. One 2026 report on Kubernetes clusters measured average GPU utilisation at around 5 percent. Other studies put it between 30 and 50 percent. Surveys also suggest fewer than one in five teams run automatic shutdown policies for GPU instances.
The classic leak is the overnight job. A training run finishes at 3 a.m., and the instance keeps running until someone logs in at 11. Eight idle hours on an H100 costs roughly $24.
Why does a cheap GPU hide this problem better?
Because nobody notices small numbers. Eight idle hours on an L4 is about $3.50, so no one raises an alert. Repeat it every night and it becomes roughly $105 a month, which is a third of the whole GPU bill in the example above, spent on nothing.
What do storage costs look like once the GPU is off?
They carry on. Persistent storage usually runs between $0.08 and $0.15 per GB per month, and it bills whether the instance is on, off or forgotten.
The same few culprits show up again and again:
Old model checkpoints nobody will ever reload
The same dataset copied to three different volumes
Model files downloaded fresh each time and cached in several places
Logs that were never rotated
Storage cost does not shrink when your GPU is cheap. A 500GB volume costs the same next to an L4 as next to an H200, so on a small GPU it takes a much bigger share of the bill.
When does egress become a real cost?
When a lot of data leaves the provider's network. Hyperscalers commonly charge $0.08 to $0.12 per GB for it, and some dedicated GPU clouds state plainly that they charge nothing for ingress or egress.
For text-in, text-out inference, egress is usually trivial. For anything that returns images, video or large files, like our example, it adds up quickly. It also bites when you move big datasets between clouds or regions.
How do you fix each leak?
Each fix has a trade-off, so pick the ones your workload can live with.
Leak
Fix
Trade-off
Idle time
Auto-stop after 30 to 60 minutes of low GPU use, or schedule it to run only in working hours
Cold start delay when it wakes up
Storage
Delete old checkpoints, keep cold data in cheaper object storage
Slower to reload what you moved
Egress
Put a CDN in front, keep traffic in one region, or use a provider with no egress charge
Some setup and migration effort
Run the example again with these applied. The GPU only runs for its 300 busy hours, storage drops to 150GB, and egress goes to zero on a no-egress provider. The bill falls from $443 to about $147, a cut of roughly two thirds.
That only works if your service can tolerate a cold start. An always-on API that must answer instantly cannot switch off overnight, so for that kind of workload the saving mostly comes from storage and egress.
What should you check first if you only have ten minutes?
Start with hours. Compare the GPU hours you were billed for against the hours anything was actually running, because idle time is usually the biggest leak and the easiest to switch off.
Then list your storage volumes by size and by last-used date, and look for anything untouched for a month. Last, check outbound data by destination. If most of it goes to your own users, that is normal. If it goes to another cloud, ask why.
Where this leaves you
The hourly rate tells you what a GPU costs to switch on. It says very little about what it costs to run your workload. Do the sum once, with your real hours, your real storage and your real traffic, and you will find where the money is going faster than any pricing page can tell you.
The numbers in the example are illustrative, so swap in your own. The method is what matters: sort every dollar into work, waiting, holding or moving, and then go after the biggest bucket that is not work.
Frequently asked questions
Do I pay for a GPU instance when it is stopped?
Usually the GPU time stops billing, but storage and any reserved IP addresses keep going. Check what your provider keeps charging for in the stopped state, since it differs.
How often should I audit my GPU bill?
Once a month is enough for most teams, plus a budget alert so a runaway instance cannot go a whole week unnoticed. The first audit usually finds the most. After that it is a ten minute habit.
Is idle time always a mistake?
No. A GPU you keep warm so users never wait is paying for speed, and that can be a good trade. The mistake is idle time you did not choose, like the instance still running after a job has finished.
Most teams have never done that sum. The answer tends to be uncomfortable, and it is only one of three places money leaks out. Let me walk through all three with one real-looking example, so you can run the same check on your own invoice.
What are the hidden costs of a cloud GPU?
Three things that either bill separately or bill silently: idle time, storage and egress. The hourly rate you see on a pricing page only pays for the GPU being switched on.
Idle time: the meter runs while the GPU waits, not while it works
Storage: disks keep billing by the GB-month, whether or not the GPU is on
Egress: data leaving the provider's network is charged per GB on many platforms
Smaller items like public IPs and paid support plans can join the list, but these three do most of the damage.
How do you audit a cloud GPU bill?
Split every line into two buckets: money that bought work, and money that bought waiting, holding or moving. Anything in the second bucket is a leak worth looking at.
I will use an nvidia l4 gpu as the example. It is a cheap card, which makes the hidden costs look big next to the rate. The setup is a small image generation service:
One L4 at $0.44 an hour, left running all month
Real traffic for about 10 hours a day
500GB of persistent storage for models, outputs and logs
800GB of outbound data a month, at a typical hyperscaler egress rate of $0.09 per GB
What does the audit actually show?
Line
Monthly cost
Bought work?
GPU, 300 busy hours
$132
Yes
GPU, 430 idle hours
$189
No, waiting
Storage, 500GB at $0.10
$50
Partly, much of it is old files
Egress, 800GB at $0.09
$72
Moving, not computing
Total
$443
Only about $132 of that $443 paid for the GPU doing something. Under a third. The rest went to waiting, holding and moving. This is a deliberately unoptimised setup, but it is not an unusual one.
How much does idle time really cost?
You pay for provisioned hours, not busy hours. Billing follows the time the instance exists, not the time the GPU is working.
Studies disagree on how bad it is, mostly because they measure different things. One 2026 report on Kubernetes clusters measured average GPU utilisation at around 5 percent. Other studies put it between 30 and 50 percent. Surveys also suggest fewer than one in five teams run automatic shutdown policies for GPU instances.
The classic leak is the overnight job. A training run finishes at 3 a.m., and the instance keeps running until someone logs in at 11. Eight idle hours on an H100 costs roughly $24.
Why does a cheap GPU hide this problem better?
Because nobody notices small numbers. Eight idle hours on an L4 is about $3.50, so no one raises an alert. Repeat it every night and it becomes roughly $105 a month, which is a third of the whole GPU bill in the example above, spent on nothing.
What do storage costs look like once the GPU is off?
They carry on. Persistent storage usually runs between $0.08 and $0.15 per GB per month, and it bills whether the instance is on, off or forgotten.
The same few culprits show up again and again:
Old model checkpoints nobody will ever reload
The same dataset copied to three different volumes
Model files downloaded fresh each time and cached in several places
Logs that were never rotated
Storage cost does not shrink when your GPU is cheap. A 500GB volume costs the same next to an L4 as next to an H200, so on a small GPU it takes a much bigger share of the bill.
When does egress become a real cost?
When a lot of data leaves the provider's network. Hyperscalers commonly charge $0.08 to $0.12 per GB for it, and some dedicated GPU clouds state plainly that they charge nothing for ingress or egress.
For text-in, text-out inference, egress is usually trivial. For anything that returns images, video or large files, like our example, it adds up quickly. It also bites when you move big datasets between clouds or regions.
How do you fix each leak?
Each fix has a trade-off, so pick the ones your workload can live with.
Leak
Fix
Trade-off
Idle time
Auto-stop after 30 to 60 minutes of low GPU use, or schedule it to run only in working hours
Cold start delay when it wakes up
Storage
Delete old checkpoints, keep cold data in cheaper object storage
Slower to reload what you moved
Egress
Put a CDN in front, keep traffic in one region, or use a provider with no egress charge
Some setup and migration effort
Run the example again with these applied. The GPU only runs for its 300 busy hours, storage drops to 150GB, and egress goes to zero on a no-egress provider. The bill falls from $443 to about $147, a cut of roughly two thirds.
That only works if your service can tolerate a cold start. An always-on API that must answer instantly cannot switch off overnight, so for that kind of workload the saving mostly comes from storage and egress.
What should you check first if you only have ten minutes?
Start with hours. Compare the GPU hours you were billed for against the hours anything was actually running, because idle time is usually the biggest leak and the easiest to switch off.
Then list your storage volumes by size and by last-used date, and look for anything untouched for a month. Last, check outbound data by destination. If most of it goes to your own users, that is normal. If it goes to another cloud, ask why.
Where this leaves you
The hourly rate tells you what a GPU costs to switch on. It says very little about what it costs to run your workload. Do the sum once, with your real hours, your real storage and your real traffic, and you will find where the money is going faster than any pricing page can tell you.
The numbers in the example are illustrative, so swap in your own. The method is what matters: sort every dollar into work, waiting, holding or moving, and then go after the biggest bucket that is not work.
Frequently asked questions
Do I pay for a GPU instance when it is stopped?
Usually the GPU time stops billing, but storage and any reserved IP addresses keep going. Check what your provider keeps charging for in the stopped state, since it differs.
How often should I audit my GPU bill?
Once a month is enough for most teams, plus a budget alert so a runaway instance cannot go a whole week unnoticed. The first audit usually finds the most. After that it is a ten minute habit.
Is idle time always a mistake?
No. A GPU you keep warm so users never wait is paying for speed, and that can be a good trade. The mistake is idle time you did not choose, like the instance still running after a job has finished.
Here is how I would audit any cloud GPU bill. Take the hourly rate, multiply it by 730 hours in a month, then ask a rude question: for how many of those hours was anything actually running?
Most teams have never done that sum. The answer tends to be uncomfortable, and it is only one of three places money leaks out. Let me walk through all three with one real-looking example, so you can run the same check on your own invoice.
What are the hidden costs of a cloud GPU?
Three things that either bill separately or bill silently: idle time, storage and egress. The hourly rate you see on a pricing page only pays for the GPU being switched on.
Idle time: the meter runs while the GPU waits, not while it works
Storage: disks keep billing by the GB-month, whether or not the GPU is on
Egress: data leaving the provider's network is charged per GB on many platforms
Smaller items like public IPs and paid support plans can join the list, but these three do most of the damage.
How do you audit a cloud GPU bill?
Split every line into two buckets: money that bought work, and money that bought waiting, holding or moving. Anything in the second bucket is a leak worth looking at.
I will use an nvidia l4 gpu as the example. It is a cheap card, which makes the hidden costs look big next to the rate. The setup is a small image generation service:
One L4 at $0.44 an hour, left running all month
Real traffic for about 10 hours a day
500GB of persistent storage for models, outputs and logs
800GB of outbound data a month, at a typical hyperscaler egress rate of $0.09 per GB
What does the audit actually show?
Line
Monthly cost
Bought work?
GPU, 300 busy hours
$132
Yes
GPU, 430 idle hours
$189
No, waiting
Storage, 500GB at $0.10
$50
Partly, much of it is old files
Egress, 800GB at $0.09
$72
Moving, not computing
Total
$443
Only about $132 of that $443 paid for the GPU doing something. Under a third. The rest went to waiting, holding and moving. This is a deliberately unoptimised setup, but it is not an unusual one.
How much does idle time really cost?
You pay for provisioned hours, not busy hours. Billing follows the time the instance exists, not the time the GPU is working.
Studies disagree on how bad it is, mostly because they measure different things. One 2026 report on Kubernetes clusters measured average GPU utilisation at around 5 percent. Other studies put it between 30 and 50 percent. Surveys also suggest fewer than one in five teams run automatic shutdown policies for GPU instances.
The classic leak is the overnight job. A training run finishes at 3 a.m., and the instance keeps running until someone logs in at 11. Eight idle hours on an H100 costs roughly $24.
Why does a cheap GPU hide this problem better?
Because nobody notices small numbers. Eight idle hours on an L4 is about $3.50, so no one raises an alert. Repeat it every night and it becomes roughly $105 a month, which is a third of the whole GPU bill in the example above, spent on nothing.
What do storage costs look like once the GPU is off?
They carry on. Persistent storage usually runs between $0.08 and $0.15 per GB per month, and it bills whether the instance is on, off or forgotten.
The same few culprits show up again and again:
Old model checkpoints nobody will ever reload
The same dataset copied to three different volumes
Model files downloaded fresh each time and cached in several places
Logs that were never rotated
Storage cost does not shrink when your GPU is cheap. A 500GB volume costs the same next to an L4 as next to an H200, so on a small GPU it takes a much bigger share of the bill.
When does egress become a real cost?
When a lot of data leaves the provider's network. Hyperscalers commonly charge $0.08 to $0.12 per GB for it, and some dedicated GPU clouds state plainly that they charge nothing for ingress or egress.
For text-in, text-out inference, egress is usually trivial. For anything that returns images, video or large files, like our example, it adds up quickly. It also bites when you move big datasets between clouds or regions.
How do you fix each leak?
Each fix has a trade-off, so pick the ones your workload can live with.
Leak
Fix
Trade-off
Idle time
Auto-stop after 30 to 60 minutes of low GPU use, or schedule it to run only in working hours
Cold start delay when it wakes up
Storage
Delete old checkpoints, keep cold data in cheaper object storage
Slower to reload what you moved
Egress
Put a CDN in front, keep traffic in one region, or use a provider with no egress charge
Some setup and migration effort
Run the example again with these applied. The GPU only runs for its 300 busy hours, storage drops to 150GB, and egress goes to zero on a no-egress provider. The bill falls from $443 to about $147, a cut of roughly two thirds.
That only works if your service can tolerate a cold start. An always-on API that must answer instantly cannot switch off overnight, so for that kind of workload the saving mostly comes from storage and egress.
What should you check first if you only have ten minutes?
Start with hours. Compare the GPU hours you were billed for against the hours anything was actually running, because idle time is usually the biggest leak and the easiest to switch off.
Then list your storage volumes by size and by last-used date, and look for anything untouched for a month. Last, check outbound data by destination. If most of it goes to your own users, that is normal. If it goes to another cloud, ask why.
Where this leaves you
The hourly rate tells you what a GPU costs to switch on. It says very little about what it costs to run your workload. Do the sum once, with your real hours, your real storage and your real traffic, and you will find where the money is going faster than any pricing page can tell you.
The numbers in the example are illustrative, so swap in your own. The method is what matters: sort every dollar into work, waiting, holding or moving, and then go after the biggest bucket that is not work.
Frequently asked questions
Do I pay for a GPU instance when it is stopped?
Usually the GPU time stops billing, but storage and any reserved IP addresses keep going. Check what your provider keeps charging for in the stopped state, since it differs.
How often should I audit my GPU bill?
Once a month is enough for most teams, plus a budget alert so a runaway instance cannot go a whole week unnoticed. The first audit usually finds the most. After that it is a ten minute habit.
Is idle time always a mistake?
No. A GPU you keep warm so users never wait is paying for speed, and that can be a good trade. The mistake is idle time you did not choose, like the instance still running after a job has finished.