Speed test matrix
Qwen3.5-9B-FP8-dynamic on RTX 3090 24GB
vllm · 0.32.0 · FP8 dynamic6 contexts (0–232K) × 8 concurrency levels (1–128) · prefill at 8K, 16K, 32K, 64K, 128K
Hardware
- Type
- Discrete GPU
- GPU
- RTX 3090
- VRAM
- 24 GB
- CPU
- Intel Core i7-9700K (8C)
- RAM
- 32 GB
- OS
- Ubuntu 24.04.5
Engine
- Engine
- vllm
- Version
- 0.32.0
- Quantization
- FP8 dynamic
- 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), 420 W limit, PCIe Gen3 x16 | Intel Core i7-9700K 8C | 32 GB DDR4 | Ubuntu 24.04.5, NVIDIA driver 580.178.04 vllm serve RedHatAI/Qwen3.5-9B-FP8-dynamic --max-model-len 245760 --gpu-memory-utilization 0.94 --max-num-seqs 128 --enable-prefix-caching --trust-remote-code --language-model-only
Prefill
prompt tok/s by context length8K context7,1051,153 ms TTFT
16K context6,7892,389 ms TTFT
32K context6,3425,092 ms TTFT
64K context5,64511,412 ms TTFT
128K context4,59528,005 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 | 73.437 ms TTFT | 140.451 ms TTFT | 274.184 ms TTFT | 534.7135 ms TTFT | 961.2248 ms TTFT | Over capacity | Over capacity | Over capacity |
| 16K | 70.1112 ms TTFT | 130.3161 ms TTFT | 250.9270 ms TTFT | 464.4433 ms TTFT | Over capacity | Over capacity | Over capacity | Over capacity |
| 32K | 67.3111 ms TTFT | 121.6154 ms TTFT | 230.7225 ms TTFT | Over capacity | Over capacity | Over capacity | Over capacity | Over capacity |
| 64K | 62.4194 ms TTFT | 107.3261 ms TTFT | Over capacity | Over capacity | Over capacity | Over capacity | Over capacity | Over capacity |
| 128K | 54.3522 ms TTFT | Over capacity | Over capacity | Over capacity | Over capacity | Over capacity | Over capacity | Over capacity |
| 232K | 44.9778 ms TTFT | Over capacity | Over capacity | 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 | 7,105.0 | — | 1,153 ms | — | — | 1 | — | — |
| Prefill | 16K | 1 | Valid | 6,789.0 | — | 2,389 ms | — | — | 1 | — | — |
| Prefill | 32K | 1 | Valid | 6,342.0 | — | 5,092 ms | — | — | 1 | — | — |
| Prefill | 64K | 1 | Valid | 5,645.0 | — | 11,412 ms | — | — | 1 | — | — |
| Prefill | 128K | 1 | Valid | 4,595.0 | — | 28,005 ms | — | — | 1 | — | — |
| Sustained decode | 0 | 1 | Valid | 73.4 | 73.5 | 37 ms | 13.6 ms | 1.0 | 0 | 2,202 | 30.0 s |
| Sustained decode | 0 | 2 | Valid | 140.4 | 70.3 | 51 ms | 14.2 ms | 2.0 | 0 | 4,212 | 30.0 s |
| Sustained decode | 0 | 4 | Valid | 274.1 | 68.7 | 84 ms | 14.6 ms | 4.0 | 0 | 8,224 | 30.0 s |
| Sustained decode | 0 | 8 | Valid | 534.7 | 67.1 | 135 ms | 14.9 ms | 8.0 | 0 | 16,040 | 30.0 s |
| Sustained decode | 0 | 16 | Valid | 961.2 | 60.4 | 248 ms | 16.5 ms | 16.0 | 0 | 28,832 | 30.0 s |
| Sustained decode | 0 | 32 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 0 | 64 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 0 | 128 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 16K | 1 | Valid | 70.1 | 70.2 | 112 ms | 14.3 ms | 1.0 | 0 | 2,103 | 30.0 s |
| Sustained decode | 16K | 2 | Valid | 130.3 | 65.2 | 161 ms | 15.3 ms | 2.0 | 0 | 3,910 | 30.0 s |
| Sustained decode | 16K | 4 | Valid | 250.9 | 62.6 | 270 ms | 16.0 ms | 4.0 | 0 | 7,524 | 30.0 s |
| Sustained decode | 16K | 8 | Valid | 464.4 | 57.7 | 433 ms | 17.3 ms | 8.0 | 0 | 13,928 | 30.0 s |
| Sustained decode | 16K | 16 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 16K | 32 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 16K | 64 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 16K | 128 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 32K | 1 | Valid | 67.3 | 67.4 | 111 ms | 14.8 ms | 1.0 | 0 | 2,020 | 30.0 s |
| Sustained decode | 32K | 2 | Valid | 121.6 | 60.8 | 154 ms | 16.4 ms | 2.0 | 0 | 3,648 | 30.0 s |
| Sustained decode | 32K | 4 | Valid | 230.7 | 57.7 | 225 ms | 17.3 ms | 4.0 | 0 | 6,920 | 30.0 s |
| Sustained decode | 32K | 8 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 32K | 16 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 32K | 32 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 32K | 64 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 32K | 128 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 64K | 1 | Valid | 62.4 | 62.4 | 194 ms | 16.0 ms | 1.0 | 0 | 1,870 | 30.0 s |
| Sustained decode | 64K | 2 | Valid | 107.3 | 53.7 | 261 ms | 18.6 ms | 2.0 | 0 | 3,218 | 30.0 s |
| Sustained decode | 64K | 4 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 64K | 8 | Over capacity | — | — | — | — | — | — | — | — |
| 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 | 128K | 1 | Valid | 54.3 | 54.5 | 522 ms | 18.4 ms | 1.0 | 0 | 1,629 | 30.0 s |
| Sustained decode | 128K | 2 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 128K | 4 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 128K | 8 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 128K | 16 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 128K | 32 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 128K | 64 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 128K | 128 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 232K | 1 | Valid | 44.9 | 45.1 | 778 ms | 22.2 ms | 1.0 | 0 | 1,348 | 30.0 s |
| Sustained decode | 232K | 2 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 232K | 4 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 232K | 8 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 232K | 16 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 232K | 32 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 232K | 64 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 232K | 128 | Over capacity | — | — | — | — | — | — | — | — |
Over capacity: not run because this many requests at this context would exceed the server's KV cache.
