Overcast
← Overcast

Modeled cost comparison

What three example jobs would cost sized by hand on AWS, and run on Overcast.

This is a model, not a benchmark. We have not run these jobs. Every number is computed from public on-demand list prices, checked October 16, 2026, and the assumptions below. All the inputs and every step of the math are on this page, so you can redo it.

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.

JobWithout OvercastWith 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.

JobWithout OvercastOvercast 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.

JobUseful workInput dataDeadline
summarize_docs.py6,000 H100 GPU hours0.4 TB12 h
label_video.py1,000 H100 GPU hours180 TB8 h
backtest_fx.py30,000 vCPU hours1.5 TB6 h

How each number is computed

  1. 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.
  2. With Overcast. Useful hours divided by 80% utilization gives the hours you pay for.
  3. 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.
  4. 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.
  5. 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.
  6. 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:

ProviderGPUsHoursGPU hoursPriceComputeData out of AWS
Lambda25612.003,072$3.99$12,257168 GB
Nebius16012.001,920$4.50$8,640105 GB
Crusoe6412.00768$4.50$3,45642 GB
CoreWeave14512.001,740$6.155$10,71095 GB
Total6257,500$35,063410 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:

ProviderGPUsHoursGPU hoursPriceComputeData out of AWS
AWS1288.001,024$6.88$7,045read in place
Lambda297.79226$3.99$90232.54 TB
Total1571,250$7,94732.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:

ProvidervCPUsHoursvCPU hoursPriceComputeData out of AWS
Carolina Cloud5126.003,072$0.0150$46126 GB
Hetzner2,0486.0012,288$0.0280$344503 GB
Vultr1,0246.006,144$0.0300$184252 GB
AWS2,6666.0015,996$0.0446$714read in place
Total6,25037,500$1,288881 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.

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 firstAvailable H100s
Lambda256
Nebius160
Crusoe64
CoreWeave224
AWS128
Google Cloud64
Azure96
Cheapest firstAvailable vCPUs
Carolina Cloud512
Hetzner2,048
Vultr1,024
AWS4,096
Google Cloud2,048
DigitalOcean1,024
Azure2,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.

ProviderMachineRegionPer GPU hourSource
Lambda8x H100 SXMNot listed$3.99lambda.ai
NebiusHGX H100Not listed$4.50nebius.com
CrusoeH100 80GB HGXNot listed$4.50crusoe.ai
CoreWeaveHGX H100, 8 GPUNorth America$6.155coreweave.com
AWSp5.48xlargeus-east-1$6.88aws.amazon.com
Oracle CloudBM.GPU.H100.8All regions$10.00oracle.com
Google Clouda3-highgpu-8gus-central1$11.061cloud.google.com
AzureND96isr H100 v5East US$12.29prices.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.

ProviderMachineRegionPer hourSource
Carolina Cloud16 vCPU, 32 GBNorth Carolina$0.2400docs.carolinacloud.io
HetznerCPX51, 16 vCPU, 32 GBUS$0.4479docs.hetzner.com
VultrVX1, 16 vCPU, 64 GBAll regions$0.4800vultr.com
AWSc7i.4xlarge, 16 vCPU, 32 GBus-east-1$0.7140aws.amazon.com
Google Cloudn4-standard-16, 16 vCPU, 64 GBus-central1$0.7256cloud.google.com
DigitalOceanGeneral Purpose, 16 vCPU, 64 GBAll regions$0.7500digitalocean.com
AzureD16s v5, 16 vCPU, 64 GBEast US$0.7680prices.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 volumePer 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