Modeled cost comparison
What three example jobs would cost sized by hand on AWS, and run on Overcast.
Modeled results
What each job costs, and how long it takes to finish. How busy the machines stay is the biggest unknown, so each side uses a middle estimate, explained under Assumptions.
| Job | Without Overcast | With Overcast |
|---|---|---|
| summarize_docs.pySummarize 40M documents with a 70B modelRuns on Lambda, Nebius, Crusoe, CoreWeave | $68,8003.3 days | $35,10012 hours |
| label_video.pyDetect objects in 3.6B dashcam video framesRuns on AWS, Lambda | $11,46713 hours | $10,8318 hours |
| backtest_fx.pyBacktest 5,000 FX strategies on 10 years of ticksRuns on Carolina Cloud, Hetzner, Vultr, AWS | $2,23112 hours | $1,3676 hours |
label_video.py saves the least. Its 180 TB of input sits in AWS, and the fee for moving data out eats most of what cheaper GPUs save. The main gain is finishing in 8 hours instead of 13 hours.
The console on the homepage runs the same job optimized for speed instead: all 1,024 GPUs in the example cluster at once, your racks included. It finishes in about 73 minutes for about $19,500, $12,000 of it the AWS fee for moving data out. That assumes about 315 Gbps can leave AWS the whole time, which the model does not check. In practice the transfer would likely set the pace.
How much depends on utilization
Overcast's utilization is the least certain input. This table holds everything else fixed, including 60% utilization without Overcast, and changes only Overcast's.
| Job | Without Overcast | Overcast at 60% | Overcast at 70% | Overcast at 80% |
|---|---|---|---|---|
| summarize_docs.py | $68,800 | $51,67425% less | $41,78339% less | $35,10049% less |
| label_video.py | $11,467 | $15,40434% more | $13,13315% more | $10,8316% less |
| backtest_fx.py | $2,231 | $1,91914% less | $1,59728% less | $1,36739% less |
At 60% both sides waste the same share of every machine hour, so only prices and the deadline differ. summarize_docs.py still saves 25%, even though meeting its 12-hour deadline then means renting pricier GPUs too. label_video.py only breaks even at about 77% utilization, because of the data it has to move out of AWS.
The jobs
Each job has a fixed amount of useful work, an input dataset in Amazon S3 (us-east-1), and a deadline.
| Job | Useful work | Input data | Deadline |
|---|---|---|---|
| summarize_docs.py | 6,000 H100 GPU hours | 0.4 TB | 12 h |
| label_video.py | 1,000 H100 GPU hours | 180 TB | 8 h |
| backtest_fx.py | 30,000 vCPU hours | 1.5 TB | 6 h |
How each number is computed
- Without Overcast. The job is sized by hand on AWS: useful hours divided by 60% utilization, times the AWS on-demand price. The data is already in AWS, so there is no transfer cost.
- With Overcast. Useful hours divided by 80% utilization gives the hours you pay for.
- Providers are filled cheapest first by list price, each up to the machines it has available, until the job finishes by its deadline. The last one only gets what is left.
- Work on AWS reads the input in place. Every other provider reads its share of the input out of AWS, in proportion to its share of the GPU hours. Because that transfer costs money, Overcast also tries moving AWS earlier in the order, and keeps whichever plan has the lowest total.
- Total = GPU hours on each provider times its list price, plus AWS data transfer on the tiers below, priced as if this job were the only data leaving the account that month.
- Time. With Overcast, the job finishes by its deadline. Without Overcast, it only has the machines available in your AWS account (128 H100s or 4,096 vCPUs in this example), so it takes the hours you pay for divided by those machines.
The workings, job by job
Every number in the results comes from these steps. GPU or vCPU hours are what you pay for: machines times hours.
summarize_docs.py
Without Overcast. 6,000 useful GPU hours ÷ 60% = 10,000 GPU hours on AWS at $6.88 = $68,800. On the 128 GPUs available in your AWS account, that takes 3.3 days.
With Overcast. 6,000 useful GPU hours ÷ 80% = 7,500 GPU hours, split to finish within 12 hours:
| Provider | GPUs | Hours | GPU hours | Price | Compute | Data out of AWS |
|---|---|---|---|---|---|---|
| Lambda | 256 | 12.00 | 3,072 | $3.99 | $12,257 | 168 GB |
| Nebius | 160 | 12.00 | 1,920 | $4.50 | $8,640 | 105 GB |
| Crusoe | 64 | 12.00 | 768 | $4.50 | $3,456 | 42 GB |
| CoreWeave | 145 | 12.00 | 1,740 | $6.155 | $10,710 | 95 GB |
| Total | 625 | 7,500 | $35,063 | 410 GB |
Data transfer. All 0.4 TB of the input leaves AWS: 410 GB × $0.090 = $36.86. Moving it within 12 hours takes about 0.08 Gbps sustained.
Total. $35,063 compute + $37 transfer = $35,100, which is 49% less than without Overcast.
label_video.py
Without Overcast. 1,000 useful GPU hours ÷ 60% = 1,667 GPU hours on AWS at $6.88 = $11,467. On the 128 GPUs available in your AWS account, that takes 13 hours.
With Overcast. 1,000 useful GPU hours ÷ 80% = 1,250 GPU hours, split to finish within 8 hours:
| Provider | GPUs | Hours | GPU hours | Price | Compute | Data out of AWS |
|---|---|---|---|---|---|---|
| AWS | 128 | 8.00 | 1,024 | $6.88 | $7,045 | read in place |
| Lambda | 29 | 7.79 | 226 | $3.99 | $902 | 32.54 TB |
| Total | 157 | 1,250 | $7,947 | 32.54 TB |
Data transfer. 32.54 TB of the 180 TB input leaves AWS: 10,240 GB × $0.090 + 23,085 GB × $0.085 = $2,883.83. Moving it within 8 hours takes about 10 Gbps sustained.
Total. $7,947 compute + $2,884 transfer = $10,831, which is 6% less than without Overcast.
backtest_fx.py
Without Overcast. 30,000 useful vCPU hours ÷ 60% = 50,000 vCPU hours on AWS at $0.0446 = $2,231. On the 4,096 vCPUs available in your AWS account, that takes 12 hours.
With Overcast. 30,000 useful vCPU hours ÷ 80% = 37,500 vCPU hours, split to finish within 6 hours:
| Provider | vCPUs | Hours | vCPU hours | Price | Compute | Data out of AWS |
|---|---|---|---|---|---|---|
| Carolina Cloud | 512 | 6.00 | 3,072 | $0.0150 | $46 | 126 GB |
| Hetzner | 2,048 | 6.00 | 12,288 | $0.0280 | $344 | 503 GB |
| Vultr | 1,024 | 6.00 | 6,144 | $0.0300 | $184 | 252 GB |
| AWS | 2,666 | 6.00 | 15,996 | $0.0446 | $714 | read in place |
| Total | 6,250 | 37,500 | $1,288 | 881 GB |
Data transfer. 881 GB of the 1.5 TB input leaves AWS: 881 GB × $0.090 = $79.27. Moving it within 6 hours takes about 0.35 Gbps sustained.
Total. $1,288 compute + $79 transfer = $1,367, which is 39% less than without Overcast.
Why the times differ
Two things make a job finish sooner on Overcast.
- More machines at once. In this example your AWS account has 128 H100s available. Overcast can also use the ones available at other providers, so summarize_docs.py runs on 625 H100s instead of 128.
- Busier machines. At 60% utilization, 40% of every machine hour does no useful work, so the same machines take longer. On Overcast it is 20%.
The times are only as good as the inputs. If your AWS account can get enough H100s, the job without Overcast could finish just as fast, at the same cost. The time with Overcast is the deadline each job was given, not a measurement. Neither side counts startup time, such as booting machines and loading the model.
Assumptions
80% utilization on Overcast. Our target is 90%, but it is not measured yet, so we use 80%. Dynamic hardware changes how many tasks share each machine while a job runs, so machines stay busy without running out of memory. How dynamic hardware works. For comparison, large, well-run AI data centers reach 60% to 70%, and Meta reported 83% to 85% on its research cluster (datacenterknowledge.com).
60% utilization without Overcast. This is generous: it is what a large, well-run AI data center reaches. Cast AI's 2026 State of Kubernetes Optimization report measured average utilization of 8% for CPU and 5% for GPU across about 23,000 Kubernetes clusters on AWS, Azure, and Google Cloud, and an analyst quoted in the same article puts AI clusters at 15% to 25% (datacenterknowledge.com).
Rented capacity only. Overcast can also use your own racks. These estimates leave them out, so both sides only use rented machines.
How many machines each provider has available. The cheapest provider rarely has enough machines available for a whole job. Overcast takes everything available at the cheapest one, then moves to the next cheapest, until the job can finish on time. For example, summarize_docs.py needs about 625 H100s for 12 hours, so it gets all 256 available at Lambda, then Nebius, Crusoe, and CoreWeave.
These counts are an example. Real availability changes by the minute.
| Cheapest first | Available H100s |
|---|---|
| Lambda | 256 |
| Nebius | 160 |
| Crusoe | 64 |
| CoreWeave | 224 |
| AWS | 128 |
| Google Cloud | 64 |
| Azure | 96 |
| Cheapest first | Available vCPUs |
|---|---|
| Carolina Cloud | 512 |
| Hetzner | 2,048 |
| Vultr | 1,024 |
| AWS | 4,096 |
| Google Cloud | 2,048 |
| DigitalOcean | 1,024 |
| Azure | 2,048 |
H100 prices
On-demand price per GPU hour for NVIDIA H100 80GB SXM. Where a provider prices the whole 8-GPU machine, that price is divided by 8.
| Provider | Machine | Region | Per GPU hour | Source |
|---|---|---|---|---|
| Lambda | 8x H100 SXM | Not listed | $3.99 | lambda.ai |
| Nebius | HGX H100 | Not listed | $4.50 | nebius.com |
| Crusoe | H100 80GB HGX | Not listed | $4.50 | crusoe.ai |
| CoreWeave | HGX H100, 8 GPU | North America | $6.155 | coreweave.com |
| AWS | p5.48xlarge | us-east-1 | $6.88 | aws.amazon.com |
| Oracle Cloud | BM.GPU.H100.8 | All regions | $10.00 | oracle.com |
| Google Cloud | a3-highgpu-8g | us-central1 | $11.061 | cloud.google.com |
| Azure | ND96isr H100 v5 | East US | $12.29 | prices.azure.com |
Carolina Cloud is not in the GPU estimates. It does not sell H100s: its GPUs are RTX 4090, RTX 5090, and RTX PRO 6000 Blackwell, for containers only, and its rate card lists GPU prices as varying by model (docs.carolinacloud.io).
CPU prices
On-demand price per hour for one 16 vCPU machine. RAM differs by provider and is listed with each machine. Hetzner CPX51 vCPUs are shared; the others are dedicated.
| Provider | Machine | Region | Per hour | Source |
|---|---|---|---|---|
| Carolina Cloud | 16 vCPU, 32 GB | North Carolina | $0.2400 | docs.carolinacloud.io |
| Hetzner | CPX51, 16 vCPU, 32 GB | US | $0.4479 | docs.hetzner.com |
| Vultr | VX1, 16 vCPU, 64 GB | All regions | $0.4800 | vultr.com |
| AWS | c7i.4xlarge, 16 vCPU, 32 GB | us-east-1 | $0.7140 | aws.amazon.com |
| Google Cloud | n4-standard-16, 16 vCPU, 64 GB | us-central1 | $0.7256 | cloud.google.com |
| DigitalOcean | General Purpose, 16 vCPU, 64 GB | All regions | $0.7500 | digitalocean.com |
| Azure | D16s v5, 16 vCPU, 64 GB | East US | $0.7680 | prices.azure.com |
Data transfer
Data leaving AWS us-east-1 for the internet is billed per GB per month in tiers (pricing.us-east-1.amazonaws.com):
| Monthly volume | Per GB |
|---|---|
| 0 to 10 TB | $0.090 |
| 10 to 50 TB | $0.085 |
| 50 to 150 TB | $0.070 |
| Over 150 TB | $0.050 |
Carolina Cloud (docs.carolinacloud.io), Lambda (lambda.ai), CoreWeave (coreweave.com), Nebius (nebius.com), Crusoe (crusoe.ai) charge nothing for data sent out to the internet. Incoming data is not charged. AWS also waives the first 100 GB a month of transfer out; these estimates leave that out. 1 TB counts as 1,024 GB, as AWS bills it.
Caveats
- List prices change. Spot, reserved, and negotiated prices can be much lower and are not used here.
- Transfer speed is not modeled. The workings show the sustained rate each plan needs to move its data in time.
- Lambda, Nebius, and Crusoe do not list a region on their pricing pages. AWS, Azure, Google Cloud, and Hetzner prices vary by region.
- Times use the example machine counts. With more machines available in your AWS account, the job without Overcast finishes sooner, at the same cost.
- The same GPU can run at slightly different speeds on different providers because of networking and storage. These estimates treat an H100 hour as an H100 hour.
- CPU machines differ in generation and RAM. A CPU-heavy job may run faster on some providers than others.