Speed test matrix
GLM-5.3-Flash-W4A16-MTP on CMP 170HX 64GB ×4
vllm · 0.32.0rc1.dev215+g819146023 · W4A167 contexts (0–504K) × 5 concurrency levels (1–16) · prefill at 8K, 16K, 32K, 64K, 128K
Hardware
- Type
- Discrete GPU
- GPU
- CMP 170HX
- GPU count
- 4
- VRAM
- 64 GB (4 × 16 GB)
- CPU
- Intel Core i7-9800X
- RAM
- 128 GB
- OS
- Ubuntu 26.04.1
Engine
- Engine
- vllm
- Version
- 0.32.0rc1.dev215+g819146023
- Quantization
- W4A16
- Backend
- cuda
- Repository
- github.com/Morrowmake/vllm-cmp170hx
- Build
- ghcr.io/morrowmake/vllm-cmp170hx@sha256:18a2f26207568128e1d792ce923e86a74e40def1e43e492db83132cab8cdbe14
Run
- Served model
- m
- 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
# x299 recipe as deployed (not an untuned baseline). Spec decode: DFLASH, 7 tokens lookahead. Warm room, SYSTIN 28-30 C; instantaneous power peaks up to 344 W (GA100 reports instantaneous draw); enforced limit 180 W
# 4x NVIDIA CMP 170HX 64GB (cmpunlocker), 180 W limit, PCIe Gen2 x4 per card | i7-9800X | 128 GB DDR4 | Ubuntu 26.04.1, driver 610.57.04 | vLLM: Morrowmake vllm-cmp170hx image
vllm serve /models/GLM-5.3-Flash-W4A16-MTP --served-model-name m --host 0.0.0.0 --pipeline-parallel-size 4 --tensor-parallel-size 1 --max-model-len 524288 --max-num-seqs 8 --max-num-batched-tokens 2312 --long-prefill-token-threshold 0 --gpu-memory-utilization 0.95 --trust-remote-code --reasoning-parser glm47 --enable-auto-tool-choice --tool-call-parser glm47 --port 8000 --speculative-config '{"method":"dflash","model":"/models/GLM-5.3-Flash-DFlash2","num_speculative_tokens":7,"adaptive_k":{"by_load":[7,5,3],"accept":{"costs":[1.0,1.0894,1.1375,1.2001,1.2239],"costs_multi":[1.0,1.0889,1.1194,1.2001,1.2239],"hysteresis":0.03},"log_interval":0}}' --prefill-chunk-with-decodes 384 --max-num-partial-prefills 2 --block-size 4608Prefill
prompt tok/s by context length8K context3,9332,085 ms TTFT
16K context4,6513,489 ms TTFT
32K context5,1966,220 ms TTFT
64K context5,54211,641 ms TTFT
128K context5,65222,802 ms TTFT
Sustained decode
total tok/s · rows are context length, columns are simultaneous requests| Context | 1 | 2 | 4 | 8 | 16 |
|---|---|---|---|---|---|
| 0 | 78.5236 ms TTFT | 159.2290 ms TTFT | 265.8491 ms TTFT | 418.2641 ms TTFT | 396.6Requests queued507 ms TTFT |
| 16K | 81.6289 ms TTFT | 169.8364 ms TTFT | 259.2591 ms TTFT | 423.9661 ms TTFT | 397.4Requests queued616 ms TTFT |
| 32K | 88.6337 ms TTFT | 159.5419 ms TTFT | 274.8568 ms TTFT | 416.2734 ms TTFT | 398.0Requests queued816 ms TTFT |
| 64K | 86.4885 ms TTFT | 166.5360 ms TTFT | 272.0521 ms TTFT | 421.4838 ms TTFT | 396.6Requests queued964 ms TTFT |
| 128K | 79.21,045 ms TTFT | 164.11,325 ms TTFT | 266.11,756 ms TTFT | 431.52,368 ms TTFT | 364.4Requests queued80,454 ms TTFT |
| 256K | 79.61,374 ms TTFT | 164.41,770 ms TTFT | 278.32,437 ms TTFT | 429.73,932 ms TTFT | Over capacity |
| 504K | 78.22,207 ms TTFT | 173.82,927 ms TTFT | 271.04,476 ms TTFT | 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 | 3,933.0 | — | 2,085 ms | — | — | 1 | — | — |
| Prefill | 16K | 1 | Valid | 4,651.0 | — | 3,489 ms | — | — | 1 | — | — |
| Prefill | 32K | 1 | Valid | 5,196.0 | — | 6,220 ms | — | — | 1 | — | — |
| Prefill | 64K | 1 | Valid | 5,542.0 | — | 11,641 ms | — | — | 1 | — | — |
| Prefill | 128K | 1 | Valid | 5,652.0 | — | 22,802 ms | — | — | 1 | — | — |
| Sustained decode | 0 | 1 | Valid | 78.5 | 81.6 | 236 ms | 12.3 ms | 1.0 | 0 | 2,354 | 30.0 s |
| Sustained decode | 0 | 2 | Valid | 159.2 | 82.3 | 290 ms | 12.2 ms | 2.0 | 0 | 4,773 | 30.0 s |
| Sustained decode | 0 | 4 | Valid | 265.8 | 67.4 | 491 ms | 14.8 ms | 4.0 | 0 | 7,974 | 30.0 s |
| Sustained decode | 0 | 8 | Valid | 418.2 | 53.3 | 641 ms | 18.8 ms | 8.0 | 0 | 12,542 | 30.0 s |
| Sustained decode | 0 | 16 | Requests queued | 396.6 | 51.7 | 507 ms | 19.4 ms | 8.0 | 0 | 11,896 | 30.0 s |
| Sustained decode | 16K | 1 | Valid | 81.6 | 82.7 | 289 ms | 12.1 ms | 1.0 | 0 | 2,448 | 30.0 s |
| Sustained decode | 16K | 2 | Valid | 169.8 | 85.4 | 364 ms | 11.7 ms | 2.0 | 0 | 5,092 | 30.0 s |
| Sustained decode | 16K | 4 | Valid | 259.2 | 65.8 | 591 ms | 15.2 ms | 4.0 | 0 | 7,777 | 30.0 s |
| Sustained decode | 16K | 8 | Valid | 423.9 | 51.9 | 661 ms | 19.3 ms | 8.0 | 0 | 12,715 | 30.0 s |
| Sustained decode | 16K | 16 | Requests queued | 397.4 | 50.8 | 616 ms | 19.7 ms | 8.0 | 0 | 11,920 | 30.0 s |
| Sustained decode | 32K | 1 | Valid | 88.6 | 89.1 | 337 ms | 11.2 ms | 1.0 | 0 | 2,655 | 30.0 s |
| Sustained decode | 32K | 2 | Valid | 159.5 | 81.0 | 419 ms | 12.3 ms | 2.0 | 0 | 4,785 | 30.0 s |
| Sustained decode | 32K | 4 | Valid | 274.8 | 69.3 | 568 ms | 14.4 ms | 4.0 | 0 | 8,245 | 30.0 s |
| Sustained decode | 32K | 8 | Valid | 416.2 | 52.1 | 734 ms | 19.2 ms | 8.0 | 0 | 12,485 | 30.0 s |
| Sustained decode | 32K | 16 | Requests queued | 398.0 | 51.4 | 816 ms | 19.4 ms | 8.0 | 0 | 11,939 | 30.0 s |
| Sustained decode | 64K | 1 | Valid | 86.4 | 87.1 | 885 ms | 11.5 ms | 1.0 | 0 | 2,593 | 30.0 s |
| Sustained decode | 64K | 2 | Valid | 166.5 | 83.7 | 360 ms | 11.9 ms | 2.0 | 0 | 4,994 | 30.0 s |
| Sustained decode | 64K | 4 | Valid | 272.0 | 68.4 | 521 ms | 14.6 ms | 4.0 | 0 | 8,161 | 30.0 s |
| Sustained decode | 64K | 8 | Valid | 421.4 | 53.8 | 838 ms | 18.6 ms | 8.0 | 0 | 12,640 | 30.0 s |
| Sustained decode | 64K | 16 | Requests queued | 396.6 | 51.3 | 964 ms | 19.5 ms | 8.0 | 0 | 11,900 | 30.0 s |
| Sustained decode | 128K | 1 | Valid | 79.2 | 80.6 | 1,045 ms | 12.4 ms | 1.0 | 0 | 2,374 | 30.0 s |
| Sustained decode | 128K | 2 | Valid | 164.1 | 82.3 | 1,325 ms | 12.2 ms | 2.0 | 0 | 4,921 | 30.0 s |
| Sustained decode | 128K | 4 | Valid | 266.1 | 66.1 | 1,756 ms | 15.1 ms | 4.0 | 0 | 7,984 | 30.0 s |
| Sustained decode | 128K | 8 | Valid | 431.5 | 52.9 | 2,368 ms | 18.9 ms | 8.0 | 0 | 12,942 | 30.0 s |
| Sustained decode | 128K | 16 | Requests queued | 364.4 | 50.2 | 80,454 ms | 19.9 ms | 8.0 | 8 | 10,932 | 30.0 s |
| Sustained decode | 256K | 1 | Valid | 79.6 | 80.8 | 1,374 ms | 12.4 ms | 1.0 | 0 | 2,387 | 30.0 s |
| Sustained decode | 256K | 2 | Valid | 164.4 | 82.7 | 1,770 ms | 12.1 ms | 2.0 | 0 | 4,931 | 30.0 s |
| Sustained decode | 256K | 4 | Valid | 278.3 | 68.9 | 2,437 ms | 14.5 ms | 4.0 | 0 | 8,348 | 30.0 s |
| Sustained decode | 256K | 8 | Valid | 429.7 | 52.3 | 3,932 ms | 19.1 ms | 8.0 | 0 | 12,892 | 30.0 s |
| Sustained decode | 256K | 16 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 504K | 1 | Valid | 78.2 | 80.5 | 2,207 ms | 12.4 ms | 1.0 | 0 | 2,346 | 30.0 s |
| Sustained decode | 504K | 2 | Valid | 173.8 | 87.9 | 2,927 ms | 11.4 ms | 2.0 | 0 | 5,213 | 30.0 s |
| Sustained decode | 504K | 4 | Valid | 271.0 | 69.3 | 4,476 ms | 14.4 ms | 4.0 | 0 | 8,128 | 30.0 s |
| Sustained decode | 504K | 8 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 504K | 16 | 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.
