Speed test matrix
MiniCPM5-1B-exl3 on CMP 170HX 64GB
vllm · 0.32.0rc1.dev249+g18305948a · EXL3 3.00 bpw5 contexts (0–120K) × 8 concurrency levels (1–128) · prefill at 8K, 16K, 32K, 64K, 120K
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
- EXL3 3.00 bpw
- Backend
- cuda
- Repository
- github.com/vllm-project/vllm
- Build
- ghcr.io/morrowmake/vllm-cmp170hx@sha256:5b45c4d6feafefe2eba962375b0a9a0b64fd22b9e05abb4d1966f14a32a2db79
Run
- Served model
- bench
- Revision
- 3.00bpw
- 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 turboderp/MiniCPM5-1B-exl3 --revision 3.00bpw --max-model-len 131072 --gpu-memory-utilization 0.94 --max-num-seqs 128 --enable-prefix-caching --trust-remote-code --quantization exl3 --load-format exl3
Prefill
prompt tok/s by context length8K context5,8831,364 ms TTFT
16K context5,5062,886 ms TTFT
32K context5,1886,100 ms TTFT
64K context4,56313,841 ms TTFT
120K context3,68432,104 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 | Looped | 222.098 ms TTFT | Looped | 687.3133 ms TTFT | Looped | 1,743.0261 ms TTFT | Looped | 3,349.3557 ms TTFT |
| 16K | 107.6152 ms TTFT | Looped | Looped | 595.5437 ms TTFT | Looped | Looped | 1,558.92,156 ms TTFT | Over capacity |
| 32K | 104.5264 ms TTFT | 199.2336 ms TTFT | Looped | 518.6787 ms TTFT | Looped | 941.62,303 ms TTFT | Over capacity | Over capacity |
| 64K | 99.3416 ms TTFT | Looped | 296.3895 ms TTFT | Looped | 545.52,251 ms TTFT | 636.34,856 ms TTFT | Over capacity | Over capacity |
| 120K | Looped | 152.81,178 ms TTFT | 228.01,603 ms TTFT | Looped | 360.64,708 ms TTFT | Over capacity | Over capacity | Over capacity |
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 | 5,883.0 | — | 1,364 ms | — | — | 1 | — | — |
| Prefill | 16K | 1 | Valid | 5,506.0 | — | 2,886 ms | — | — | 1 | — | — |
| Prefill | 32K | 1 | Valid | 5,188.0 | — | 6,100 ms | — | — | 1 | — | — |
| Prefill | 64K | 1 | Valid | 4,563.0 | — | 13,841 ms | — | — | 1 | — | — |
| Prefill | 120K | 1 | Valid | 3,684.0 | — | 32,104 ms | — | — | 1 | — | — |
| Sustained decode | 0 | 1 | Looped | — | — | — | — | — | 0 | 0 | — |
| Sustained decode | 0 | 2 | Valid | 222.0 | 111.2 | 98 ms | 9.0 ms | 2.0 | 0 | 6,660 | 30.0 s |
| Sustained decode | 0 | 4 | Looped | — | — | — | — | — | 0 | 0 | — |
| Sustained decode | 0 | 8 | Valid | 687.3 | 86.3 | 133 ms | 11.6 ms | 8.0 | 0 | 20,608 | 30.0 s |
| Sustained decode | 0 | 16 | Looped | — | — | — | — | — | 0 | 0 | — |
| Sustained decode | 0 | 32 | Valid | 1,743.0 | 54.9 | 261 ms | 18.2 ms | 32.0 | 0 | 52,288 | 30.0 s |
| Sustained decode | 0 | 64 | Looped | — | — | — | — | — | 0 | 0 | — |
| Sustained decode | 0 | 128 | Valid | 3,349.3 | 26.3 | 557 ms | 38.0 ms | 128.0 | 0 | 100,480 | 30.0 s |
| Sustained decode | 16K | 1 | Valid | 107.6 | 107.9 | 152 ms | 9.3 ms | 1.0 | 0 | 3,226 | 30.0 s |
| Sustained decode | 16K | 2 | Looped | — | — | — | — | — | 0 | 0 | — |
| Sustained decode | 16K | 4 | Looped | — | — | — | — | — | 0 | 0 | — |
| Sustained decode | 16K | 8 | Valid | 595.5 | 74.6 | 437 ms | 13.4 ms | 8.0 | 0 | 17,864 | 30.0 s |
| Sustained decode | 16K | 16 | Looped | — | — | — | — | — | 0 | 0 | — |
| Sustained decode | 16K | 32 | Looped | — | — | — | — | — | 0 | 0 | — |
| Sustained decode | 16K | 64 | Valid | 1,558.9 | 23.8 | 2,156 ms | 42.0 ms | 64.0 | 0 | 46,784 | 30.0 s |
| Sustained decode | 16K | 128 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 32K | 1 | Valid | 104.5 | 104.8 | 264 ms | 9.5 ms | 1.0 | 0 | 3,134 | 30.0 s |
| Sustained decode | 32K | 2 | Valid | 199.2 | 99.8 | 336 ms | 10.0 ms | 2.0 | 0 | 5,974 | 30.0 s |
| Sustained decode | 32K | 4 | Looped | — | — | — | — | — | 0 | 0 | — |
| Sustained decode | 32K | 8 | Valid | 518.6 | 64.8 | 787 ms | 15.4 ms | 8.0 | 0 | 15,560 | 30.0 s |
| Sustained decode | 32K | 16 | Looped | — | — | — | — | — | 0 | 0 | — |
| Sustained decode | 32K | 32 | Valid | 941.6 | 28.7 | 2,303 ms | 34.8 ms | 32.0 | 0 | 28,256 | 30.0 s |
| Sustained decode | 32K | 64 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 32K | 128 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 64K | 1 | Valid | 99.3 | 99.5 | 416 ms | 10.1 ms | 1.0 | 0 | 2,979 | 30.0 s |
| Sustained decode | 64K | 2 | Looped | — | — | — | — | — | 0 | 0 | — |
| Sustained decode | 64K | 4 | Valid | 296.3 | 74.2 | 895 ms | 13.5 ms | 4.0 | 0 | 8,888 | 30.0 s |
| Sustained decode | 64K | 8 | Looped | — | — | — | — | — | 0 | 0 | — |
| Sustained decode | 64K | 16 | Valid | 545.5 | 33.7 | 2,251 ms | 29.7 ms | 16.0 | 0 | 16,368 | 30.0 s |
| Sustained decode | 64K | 32 | Valid | 636.3 | 19.2 | 4,856 ms | 52.1 ms | 32.0 | 0 | 19,072 | 30.0 s |
| Sustained decode | 64K | 64 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 64K | 128 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 120K | 1 | Looped | — | — | — | — | — | 0 | 0 | — |
| Sustained decode | 120K | 2 | Valid | 152.8 | 76.7 | 1,178 ms | 13.0 ms | 2.0 | 0 | 4,584 | 30.0 s |
| Sustained decode | 120K | 4 | Valid | 228.0 | 57.1 | 1,603 ms | 17.5 ms | 4.0 | 0 | 6,840 | 30.0 s |
| Sustained decode | 120K | 8 | Looped | — | — | — | — | — | 0 | 0 | — |
| Sustained decode | 120K | 16 | Valid | 360.6 | 22.2 | 4,708 ms | 45.1 ms | 16.0 | 0 | 10,816 | 30.0 s |
| Sustained decode | 120K | 32 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 120K | 64 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 120K | 128 | Over capacity | — | — | — | — | — | — | — | — |
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.
