Speed test matrix
Qwen3.8-27B-INT4 on CMP 170HX 64GB
vllm · 0.32.0rc1.dev249+g18305948a · INT4 W4A16 g1286 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
- INT4 W4A16 g128
- 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 RedHatAI/Qwen3.8-27B-INT4 --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,9494,203 ms TTFT
16K context1,8118,924 ms TTFT
32K context1,69318,978 ms TTFT
64K context1,47543,426 ms TTFT
128K context1,168109,491 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 | 53.3179 ms TTFT | 103.7305 ms TTFT | 197.8374 ms TTFT | 370.3630 ms TTFT | 607.61,164 ms TTFT | 914.41,858 ms TTFT | 1,132.73,030 ms TTFT | 1,247.45,145 ms TTFT |
| 16K | 51.5453 ms TTFT | 98.2604 ms TTFT | 180.0963 ms TTFT | 310.11,669 ms TTFT | 460.82,997 ms TTFT | 616.35,982 ms TTFT | Over capacity | Over capacity |
| 32K | 49.9738 ms TTFT | 93.31,042 ms TTFT | 165.21,617 ms TTFT | 266.32,782 ms TTFT | 371.05,002 ms TTFT | Over capacity | Over capacity | Over capacity |
| 64K | 47.31,579 ms TTFT | 84.92,179 ms TTFT | 141.63,409 ms TTFT | 207.35,889 ms TTFT | 267.210,784 ms TTFT | Over capacity | Over capacity | Over capacity |
| 128K | 42.62,020 ms TTFT | 72.42,598 ms TTFT | 110.43,920 ms TTFT | 144.66,422 ms TTFT | Over capacity | Over capacity | Over capacity | Over capacity |
| 248K | 31.7Requests queued4,507 ms TTFT | 56.45,847 ms TTFT | 78.28,809 ms TTFT | 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,949.0 | — | 4,203 ms | — | — | 1 | — | — |
| Prefill | 16K | 1 | Valid | 1,811.0 | — | 8,924 ms | — | — | 1 | — | — |
| Prefill | 32K | 1 | Valid | 1,693.0 | — | 18,978 ms | — | — | 1 | — | — |
| Prefill | 64K | 1 | Valid | 1,475.0 | — | 43,426 ms | — | — | 1 | — | — |
| Prefill | 128K | 1 | Valid | 1,168.0 | — | 109,491 ms | — | — | 1 | — | — |
| Sustained decode | 0 | 1 | Valid | 53.3 | 53.4 | 179 ms | 18.7 ms | 1.0 | 0 | 1,600 | 30.0 s |
| Sustained decode | 0 | 2 | Valid | 103.7 | 51.9 | 305 ms | 19.3 ms | 2.0 | 0 | 3,112 | 30.0 s |
| Sustained decode | 0 | 4 | Valid | 197.8 | 49.6 | 374 ms | 20.2 ms | 4.0 | 0 | 5,932 | 30.0 s |
| Sustained decode | 0 | 8 | Valid | 370.3 | 46.4 | 630 ms | 21.5 ms | 8.0 | 0 | 11,104 | 30.0 s |
| Sustained decode | 0 | 16 | Valid | 607.6 | 38.1 | 1,164 ms | 26.3 ms | 16.0 | 0 | 18,224 | 30.0 s |
| Sustained decode | 0 | 32 | Valid | 914.4 | 28.4 | 1,858 ms | 35.3 ms | 32.0 | 0 | 27,424 | 30.0 s |
| Sustained decode | 0 | 64 | Valid | 1,132.7 | 17.2 | 3,030 ms | 58.2 ms | 64.0 | 0 | 33,984 | 30.0 s |
| Sustained decode | 0 | 128 | Valid | 1,247.4 | 9.0 | 5,145 ms | 111.2 ms | 128.0 | 0 | 37,447 | 30.0 s |
| Sustained decode | 16K | 1 | Valid | 51.5 | 51.6 | 453 ms | 19.4 ms | 1.0 | 0 | 1,546 | 30.0 s |
| Sustained decode | 16K | 2 | Valid | 98.2 | 49.0 | 604 ms | 20.4 ms | 2.0 | 0 | 2,946 | 30.0 s |
| Sustained decode | 16K | 4 | Valid | 180.0 | 44.5 | 963 ms | 22.5 ms | 4.0 | 0 | 5,400 | 30.0 s |
| Sustained decode | 16K | 8 | Valid | 310.1 | 37.7 | 1,669 ms | 26.5 ms | 8.0 | 0 | 9,296 | 30.0 s |
| Sustained decode | 16K | 16 | Valid | 460.8 | 27.2 | 2,997 ms | 36.8 ms | 16.0 | 0 | 13,824 | 30.0 s |
| Sustained decode | 16K | 32 | Valid | 616.3 | 17.2 | 5,982 ms | 58.3 ms | 32.0 | 0 | 18,496 | 30.0 s |
| Sustained decode | 16K | 64 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 16K | 128 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 32K | 1 | Valid | 49.9 | 50.0 | 738 ms | 20.0 ms | 1.0 | 0 | 1,496 | 30.0 s |
| Sustained decode | 32K | 2 | Valid | 93.3 | 46.4 | 1,042 ms | 21.5 ms | 2.0 | 0 | 2,798 | 30.0 s |
| Sustained decode | 32K | 4 | Valid | 165.2 | 40.5 | 1,617 ms | 24.7 ms | 4.0 | 0 | 4,956 | 30.0 s |
| Sustained decode | 32K | 8 | Valid | 266.3 | 31.7 | 2,782 ms | 31.5 ms | 8.0 | 0 | 7,984 | 30.0 s |
| Sustained decode | 32K | 16 | Valid | 371.0 | 20.9 | 5,002 ms | 47.9 ms | 16.0 | 0 | 11,145 | 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 | 47.3 | 47.4 | 1,579 ms | 21.1 ms | 1.0 | 0 | 1,419 | 30.0 s |
| Sustained decode | 64K | 2 | Valid | 84.9 | 41.9 | 2,179 ms | 23.9 ms | 2.0 | 0 | 2,548 | 30.0 s |
| Sustained decode | 64K | 4 | Valid | 141.6 | 33.8 | 3,409 ms | 29.6 ms | 4.0 | 0 | 4,244 | 30.0 s |
| Sustained decode | 64K | 8 | Valid | 207.3 | 23.3 | 5,889 ms | 43.0 ms | 8.0 | 0 | 6,216 | 30.0 s |
| Sustained decode | 64K | 16 | Valid | 267.2 | 13.5 | 10,784 ms | 74.3 ms | 16.0 | 0 | 8,016 | 30.0 s |
| Sustained decode | 64K | 32 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 64K | 64 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 64K | 128 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 128K | 1 | Valid | 42.6 | 42.8 | 2,020 ms | 23.4 ms | 1.0 | 0 | 1,278 | 30.0 s |
| Sustained decode | 128K | 2 | Valid | 72.4 | 35.7 | 2,598 ms | 28.0 ms | 2.0 | 0 | 2,170 | 30.0 s |
| Sustained decode | 128K | 4 | Valid | 110.4 | 26.4 | 3,920 ms | 37.9 ms | 4.0 | 0 | 3,313 | 30.0 s |
| Sustained decode | 128K | 8 | Valid | 144.6 | 16.2 | 6,422 ms | 61.7 ms | 8.0 | 0 | 4,336 | 30.0 s |
| 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 | 31.7 | 36.5 | 4,507 ms | 27.4 ms | 0.9 | 0 | 949 | 30.0 s |
| Sustained decode | 248K | 2 | Valid | 56.4 | 27.3 | 5,847 ms | 36.7 ms | 2.0 | 0 | 1,692 | 30.0 s |
| Sustained decode | 248K | 4 | Valid | 78.2 | 17.5 | 8,809 ms | 57.2 ms | 4.0 | 0 | 2,344 | 30.0 s |
| 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.
