Speed test matrix
Tess-4-27B-NVFP4 on CMP 170HX 64GB
vllm · 0.32.0rc1.dev249+g18305948a · NVFP46 contexts (0–248K) × 8 concurrency levels (1–128) · prefill at 8K, 16K, 32K, 64K, 128K
Hardware
- Type
- Discrete GPU
- GPU
- CMP 170HX
- VRAM
- 64 GB
- CPU
- 2x Intel Xeon E5-2630 v3
- RAM
- 64 GB
- OS
- Ubuntu 26.04.1
Engine
- Engine
- vllm
- Version
- 0.32.0rc1.dev249+g18305948a
- Quantization
- NVFP4
- Backend
- cuda
- Repository
- github.com/vllm-project/vllm
- Build
- ghcr.io/morrowmake/vllm-cmp170hx@sha256:5b45c4d6feafefe2eba962375b0a9a0b64fd22b9e05abb4d1966f14a32a2db79
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 NVIDIA CMP 170HX 64GB (cmpunlocker), 180 W limit, PCIe Gen2 x4 | 2x Intel Xeon E5-2630 v3 | 64 GB DDR4 | Ubuntu 26.04.1, NVIDIA driver 610.57.04 | vLLM: Morrowmake vllm-cmp170hx image vllm serve migtissera/Tess-4-27B-NVFP4 --max-model-len 262144 --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 context1,8374,434 ms TTFT
16K context1,7299,324 ms TTFT
32K context1,63019,678 ms TTFT
64K context1,45044,163 ms TTFT
128K context1,189107,526 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 | 48.6178 ms TTFT | 94.6304 ms TTFT | 181.4328 ms TTFT | 341.1580 ms TTFT | 554.1905 ms TTFT | 860.71,595 ms TTFT | 1,101.02,904 ms TTFT | Over capacity |
| 16K | 46.1410 ms TTFT | 86.5582 ms TTFT | 156.6879 ms TTFT | 266.91,582 ms TTFT | 386.42,987 ms TTFT | Over capacity | Over capacity | Over capacity |
| 32K | 44.1694 ms TTFT | 79.91,016 ms TTFT | 137.81,595 ms TTFT | 219.12,747 ms TTFT | Over capacity | Over capacity | Over capacity | Over capacity |
| 64K | 40.6861 ms TTFT | 69.71,132 ms TTFT | 111.21,713 ms TTFT | 161.42,850 ms TTFT | Over capacity | Over capacity | Over capacity | Over capacity |
| 128K | 35.0968 ms TTFT | 54.71,228 ms TTFT | 80.41,786 ms TTFT | Over capacity | Over capacity | Over capacity | Over capacity | Over capacity |
| 248K | 26.0Requests queued2,642 ms TTFT | 35.1Requests queued3,374 ms TTFT | 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. 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 | 1,837.0 | — | 4,434 ms | — | — | 1 | — | — |
| Prefill | 16K | 1 | Valid | 1,729.0 | — | 9,324 ms | — | — | 1 | — | — |
| Prefill | 32K | 1 | Valid | 1,630.0 | — | 19,678 ms | — | — | 1 | — | — |
| Prefill | 64K | 1 | Valid | 1,450.0 | — | 44,163 ms | — | — | 1 | — | — |
| Prefill | 128K | 1 | Valid | 1,189.0 | — | 107,526 ms | — | — | 1 | — | — |
| Sustained decode | 0 | 1 | Valid | 48.6 | 48.5 | 178 ms | 20.6 ms | 1.0 | 0 | 1,456 | 30.0 s |
| Sustained decode | 0 | 2 | Valid | 94.6 | 47.4 | 304 ms | 21.1 ms | 2.0 | 0 | 2,838 | 30.0 s |
| Sustained decode | 0 | 4 | Valid | 181.4 | 45.4 | 328 ms | 22.0 ms | 4.0 | 0 | 5,440 | 30.0 s |
| Sustained decode | 0 | 8 | Valid | 341.1 | 42.8 | 580 ms | 23.4 ms | 8.0 | 0 | 10,232 | 30.0 s |
| Sustained decode | 0 | 16 | Valid | 554.1 | 34.7 | 905 ms | 28.8 ms | 16.0 | 0 | 16,624 | 30.0 s |
| Sustained decode | 0 | 32 | Valid | 860.7 | 26.9 | 1,595 ms | 37.1 ms | 32.0 | 0 | 25,824 | 30.0 s |
| Sustained decode | 0 | 64 | Valid | 1,101.0 | 17.2 | 2,904 ms | 58.3 ms | 64.0 | 0 | 33,024 | 30.0 s |
| Sustained decode | 0 | 128 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 16K | 1 | Valid | 46.1 | 46.2 | 410 ms | 21.7 ms | 1.0 | 0 | 1,382 | 30.0 s |
| Sustained decode | 16K | 2 | Valid | 86.5 | 43.1 | 582 ms | 23.2 ms | 2.0 | 0 | 2,594 | 30.0 s |
| Sustained decode | 16K | 4 | Valid | 156.6 | 38.7 | 879 ms | 25.8 ms | 4.0 | 0 | 4,696 | 30.0 s |
| Sustained decode | 16K | 8 | Valid | 266.9 | 32.5 | 1,582 ms | 30.8 ms | 8.0 | 0 | 8,008 | 30.0 s |
| Sustained decode | 16K | 16 | Valid | 386.4 | 22.7 | 2,987 ms | 44.1 ms | 16.0 | 0 | 11,584 | 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 | 44.1 | 44.2 | 694 ms | 22.6 ms | 1.0 | 0 | 1,322 | 30.0 s |
| Sustained decode | 32K | 2 | Valid | 79.9 | 39.7 | 1,016 ms | 25.2 ms | 2.0 | 0 | 2,396 | 30.0 s |
| Sustained decode | 32K | 4 | Valid | 137.8 | 33.8 | 1,595 ms | 29.6 ms | 4.0 | 0 | 4,132 | 30.0 s |
| Sustained decode | 32K | 8 | Valid | 219.1 | 26.0 | 2,747 ms | 38.4 ms | 8.0 | 0 | 6,568 | 30.0 s |
| 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 | 40.6 | 40.7 | 861 ms | 24.6 ms | 1.0 | 0 | 1,217 | 30.0 s |
| Sustained decode | 64K | 2 | Valid | 69.7 | 34.7 | 1,132 ms | 28.8 ms | 2.0 | 0 | 2,092 | 30.0 s |
| Sustained decode | 64K | 4 | Valid | 111.2 | 27.3 | 1,713 ms | 36.6 ms | 4.0 | 0 | 3,336 | 30.0 s |
| Sustained decode | 64K | 8 | Valid | 161.4 | 19.2 | 2,850 ms | 52.1 ms | 8.0 | 0 | 4,840 | 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 | 128K | 1 | Valid | 35.0 | 35.2 | 968 ms | 28.4 ms | 1.0 | 0 | 1,050 | 30.0 s |
| Sustained decode | 128K | 2 | Valid | 54.7 | 27.4 | 1,228 ms | 36.5 ms | 2.0 | 0 | 1,642 | 30.0 s |
| Sustained decode | 128K | 4 | Valid | 80.4 | 19.9 | 1,786 ms | 50.1 ms | 4.0 | 0 | 2,408 | 30.0 s |
| 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 | 248K | 1 | Requests queued | 26.0 | 28.0 | 2,642 ms | 35.7 ms | 0.9 | 0 | 781 | 30.0 s |
| Sustained decode | 248K | 2 | Requests queued | 35.1 | 19.4 | 3,374 ms | 51.6 ms | 1.8 | 0 | 1,052 | 30.0 s |
| Sustained decode | 248K | 4 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 248K | 8 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 248K | 16 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 248K | 32 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 248K | 64 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 248K | 128 | Over capacity | — | — | — | — | — | — | — | — |
Requests queued: the server could not run all requests at once, so some waited in a queue. Over capacity: not run because this many requests at this context would exceed the server's KV cache.
