Ask what a GPU costs and you get an hourly rate. Compare two providers and you compare two hourly rates. Then the invoice arrives and it is roughly double what the arithmetic said, and nobody can point at the line that did it.
The hourly rate is real. It is also, for most teams, somewhere between 40% and 60% of what a training programme actually costs. Here is the rest.
You are billed for wall-clock time the instance exists, not for time the accelerator computes. Between those two numbers sit:
The metric that matters is not GPU-hours consumed. It is cost per completed run. Track that for a month and the difference between a team at 85% useful utilisation and one at 45% is a hiring decision, not a rounding error.
Compute is bursty. Storage is permanent, and it accumulates quietly.
The dataset itself is usually the smaller half. Checkpoints are the larger one:
checkpoint size × epochs kept × experiments per month
A 7B model checkpointed with optimiser state is around 80 GB. Keep every epoch of a 30-epoch run and that is 2.4 TB for one experiment. Run twelve experiments in a quarter and nobody deletes anything, because deleting someone else's checkpoint is how you become unpopular.
Two fixes, both boring: keep best-and-last rather than every epoch, and put a lifecycle rule on the artefact bucket so anything older than ninety days from a non-promoted run expires. Both are ten minutes of work and both are usually skipped.
Data goes in free and comes out priced. That asymmetry is a deliberate design choice and it shapes GPU economics more than any hourly rate.
Where it lands on an ML team:
Individually each is a defensible engineering decision. Together they mean the cost of leaving grows with every month you stay, which is the actual mechanism of lock-in. Model the exit cost before the dataset is large, because after that the decision is made for you.
Preemptible pricing looks like a 60–70% discount. The real discount is smaller, and it depends entirely on how much work you lose per interruption.
The arithmetic:
effective_cost = spot_rate × (1 + wasted_fraction)
wasted_fraction ≈ (checkpoint_interval / 2) / mean_time_between_preemptions
Checkpoint every 30 minutes on capacity preempted every 3 hours and you lose about 8% — the discount holds. Checkpoint hourly on capacity preempted every 90 minutes and you are losing a third of the run, plus the restart overhead from section 1, and the discount has evaporated.
Frequent checkpointing is the mitigation, and it is not free either: it costs write time and storage. Spot is excellent for long, well-checkpointed, restartable pretraining. It is a poor fit for a fine-tune that finishes in four hours and needs to be done today.
The scheduler head node that runs 24/7 to coordinate jobs that run 6 hours a week. The managed notebook someone started on a GPU instance in March. The staging cluster that mirrors production and serves nobody. The load balancer in front of an inference endpoint with no traffic.
None of these are large. All of them are always on, and always-on beats occasionally-expensive over a quarter. One afternoon with the billing export, sorted by resource and filtered to things with zero utilisation, typically pays for itself several times over.
A worked example. Quoted rate €2.50/hour for the accelerator, a 40-hour run:
€170 against a headline of €100. Not catastrophic — but if you chose the provider on the €2.50 figure and the alternative was €2.90 with no egress charge and faster staging, you chose wrong.
Three numbers, reviewed monthly:
Every one of these is available from tags and a billing export. None of them appear on a pricing page.
Antyxsoft GPU instances are launching soon, billed monthly on the same invoice as the rest of your estate and with no egress charge on the data you move in and out. Join the waitlist to be allocated capacity when your region opens.