Speed test matrix
gemma-4-31B-it-FP8-block on RTX PRO 6000 Blackwell Server Edition 96GB
vllm · 0.30.1rc1.dev452+g73a583112 · FP86 contexts (8K–251K) × 8 concurrency levels (1–128) · prefill at 8K, 16K, 32K, 64K, 128K, 251K, 256K
Hardware
- Type
- Discrete GPU
- GPU
- RTX PRO 6000 Blackwell Server Edition
- VRAM
- 96 GB
- OS
- linux
Engine
- Engine
- vllm
- Version
- 0.30.1rc1.dev452+g73a583112
- Quantization
- FP8
- Backend
- cuda
- Repository
- github.com/vllm-project/vllm
- Build
- cuda-13.2
- Commit
73a5831127a9
Run
- Served model
- gemma
- Revision
- main
- Benchmark tool
- llm-inference-bench v0.7.6
- Decode test
- Fixed duration
- Prefill mode
- Measured during decode warm-up
- Time per measurement
- 30 s
- Max output
- 4,096 tokens
Launch command
env MAX_JOBS=2 FLASHINFER_NVCC_THREADS=1 TORCHINDUCTOR_COMPILE_THREADS=1 "$HOME/env_rtxpro6k-redhatai-vllm-73a5831127a9d2b8/bin/vllm" serve RedHatAI/gemma-4-31B-it-FP8-block --served-model-name gemma --trust-remote-code --tensor-parallel-size 1 --reasoning-parser gemma4 --enable-auto-tool-choice --tool-call-parser gemma4 --max-model-len 262144 --gpu-memory-utilization 0.83 --host 0.0.0.0 --port 8000 --api-key <redacted> --limit-mm-per-prompt '{"image":4}' --async-schedulingPrefill
prompt tok/s by context length8K context6,1061,343 ms TTFT
16K context5,1523,156 ms TTFT
32K context3,7858,553 ms TTFT
64K context2,47026,138 ms TTFT
128K context1,48486,936 ms TTFT
251K context840.0300,906 ms TTFT
256K context824.0312,925 ms TTFT
Sustained decode
total tok/s · rows are context length, columns are simultaneous requests| Context | 1 | 2 | 4 | 8 | 16 | 32 | 64 | 128 |
|---|---|---|---|---|---|---|---|---|
| 8K | 37.461 ms TTFT | 74.181 ms TTFT | Looped | Looped | Looped | Over capacity | Over capacity | Over capacity |
| 16K | 35.883 ms TTFT | 70.8118 ms TTFT | Looped | Looped | 360.4341 ms TTFT | Over capacity | Over capacity | Over capacity |
| 32K | 33.8129 ms TTFT | Looped | Looped | Looped | Over capacity | Over capacity | Over capacity | Over capacity |
| 64K | 31.5225 ms TTFT | 62.2312 ms TTFT | Looped | Over capacity | Over capacity | Over capacity | Over capacity | Over capacity |
| 128K | Looped | Looped | Over capacity | Over capacity | Over capacity | Over capacity | Over capacity | Over capacity |
| 251K | 21.8Requests queued1,100 ms TTFT | Over capacity | Over capacity | Over capacity | Over capacity | Over capacity | Over capacity | Over capacity |
Requests queued: the server could not run all requests at once, so some waited in a queue. Looped: the model kept repeating the same text, so the benchmark discarded this measurement. 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 | 6,106.0 | — | 1,343 ms | — | — | 1 | — | — |
| Prefill | 16K | 1 | Valid | 5,152.0 | — | 3,156 ms | — | — | 1 | — | — |
| Prefill | 32K | 1 | Valid | 3,785.0 | — | 8,553 ms | — | — | 1 | — | — |
| Prefill | 64K | 1 | Valid | 2,470.0 | — | 26,138 ms | — | — | 1 | — | — |
| Prefill | 128K | 1 | Valid | 1,484.0 | — | 86,936 ms | — | — | 1 | — | — |
| Prefill | 251K | 1 | Valid | 840.0 | — | 300,906 ms | — | — | 1 | — | — |
| Prefill | 256K | 1 | Valid | 824.0 | — | 312,925 ms | — | — | 1 | — | — |
| Sustained decode | 8K | 1 | Valid | 37.4 | 37.4 | 61 ms | 26.8 ms | 1.0 | 0 | 1,120 | 30.0 s |
| Sustained decode | 8K | 2 | Valid | 74.1 | 37.1 | 81 ms | 27.0 ms | 2.0 | 0 | 2,222 | 30.0 s |
| Sustained decode | 8K | 4 | Looped | — | — | — | — | — | 0 | 0 | — |
| Sustained decode | 8K | 8 | Looped | — | — | — | — | — | 0 | 0 | — |
| Sustained decode | 8K | 16 | Looped | — | — | — | — | — | 0 | 0 | — |
| Sustained decode | 8K | 32 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 8K | 64 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 8K | 128 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 16K | 1 | Valid | 35.8 | 35.8 | 83 ms | 28.0 ms | 1.0 | 0 | 1,073 | 30.0 s |
| Sustained decode | 16K | 2 | Valid | 70.8 | 35.4 | 118 ms | 28.3 ms | 2.0 | 0 | 2,124 | 30.0 s |
| Sustained decode | 16K | 4 | Looped | — | — | — | — | — | 0 | 0 | — |
| Sustained decode | 16K | 8 | Looped | — | — | — | — | — | 0 | 0 | — |
| Sustained decode | 16K | 16 | Valid | 360.4 | 22.6 | 341 ms | 44.2 ms | 16.0 | 0 | 10,812 | 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 | 33.8 | 33.8 | 129 ms | 29.6 ms | 1.0 | 0 | 1,012 | 30.0 s |
| Sustained decode | 32K | 2 | Looped | — | — | — | — | — | 0 | 0 | — |
| Sustained decode | 32K | 4 | Looped | — | — | — | — | — | 0 | 0 | — |
| Sustained decode | 32K | 8 | Looped | — | — | — | — | — | 0 | 0 | — |
| 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 | 31.5 | 31.4 | 225 ms | 31.9 ms | 1.0 | 0 | 944 | 30.0 s |
| Sustained decode | 64K | 2 | Valid | 62.2 | 31.1 | 312 ms | 32.2 ms | 2.0 | 0 | 1,865 | 30.0 s |
| Sustained decode | 64K | 4 | Looped | — | — | — | — | — | 0 | 0 | — |
| 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 | Looped | — | — | — | — | — | 0 | 0 | — |
| Sustained decode | 128K | 2 | Looped | — | — | — | — | — | 0 | 0 | — |
| 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 | 251K | 1 | Requests queued | 21.8 | 22.2 | 1,100 ms | 45.0 ms | 1.0 | 0 | 655 | 30.0 s |
| Sustained decode | 251K | 2 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 251K | 4 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 251K | 8 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 251K | 16 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 251K | 32 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 251K | 64 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 251K | 128 | Over capacity | — | — | — | — | — | — | — | — |
Requests queued: the server could not run all requests at once, so some waited in a queue. Looped: the model kept repeating the same text, so the benchmark discarded this measurement. Over capacity: not run because this many requests at this context would exceed the server's KV cache.
