Skip to content

Benchmarks

vLLM benchmarks. Cost per GPU.

Qwen2.5-7B on vLLM, measured on rented GPUs: throughput, latency and cost per 1M output tokens, then FP8, prefix caching and Ollama on a 24 GB card.

Measured

$0.12per 1M output tokens

RTX A6000, vLLM, 64 concurrent requests, at the run-day price.

Run 2026-10-26, single runSee the table

On this page

Run 2026-10-26

Qwen2.5-7B on vLLM, three GPUs. Cost per 1M output tokens.

At 64 concurrent requests a million output tokens cost $0.12 on the RTX A6000, $0.17 on the L40S and $0.22 on the H100 at run-day prices. The H100 produced 4,515 tokens per second against 1,727 on the RTX A6000, and every user still saw 79 tokens per second.

Single run: one run per GPU, on one morning. First published 2026-10-26.

The full write-up, with every command

Hardware

GPUs
RTX A6000 48 GB, L40S 48 GB and H100 PCIe 80 GB, one GPU per machine

Software

Model
Qwen/Qwen2.5-7B-Instruct, bf16, no quantization
Engine
vLLM 0.11.0, torch 2.8.0+cu128, transformers 4.57.6

Method

Server
--dtype bfloat16 --max-model-len 4096 --gpu-memory-utilization 0.90, everything else default
Load
vllm bench serve, random prompts, 512 tokens in and exactly 256 out, concurrency 1, 8, 32 and 64 (16, 64, 192 and 320 prompts), seed 42, client on the same machine

Price per hour

  • RTX A6000$0.74 on 2026-10-26, from $0.57/hr per GPU today
  • L40S$1.14 on 2026-10-26, from $0.54/hr per GPU on a 2-GPU machine today
  • H100$3.55 on 2026-10-26, from $3.87/hr per GPU on a 4-GPU machine today
Output tokens per second at 64 concurrent requestsOutput tok/s
Measured on 2026-10-26, from the table below.
Throughput, latency and cost per 1M output tokens
GPUConcurrencyOutput tok/sPer-user tok/sMedian TTFTp99 TTFT$ per 1M, run day$ per 1M, today
RTX A60001424382 ms85 ms4.863.74
RTX A6000830740289 ms529 ms0.670.52
RTX A6000321,01232479 ms1,940 ms0.200.15
RTX A6000641,72732259 ms3,347 ms0.120.09
L40S1484948 ms49 ms6.563.11
L40S835445161 ms299 ms0.890.42
L40S321,08234279 ms1,050 ms0.290.14
L40S641,88733146 ms2,169 ms0.170.08
H100110410525 ms26 ms9.4710.32
H100877610062 ms125 ms1.271.38
H100322,56687233 ms410 ms0.380.41
H100644,51579101 ms960 ms0.220.24

Per-user tok/s is 1000 / median time per output token: how fast one stream feels to the person reading it.

Run day: the price on 2026-10-26, as the run paid it.

Today: the run-day figure times today's price per GPU-hour over the run-day price per GPU-hour. Today's price is the "from" price per GPU-hour shown on /pricing, which can be on a machine with more GPUs than the run used (the list of GPUs below names it). Prices read 2026-11-04 04:00 UTC.

Time before each machine could serve, measured on the machine
GPUvLLM installModel download (15 GB)Server readyFirst chat reply
RTX A600029 s103 s114 s1.22 s
L40S7 s78 s67 s0.85 s
H1004 s13 s54 s0.56 s

What stood out

  • The H100 produced 2.6x the RTX A6000's throughput at concurrency 64 for 4.8x the run-day hourly price.
  • Going from 1 to 64 concurrent requests cut the cost per token by about 40x on all three cards.
  • p99 time to first token at concurrency 64 on the RTX A6000 was 3.3 s, while the median was 259 ms.
  • The 15 GB model download took 13 s on one machine and 103 s on another.

Keep in mind

  • Random prompts, fixed 512/256 shape. Real chat traffic has prefix reuse and varied lengths.
  • PCIe cards, one per machine. No tensor parallelism, no FP8, no speculative decoding.
  • Treat differences under about 10% as noise.

Run 2026-10-27

FP8 vs bf16 on an H100. Throughput, memory and GSM8K accuracy.

FP8 gave 1.40x the output throughput at 64 concurrent requests, 6,147 against 4,401 tokens per second. On the first 300 GSM8K questions it answered 270 right against 272 for bf16.

Single run: one run per setting. First published 2026-10-27.

The full write-up, with every command

Hardware

GPU
One H100 PCIe 80 GB

Software

Model
Qwen/Qwen2.5-7B-Instruct, the regular bf16 checkpoint for both modes
Engine
vLLM 0.11.0, torch 2.8.0+cu128, transformers 4.57.6
FP8
vLLM online quantization (--quantization fp8): weights converted at load with a per-tensor scale, activations scaled dynamically, KV cache bf16 in both modes

Method

