Speed test matrix
Qwen3.5-9B-AWQ-4bit on CMP 170HX 64GB
vllm · 0.32.0rc1.dev249+g18305948a · W4A16 g326 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
- W4A16 g32
- 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: MTP, 2 tokens lookahead
# 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 cyankiwi/Qwen3.5-9B-AWQ-4bit --max-model-len 262144 --gpu-memory-utilization 0.94 --max-num-seqs 128 --enable-prefix-caching --trust-remote-code --language-model-only --speculative-config {"method":"mtp","num_speculative_tokens":2}Prefill
prompt tok/s by context length8K context5,9831,361 ms TTFT
16K context5,7292,814 ms TTFT
32K context5,3755,969 ms TTFT
64K context4,72113,562 ms TTFT
128K context3,76333,987 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 | 178.9130 ms TTFT | 352.9211 ms TTFT | 614.8235 ms TTFT | 973.0273 ms TTFT | 1,500.0390 ms TTFT | 1,873.0570 ms TTFT | 2,437.7996 ms TTFT | 2,713.11,519 ms TTFT |
| 16K | 126.9272 ms TTFT | 237.5389 ms TTFT | 440.0698 ms TTFT | 570.51,091 ms TTFT | 702.01,797 ms TTFT | 796.83,300 ms TTFT | Over capacity | Over capacity |
| 32K | 95.0411 ms TTFT | 178.3578 ms TTFT | 315.4868 ms TTFT | 387.61,515 ms TTFT | 447.32,576 ms TTFT | 501.14,635 ms TTFT | Over capacity | Over capacity |
| 64K | 61.2637 ms TTFT | 120.6800 ms TTFT | 205.51,158 ms TTFT | 233.31,806 ms TTFT | 262.03,016 ms TTFT | Over capacity | Over capacity | Over capacity |
| 128K | 35.91,023 ms TTFT | 71.61,288 ms TTFT | 127.21,889 ms TTFT | 136.32,935 ms TTFT | Over capacity | Over capacity | Over capacity | Over capacity |
| 248K | 20.41,848 ms TTFT | 39.22,397 ms TTFT | 66.73,437 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 | 5,983.0 | — | 1,361 ms | — | — | 1 | — | — |
| Prefill | 16K | 1 | Valid | 5,729.0 | — | 2,814 ms | — | — | 1 | — | — |
| Prefill | 32K | 1 | Valid | 5,375.0 | — | 5,969 ms | — | — | 1 | — | — |
| Prefill | 64K | 1 | Valid | 4,721.0 | — | 13,562 ms | — | — | 1 | — | — |
| Prefill | 128K | 1 | Valid | 3,763.0 | — | 33,987 ms | — | — | 1 | — | — |
| Sustained decode | 0 | 1 | Valid | 178.9 | 182.9 | 130 ms | 5.5 ms | 1.0 | 0 | 5,365 | 30.0 s |
| Sustained decode | 0 | 2 | Valid | 352.9 | 181.2 | 211 ms | 5.5 ms | 2.0 | 0 | 10,585 | 30.0 s |
| Sustained decode | 0 | 4 | Valid | 614.8 | 158.7 | 235 ms | 6.3 ms | 4.0 | 0 | 18,442 | 30.0 s |
| Sustained decode | 0 | 8 | Valid | 973.0 | 126.5 | 273 ms | 7.9 ms | 8.0 | 0 | 29,187 | 30.0 s |
| Sustained decode | 0 | 16 | Valid | 1,500.0 | 97.1 | 390 ms | 10.3 ms | 16.0 | 0 | 45,031 | 30.0 s |
| Sustained decode | 0 | 32 | Valid | 1,873.0 | 60.1 | 570 ms | 16.6 ms | 32.0 | 0 | 56,213 | 30.0 s |
| Sustained decode | 0 | 64 | Valid | 2,437.7 | 39.2 | 996 ms | 25.5 ms | 64.0 | 0 | 73,066 | 30.0 s |
| Sustained decode | 0 | 128 | Valid | 2,713.1 | 21.8 | 1,519 ms | 45.8 ms | 128.0 | 0 | 81,434 | 30.0 s |
| Sustained decode | 16K | 1 | Valid | 126.9 | 128.2 | 272 ms | 7.8 ms | 1.0 | 0 | 3,805 | 30.0 s |
| Sustained decode | 16K | 2 | Valid | 237.5 | 120.9 | 389 ms | 8.3 ms | 2.0 | 0 | 7,124 | 30.0 s |
| Sustained decode | 16K | 4 | Valid | 440.0 | 110.4 | 698 ms | 9.1 ms | 4.0 | 0 | 13,193 | 30.0 s |
| Sustained decode | 16K | 8 | Valid | 570.5 | 71.9 | 1,091 ms | 13.9 ms | 8.0 | 0 | 17,117 | 30.0 s |
| Sustained decode | 16K | 16 | Valid | 702.0 | 43.6 | 1,797 ms | 22.9 ms | 16.0 | 0 | 21,059 | 30.0 s |
| Sustained decode | 16K | 32 | Valid | 796.8 | 24.4 | 3,300 ms | 41.1 ms | 32.0 | 0 | 23,901 | 30.0 s |
| Sustained decode | 16K | 64 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 16K | 128 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 32K | 1 | Valid | 95.0 | 96.4 | 411 ms | 10.4 ms | 1.0 | 0 | 2,849 | 30.0 s |
| Sustained decode | 32K | 2 | Valid | 178.3 | 90.7 | 578 ms | 11.0 ms | 2.0 | 0 | 5,349 | 30.0 s |
| Sustained decode | 32K | 4 | Valid | 315.4 | 79.0 | 868 ms | 12.7 ms | 4.0 | 0 | 9,456 | 30.0 s |
| Sustained decode | 32K | 8 | Valid | 387.6 | 48.5 | 1,515 ms | 20.6 ms | 8.0 | 0 | 11,613 | 30.0 s |
| Sustained decode | 32K | 16 | Valid | 447.3 | 28.2 | 2,576 ms | 35.5 ms | 16.0 | 0 | 13,413 | 30.0 s |
| Sustained decode | 32K | 32 | Valid | 501.1 | 15.1 | 4,635 ms | 66.2 ms | 32.0 | 0 | 14,982 | 29.9 s |
| Sustained decode | 32K | 64 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 32K | 128 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 64K | 1 | Valid | 61.2 | 62.4 | 637 ms | 16.0 ms | 1.0 | 0 | 1,835 | 30.0 s |
| Sustained decode | 64K | 2 | Valid | 120.6 | 60.9 | 800 ms | 16.4 ms | 2.0 | 0 | 3,614 | 30.0 s |
| Sustained decode | 64K | 4 | Valid | 205.5 | 52.1 | 1,158 ms | 19.2 ms | 4.0 | 0 | 6,163 | 30.0 s |
| Sustained decode | 64K | 8 | Valid | 233.3 | 29.8 | 1,806 ms | 33.5 ms | 8.0 | 0 | 6,982 | 29.9 s |
| Sustained decode | 64K | 16 | Valid | 262.0 | 16.4 | 3,016 ms | 60.9 ms | 16.0 | 0 | 7,839 | 29.9 s |
| Sustained decode | 64K | 32 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 64K | 64 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 64K | 128 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 128K | 1 | Valid | 35.9 | 36.7 | 1,023 ms | 27.2 ms | 1.0 | 0 | 1,074 | 30.0 s |
| Sustained decode | 128K | 2 | Valid | 71.6 | 36.5 | 1,288 ms | 27.4 ms | 2.0 | 0 | 2,147 | 30.0 s |
| Sustained decode | 128K | 4 | Valid | 127.2 | 32.1 | 1,889 ms | 31.2 ms | 4.0 | 0 | 3,818 | 30.0 s |
| Sustained decode | 128K | 8 | Valid | 136.3 | 17.3 | 2,935 ms | 57.9 ms | 8.0 | 0 | 4,082 | 29.9 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 | Valid | 20.4 | 21.1 | 1,848 ms | 47.3 ms | 1.0 | 0 | 610 | 29.9 s |
| Sustained decode | 248K | 2 | Valid | 39.2 | 20.1 | 2,397 ms | 49.9 ms | 2.0 | 0 | 1,174 | 30.0 s |
| Sustained decode | 248K | 4 | Valid | 66.7 | 17.4 | 3,437 ms | 57.6 ms | 4.0 | 0 | 2,000 | 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 | — | — | — | — | — | — | — | — |
Over capacity: not run because this many requests at this context would exceed the server's KV cache.
