Speed test matrix
NVIDIA-Nemotron-Nano-9B-v2-quantized.w4a16 on RTX 3090 24GB
vllm · 0.32.0 · W4A165 contexts (0–120K) × 8 concurrency levels (1–128) · prefill at 8K, 16K, 32K, 64K, 120K
Hardware
- Type
- Discrete GPU
- GPU
- RTX 3090
- VRAM
- 24 GB
- CPU
- AMD Ryzen 9 7900X (12C)
- RAM
- 32 GB
- OS
- Ubuntu 24.04.5
Engine
- Engine
- vllm
- Version
- 0.32.0
- Quantization
- W4A16
- Backend
- cuda
- Repository
- github.com/vllm-project/vllm
- Build
- vllm/vllm-openai:v0.32.0-x86_64
Run
- Served model
- bench
- Revision
- main
- Benchmark tool
- llm-inference-bench v0.8.0
- Decode test
- Fixed duration
- Prefill mode
- Measured during decode warm-up
- Time per measurement
- 30 s
- Max output
- 8,192 tokens
Launch command
# Untuned out-of-the-box baseline. Spec decode: none # 1x RTX 3090 24GB (Zagitta/gpu-unlock), 350 W limit (VBIOS max), PCIe Gen4 x16 | AMD Ryzen 9 7900X 12C | 32 GB DDR5 | Ubuntu 24.04.5, NVIDIA driver 595.99.02 vllm serve RedHatAI/NVIDIA-Nemotron-Nano-9B-v2-quantized.w4a16 --max-model-len 131072 --gpu-memory-utilization 0.94 --max-num-seqs 128 --enable-prefix-caching --trust-remote-code
Prefill
prompt tok/s by context length8K context4,9901,681 ms TTFT
16K context4,8553,421 ms TTFT
32K context4,6327,140 ms TTFT
64K context4,26315,475 ms TTFT
120K context3,81532,390 ms TTFT
Sustained decode
total tok/s · rows are context length, columns are simultaneous requests| Context | 1 | 2 | 4 | 8 | 16 | 32 | 64 | 128 |
|---|---|---|---|---|---|---|---|---|
| 0 | 129.230 ms TTFT | 245.6182 ms TTFT | 446.585 ms TTFT | 755.8149 ms TTFT | 1,150.4287 ms TTFT | 1,494.3456 ms TTFT | 1,689.9889 ms TTFT | Over capacity |
| 16K | 124.2206 ms TTFT | 229.6305 ms TTFT | 411.8502 ms TTFT | 653.9904 ms TTFT | 907.81,735 ms TTFT | Over capacity | Over capacity | Over capacity |
| 32K | 119.7114 ms TTFT | 215.7161 ms TTFT | 381.0248 ms TTFT | 572.0431 ms TTFT | 730.7831 ms TTFT | Over capacity | Over capacity | Over capacity |
| 64K | 111.6186 ms TTFT | 192.2251 ms TTFT | 330.7372 ms TTFT | 459.2640 ms TTFT | Over capacity | Over capacity | Over capacity | Over capacity |
| 120K | 99.7250 ms TTFT | 161.2338 ms TTFT | 267.9533 ms TTFT | Over capacity | Over capacity | Over capacity | Over capacity | Over capacity |
Over capacity: not run because this many requests at this context would exceed the server's KV cache.
TTFT is measured after the benchmark warms the server's prompt cache, so it mostly excludes prefill.
All measurements
Latencies are medians. Total tok/s is output across all simultaneous requests.| Phase | Context | Requests at once | Status | Total tok/s | Per request tok/s | TTFT | Time between tokens | Average active requests | Completed requests | Output tokens | Measured for |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Prefill | 8K | 1 | Valid | 4,990.0 | — | 1,681 ms | — | — | 1 | — | — |
| Prefill | 16K | 1 | Valid | 4,855.0 | — | 3,421 ms | — | — | 1 | — | — |
| Prefill | 32K | 1 | Valid | 4,632.0 | — | 7,140 ms | — | — | 1 | — | — |
| Prefill | 64K | 1 | Valid | 4,263.0 | — | 15,475 ms | — | — | 1 | — | — |
| Prefill | 120K | 1 | Valid | 3,815.0 | — | 32,390 ms | — | — | 1 | — | — |
| Sustained decode | 0 | 1 | Valid | 129.2 | 129.4 | 30 ms | 7.7 ms | 1.0 | 0 | 3,877 | 30.0 s |
| Sustained decode | 0 | 2 | Valid | 245.6 | 123.1 | 182 ms | 8.1 ms | 2.0 | 0 | 7,366 | 30.0 s |
| Sustained decode | 0 | 4 | Valid | 446.5 | 111.9 | 85 ms | 8.9 ms | 4.0 | 0 | 13,392 | 30.0 s |
| Sustained decode | 0 | 8 | Valid | 755.8 | 94.9 | 149 ms | 10.5 ms | 8.0 | 0 | 22,672 | 30.0 s |
| Sustained decode | 0 | 16 | Valid | 1,150.4 | 72.2 | 287 ms | 13.9 ms | 16.0 | 0 | 34,512 | 30.0 s |
| Sustained decode | 0 | 32 | Valid | 1,494.3 | 46.8 | 456 ms | 21.4 ms | 32.0 | 0 | 44,800 | 30.0 s |
| Sustained decode | 0 | 64 | Valid | 1,689.9 | 26.3 | 889 ms | 38.0 ms | 64.0 | 0 | 50,688 | 30.0 s |
| Sustained decode | 0 | 128 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 16K | 1 | Valid | 124.2 | 124.3 | 206 ms | 8.0 ms | 1.0 | 0 | 3,725 | 30.0 s |
| Sustained decode | 16K | 2 | Valid | 229.6 | 114.6 | 305 ms | 8.7 ms | 2.0 | 0 | 6,889 | 30.0 s |
| Sustained decode | 16K | 4 | Valid | 411.8 | 102.3 | 502 ms | 9.8 ms | 4.0 | 0 | 12,352 | 30.0 s |
| Sustained decode | 16K | 8 | Valid | 653.9 | 80.3 | 904 ms | 12.5 ms | 8.0 | 0 | 19,616 | 30.0 s |
| Sustained decode | 16K | 16 | Valid | 907.8 | 54.4 | 1,735 ms | 18.4 ms | 16.0 | 0 | 27,232 | 30.0 s |
| Sustained decode | 16K | 32 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 16K | 64 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 16K | 128 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 32K | 1 | Valid | 119.7 | 119.8 | 114 ms | 8.3 ms | 1.0 | 0 | 3,591 | 30.0 s |
| Sustained decode | 32K | 2 | Valid | 215.7 | 107.9 | 161 ms | 9.3 ms | 2.0 | 0 | 6,470 | 30.0 s |
| Sustained decode | 32K | 4 | Valid | 381.0 | 95.1 | 248 ms | 10.5 ms | 4.0 | 0 | 11,428 | 30.0 s |
| Sustained decode | 32K | 8 | Valid | 572.0 | 71.2 | 431 ms | 14.0 ms | 8.0 | 0 | 17,160 | 30.0 s |
| Sustained decode | 32K | 16 | Valid | 730.7 | 45.4 | 831 ms | 22.0 ms | 16.0 | 0 | 21,920 | 30.0 s |
| Sustained decode | 32K | 32 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 32K | 64 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 32K | 128 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 64K | 1 | Valid | 111.6 | 111.7 | 186 ms | 9.0 ms | 1.0 | 0 | 3,347 | 30.0 s |
| Sustained decode | 64K | 2 | Valid | 192.2 | 96.1 | 251 ms | 10.4 ms | 2.0 | 0 | 5,766 | 30.0 s |
| Sustained decode | 64K | 4 | Valid | 330.7 | 82.4 | 372 ms | 12.1 ms | 4.0 | 0 | 9,921 | 30.0 s |
| Sustained decode | 64K | 8 | Valid | 459.2 | 56.6 | 640 ms | 17.7 ms | 8.0 | 0 | 13,768 | 30.0 s |
| Sustained decode | 64K | 16 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 64K | 32 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 64K | 64 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 64K | 128 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 120K | 1 | Valid | 99.7 | 99.8 | 250 ms | 10.0 ms | 1.0 | 0 | 2,991 | 30.0 s |
| Sustained decode | 120K | 2 | Valid | 161.2 | 80.7 | 338 ms | 12.4 ms | 2.0 | 0 | 4,836 | 30.0 s |
| Sustained decode | 120K | 4 | Valid | 267.9 | 66.8 | 533 ms | 15.0 ms | 4.0 | 0 | 8,036 | 30.0 s |
| Sustained decode | 120K | 8 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 120K | 16 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 120K | 32 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 120K | 64 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 120K | 128 | Over capacity | — | — | — | — | — | — | — | — |
Over capacity: not run because this many requests at this context would exceed the server's KV cache.