Throughput
vllm bench serve, random prompts, 512 tokens in and exactly 256 out, concurrency 1, 8, 32 and 64 (16, 64, 192 and 320 prompts), seed 42, client on the same machine, a fresh server per mode
Quality
The first 300 GSM8K test questions, zero-shot, greedy, up to 768 output tokens, 64 requests in flight

Price per hour

  • H100$3.86 on 2026-10-27, from $3.87/hr per GPU on a 4-GPU machine today
Output tokens per second by concurrencybf16FP8
Measured on 2026-10-27, from the table below.
Throughput, latency and cost per 1M output tokens
ConcurrencyModeOutput tok/sPer-user tok/sMedian TTFTp99 TTFT$ per 1M, run day$ per 1M, today
1bf1610410526 ms28 ms10.3310.36
1FP816016221 ms25 ms6.706.72
8bf1676699119 ms141 ms1.401.40
8FP81,17315388 ms109 ms0.910.91
32bf162,49084163 ms502 ms0.430.43
32FP83,709130221 ms375 ms0.290.29
64bf164,40177106 ms939 ms0.240.24
64FP86,14710898 ms755 ms0.170.17

Run day: the price on 2026-10-27, as the run paid it.

Today: the run-day figure times today's price per GPU-hour over the run-day price per GPU-hour. Today's price is the "from" price per GPU-hour shown on /pricing, which can be on a machine with more GPUs than the run used (the list of GPUs below names it). Prices read 2026-11-04 04:00 UTC.

Memory, as vLLM reported it at startup
ModeWeightsKV cacheKV cache sizeServer ready after
bf1614.25 GiB51.27 GiB959,936 tokens66.5 s
FP88.14 GiB57.38 GiB1,074,320 tokens67.5 s
GSM8K, first 300 test questions
ModeCorrectAccuracyWall time, 64 in flight
bf16272 / 30090.7%15.3 s
FP8270 / 30090.0%12.1 s

What stood out

  • The two modes gave the same final answer on 272 of 300 questions. bf16 alone was right on 10 questions, FP8 alone on 8.
  • The online conversion added about a second to a 67 s server start.

Keep in mind

  • GSM8K with 300 questions has a standard error of about 1.7 points at 90% accuracy, so it cannot show a difference under about 3 points.
  • Online FP8 (per-tensor). Pre-quantized FP8 checkpoints and an FP8 KV cache were not tested.
  • Ada and Hopper GPUs have FP8 tensor cores. On older cards vLLM falls back to weight-only FP8 kernels, and the speed math changes.

Run 2026-10-27

Prefix caching on vs off. A shared system prompt, one L40S.

With a 4,000-token shared system prompt and 64 users at once, turning prefix caching off cut output throughput from 1,902 to 254 tokens per second and pushed p99 time to first token from 0.38 s to 23.9 s.

Single run: one run per setting, on one machine, on one day. First published 2026-10-27.

The full write-up, with every command

Hardware

GPU
One L40S 48 GB

Software

Model
Qwen/Qwen2.5-7B-Instruct, bf16, no quantization
Engine
vLLM 0.11.0, torch 2.8.0+cu128, transformers 4.57.6; 14.25 GiB of weights and 24.26 GiB of KV cache (454,272 tokens)

Method

Modes
Default (prefix caching on) and --no-enable-prefix-caching (off), a fresh server per mode, --max-model-len 8192 --gpu-memory-utilization 0.90
Load
vllm bench serve, one shared prefix of 1,000 or 4,000 tokens plus 200 unique tokens, exactly 128 output tokens, concurrency 1, 16 and 64 (24, 160 and 384 requests), client on the same machine
Hit rate
From vLLM's /metrics counters, read before and after every run

Price per hour

  • L40S$1.14 on 2026-10-27, from $0.54/hr per GPU on a 2-GPU machine today
Throughput and latency, cache on and off
Prefix tokensUsersCacheRequests/sOutput tok/sMedian TTFTp99 TTFTMedian time per tokenHit rate$ per 1,000 requests, today
1,0001on0.374840 ms44 ms20.8 ms85%$0.405
1,0001off0.3647103 ms106 ms20.8 msnot measured$0.417
1,00016on5.27675163 ms208 ms22.5 ms88%$0.028
1,00016off3.72476314 ms1,416 ms31.1 msnot measured$0.040
1,00064on14.611,870303 ms773 ms31.8 ms88%$0.010
1,00064off6.63849507 ms5,940 ms71.5 msnot measured$0.023
4,0001on0.374757 ms63 ms21.1 ms96%$0.405
4,0001off0.3342377 ms385 ms21.1 msnot measured$0.455
4,00016on5.2166798 ms147 ms23.4 ms99%$0.029
4,00016off1.90243850 ms4,987 ms59.1 msnot measured$0.079
4,00064on14.861,902172 ms384 ms32.1 ms99.6%$0.010
4,00064off1.992541,936 ms23,935 ms240 msnot measured$0.075

Today: Price per GPU-hour / (requests per second x 3600) x 1,000, with the GPU kept busy at that concurrency. Today's price is the "from" price per GPU-hour shown on /pricing, which can be on a machine with more GPUs than the run used (the list of GPUs below names it). Prices read 2026-11-04 04:00 UTC.

