Benchmarks
SDXL benchmarks. Images per dollar.
SDXL base at 1024 x 1024 on four rented GPUs, eager and compiled, batch 1 and 4: seconds per image and what 1,000 images cost.
Measured
$0.91per 1,000 images
RTX A6000, compiled, batch 1, at the run-day price.
Run 2026-10-27
SDXL images per dollar on four GPUs. Eager vs torch.compile, batch 1 and 4.
At run-day prices an RTX A6000 made 1,000 images for $0.91, an RTX 5090 for $0.93, an L40S for $1.01 and an H100 for $1.80. The H100 took 1.67 s per image against 4.94 s on the RTX A6000.
Hardware
- RTX A6000 48 GB, L40S 48 GB, RTX 5090 32 GB and H100 PCIe 80 GB, one per machine
Software
- stabilityai/stable-diffusion-xl-base-1.0, fp16 weights, with the madebyollin/sdxl-vae-fp16-fix VAE; base model only, no refiner
- diffusers 0.42.1, Python 3.12, PyTorch's built-in SDPA attention
Method
- 1024 x 1024, 30 steps, the default scheduler and guidance, one fixed prompt
- Batch 1 and batch 4, eager and torch.compile(pipe.unet, fullgraph=True) with channels-last; one warm-up generation, then 8 images timed at batch 1 and 16 at batch 4
| GPU | Config | Seconds per image | Images per hour | $ per 1,000, run day | Peak VRAM | $ per 1,000, today |
|---|---|---|---|---|---|---|
| RTX A6000 | eager, batch 1 | 5.79 | 622 | 1.06 | 9.0 GB | 0.92 |
| RTX A6000 | eager, batch 4 | 5.65 | 637 | 1.04 | 14.6 GB | 0.90 |
| RTX A6000 | compiled, batch 1 | 4.94 | 728 | 0.91 | 9.0 GB | 0.79 |
| RTX A6000 | compiled, batch 4 | 5.13 | 701 | 0.94 | 14.6 GB | 0.81 |
| L40S | eager, batch 1 | 3.48 | 1,034 | 1.10 | 9.0 GB | 0.52 |
| L40S | eager, batch 4 | 3.39 | 1,064 | 1.07 | 14.6 GB | 0.51 |
| L40S | compiled, batch 1 | 3.21 | 1,121 | 1.02 | 9.0 GB | 0.48 |
| L40S | compiled, batch 4 | 3.19 | 1,130 | 1.01 | 14.6 GB | 0.48 |
| RTX 5090 | eager, batch 1 | 2.77 | 1,301 | 1.02 | 9.0 GB | 0.64 |
| RTX 5090 | eager, batch 4 | 2.66 | 1,355 | 0.98 | 14.6 GB | 0.62 |
| RTX 5090 | compiled, batch 1 | 2.53 | 1,424 | 0.93 | 9.0 GB | 0.59 |
| RTX 5090 | compiled, batch 4 | 2.53 | 1,421 | 0.94 | 14.6 GB | 0.59 |
| H100 | eager, batch 1 | 2.25 | 1,603 | 2.42 | 9.0 GB | 2.41 |
| H100 | eager, batch 4 | 1.94 | 1,853 | 2.09 | 14.6 GB | 2.08 |
| H100 | compiled, batch 1 | 1.80 | 2,003 | 1.94 | 9.0 GB | 1.94 |
| H100 | compiled, batch 4 | 1.67 | 2,156 | 1.80 | 14.6 GB | 1.80 |
What stood out
- Batch 4 changed throughput by -4% to +4% on the RTX A6000, L40S and RTX 5090. Only the H100 gained (16% eager, 8% compiled).
- Peak memory was 9.0 GB at batch 1 and 14.6 GB at batch 4, so SDXL base fits on any of these cards with room to spare.
- The model download varied 3x between machines (24 s to 73 s for the same 7 GB). For short jobs, keep the weights on a volume.
Keep in mind
- One prompt, one resolution, one scheduler, 30 steps. Fewer steps, a distilled model or another scheduler change the absolute numbers.
- No refiner, no ControlNet, no LoRA, no attention kernels beyond PyTorch's built-in SDPA, no TensorRT.
- Treat differences under about 5% as noise.
Costs
How the costs are worked out. Run day and today, side by side.
Run day
The cost the write-up printed: the hourly price the machine was launched at that day, against what it measured. Prices move daily, so each run-day figure carries its date. Every run was a single run.
Today
The run-day figure moved by today's price: the "from" price per GPU-hour shown on /pricing, over the run-day rate per GPU-hour. A GPU that is not in stock right now reads "Not in stock" rather than a stale price. Prices read 2026-11-04 04:00 UTC.
GPUs
The GPUs on this page. From price per GPU-hour, today.
Benchmarks