What it meant for the bill at the run-day price, GPU kept busy at that concurrency
Prefix tokensUsers$ per 1,000 requests, cache onCache offRatio
1,000160.0600.0851.4x
1,000640.0220.0482.2x
4,000160.0610.1672.7x
4,000640.0210.1607.5x

What stood out

  • With the cache on, at 64 users the 4,000-token prefix ran at 14.86 requests/s and the 1,000-token prefix at 14.61.
  • Median time per output token at 64 users went from 32 ms to 240 ms with a 4,000-token prefix and the cache off.
  • For a single user the cache saves latency but not money: requests per second barely moved (0.37 against 0.33).

Keep in mind

  • Synthetic prompts: one prefix shared by every request. Real traffic mixes several system prompts and lengths; hit rates will be lower.
  • The cache could hold the whole prefix easily here (454k tokens of KV cache).
  • Treat differences under about 10% as noise.

Run 2026-10-28

Ollama Q4 vs vLLM bf16 on a 24 GB A10. Speed, time to first token and GSM8K.

On this card Ollama with the Q4_K_M build was faster than vLLM in bf16 at every load tested, from 1 to 16 users, and cost less per token. Q4 scored 90.0% on 250 GSM8K questions against 91.2% for bf16, and vLLM kept the shorter time to first token once more than one user was waiting.

Single run: one run per setting, on one machine, on one day. First published 2026-10-28.

The full write-up, with every command

Hardware

GPU
One A10, 24 GB (23,028 MiB usable, 150 W limit)

Software

Ollama
Ollama 0.40.12, qwen2.5:7b-instruct-q4_K_M (GGUF, 4-bit) and qwen2.5:7b-instruct-q8_0 (GGUF, 8-bit)
vLLM
vLLM 0.11.0, Qwen/Qwen2.5-7B-Instruct in bf16, torch 2.8.0+cu128, transformers 4.57.6, --max-model-len 4096 --gpu-memory-utilization 0.92

Method

Ollama settings
OLLAMA_NUM_PARALLEL=16 OLLAMA_CONTEXT_LENGTH=4096; all 29 layers on the GPU
Client
32 fixed prompts, temperature 0, max_tokens 256, streamed through /v1/chat/completions; 1, 4 and 16 users at once (12, 32 and 96 requests), one warm-up request first
Quality
The first 250 GSM8K test questions, zero-shot, greedy, up to 512 tokens, 16 at a time

Price per hour

  • A10$1.68 on 2026-10-28, from $1.68/hr per GPU today
Throughput, time to first token and cost per 1M output tokens (this test reports p95, not p99)
ServerUsersOutput tok/sPer-user tok/sMedian TTFTp95 TTFT$ per 1M, run day$ per 1M, today
Ollama Q4_K_M1899035 ms40 ms$5.25$5.25
Ollama Q4_K_M423961110 ms136 ms$1.95$1.95
Ollama Q4_K_M1661841405 ms483 ms$0.75$0.75
Ollama Q8_01585842 ms44 ms$8.09$8.09
Ollama Q8_0419750128 ms152 ms$2.37$2.37
Ollama Q8_01648432456 ms511 ms$0.96$0.96
vLLM bf161303047 ms48 ms$15.40$15.40
vLLM bf1641193072 ms100 ms$3.93$3.93
vLLM bf161644928106 ms173 ms$1.04$1.04

Run day: the price on 2026-10-28, as the run paid it.

Today: the run-day figure times today's price per GPU-hour over the run-day price per GPU-hour. Today's price is the "from" price per GPU-hour shown on /pricing, which can be on a machine with more GPUs than the run used (the list of GPUs below names it). Prices read 2026-11-04 04:00 UTC.

Memory and GSM8K
ServerGPU memory in useGSM8K (250, greedy)GSM8K wall time
Ollama Q4_K_M8.4 GiB90.0% (225/250)104 s
Ollama Q8_011.3 GiB90.4% (226/250)140 s
vLLM bf1621.3 GiB91.2% (228/250)125 s

vLLM's memory figure is what it reserves up front, not what it needed: 4.61 GiB of it was KV cache.

What stood out

  • At 16 users Ollama Q4 still led on total throughput (618 against 449 tokens per second), but the gap had closed from 3x to 1.4x.
  • At 16 users the median time to first token was 106 ms for vLLM and 405 ms for Ollama Q4.
  • Q4 and bf16 disagreed on 13 of 250 GSM8K questions: bf16 got 8 of them right and Q4 got 5.

Keep in mind

  • Not Ollama against vLLM in general: vLLM can also serve 4-bit and 8-bit models, and that comparison would be fairer to it.
  • 256 output tokens and short prompts (about 30 tokens). Long prompts would shift the picture towards prefill speed.
  • Treat differences under about 10% 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.

  • RTX A6000from $0.57/hr per GPU
  • L40Sfrom $0.54/hr per GPU on a 2-GPU machine
  • H100from $3.87/hr per GPU on a 4-GPU machine
  • A10from $1.68/hr per GPU

Benchmarks

More benchmarks.