Speed test matrix
DeepSeek-V4.1-Flash-1017 on CMP 170HX 64GB ×4
vllm · 0.32.0rc1.dev586+ga0c57b523 · EXL36 contexts (0–248K) × 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.dev586+ga0c57b523
- Quantization
- EXL3
- Backend
- cuda
- Repository
- github.com/Morrowmake/vllm-cmp170hx
- Build
- ghcr.io/morrowmake/vllm-cmp170hx@sha256:f67d9be47ffbd4a8b84c77fe76bdb3f842187d9b2786fff573e390ae5361bfb0
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: none. Warm room, SYSTIN 29-30 C; instantaneous power peaks up to 228 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
# Checkpoint: hybrid built with Morrowmake's dsv41-flash-cmp170hx recipe: routed experts EXL3 2.9 bpw from LibertAIDAI/DeepSeek-V4.1-Flash-1017-EXL3-2.9bpw, all other weights DeepSeek's own FP8 from deepseek-ai/DeepSeek-V4.1-Flash-1017. Thanks to Morrowmake and LibertAIDAI.
vllm serve /models/DeepSeek-V4.1-Flash-1017-hybrid-exl3-fp8 --host 0.0.0.0 --served-model-name m --max-model-len 262144 --gpu-memory-utilization 0.95 --max-num-seqs 8 --max-num-batched-tokens 2048 --port 8000 --hf-overrides '{"engram_table_dir":"/models/DeepSeek-V4.1-Flash-1017-engram"}' --load-format exl3 --enable-expert-parallel --mm-encoder-tp-mode data --kv-cache-dtype bfloat16 --reasoning-parser deepseek_v41 --enable-auto-tool-choice --tool-call-parser deepseek_v41 --compilation-config '{"cudagraph_mode":"FULL_DECODE_ONLY","cudagraph_capture_sizes":[2,3,4,5,6,8,9,10,12,14,15,16,18,20,21,24,25,28,30,32,35,36,40,42,48]}' --speculative-config '{"method":"dspark","num_speculative_tokens":7,"adaptive_k":{"by_load":[7,5,5,5,5,5,5,5,1,2,3,4,5],"draft_by_load":true},"enable_adaptive_verification":false}' --prefill-chunk-with-decodes 512 --exclude-tools-when-tool-choice-none --tensor-parallel-size 4 --pipeline-parallel-size 1 --speculative-config NonePrefill
prompt tok/s by context length8K context1,5315,309 ms TTFT
16K context1,47810,876 ms TTFT
32K context1,49521,399 ms TTFT
64K context1,47143,389 ms TTFT
128K context1,42289,665 ms TTFT
Sustained decode
total tok/s · rows are context length, columns are simultaneous requests| Context | 1 | 2 | 4 | 8 | 16 |
|---|---|---|---|---|---|
| 0 | 60.1301 ms TTFT | 117.5422 ms TTFT | 180.4841 ms TTFT | 255.61,531 ms TTFT | 246.5Requests queued1,520 ms TTFT |
| 16K | 57.4622 ms TTFT | 112.7875 ms TTFT | 176.31,700 ms TTFT | 248.12,394 ms TTFT | 240.2Requests queued2,439 ms TTFT |
| 32K | 57.5736 ms TTFT | 112.41,004 ms TTFT | 175.01,970 ms TTFT | 246.02,838 ms TTFT | 241.1Requests queued2,850 ms TTFT |
| 64K | 56.6754 ms TTFT | 112.1952 ms TTFT | 172.71,959 ms TTFT | 237.32,644 ms TTFT | 229.1Requests queued2,757 ms TTFT |
| 128K | 55.1979 ms TTFT | 107.31,193 ms TTFT | 164.41,615 ms TTFT | 224.02,743 ms TTFT | Over capacity |
| 248K | 50.3Requests queued1,675 ms TTFT | 95.3Requests queued1,935 ms TTFT | 149.52,636 ms TTFT | 201.04,001 ms TTFT | 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,531.0 | — | 5,309 ms | — | — | 1 | — | — |
| Prefill | 16K | 1 | Valid | 1,478.0 | — | 10,876 ms | — | — | 1 | — | — |
| Prefill | 32K | 1 | Valid | 1,495.0 | — | 21,399 ms | — | — | 1 | — | — |
| Prefill | 64K | 1 | Valid | 1,471.0 | — | 43,389 ms | — | — | 1 | — | — |
| Prefill | 128K | 1 | Valid | 1,422.0 | — | 89,665 ms | — | — | 1 | — | — |
| Sustained decode | 0 | 1 | Valid | 60.1 | 60.5 | 301 ms | 16.5 ms | 1.0 | 0 | 1,802 | 30.0 s |
| Sustained decode | 0 | 2 | Valid | 117.5 | 59.0 | 422 ms | 16.9 ms | 2.0 | 0 | 3,524 | 30.0 s |
| Sustained decode | 0 | 4 | Valid | 180.4 | 45.5 | 841 ms | 22.0 ms | 4.0 | 0 | 5,412 | 30.0 s |
| Sustained decode | 0 | 8 | Valid | 255.6 | 32.2 | 1,531 ms | 31.1 ms | 8.0 | 0 | 7,670 | 30.0 s |
| Sustained decode | 0 | 16 | Requests queued | 246.5 | 31.4 | 1,520 ms | 31.9 ms | 8.0 | 0 | 7,392 | 30.0 s |
| Sustained decode | 16K | 1 | Valid | 57.4 | 57.6 | 622 ms | 17.4 ms | 1.0 | 0 | 1,723 | 30.0 s |
| Sustained decode | 16K | 2 | Valid | 112.7 | 56.1 | 875 ms | 17.8 ms | 2.0 | 0 | 3,381 | 30.0 s |
| Sustained decode | 16K | 4 | Valid | 176.3 | 44.3 | 1,700 ms | 22.6 ms | 4.0 | 0 | 5,288 | 30.0 s |
| Sustained decode | 16K | 8 | Valid | 248.1 | 30.8 | 2,394 ms | 32.4 ms | 8.0 | 0 | 7,440 | 30.0 s |
| Sustained decode | 16K | 16 | Requests queued | 240.2 | 30.4 | 2,439 ms | 32.9 ms | 8.0 | 0 | 7,200 | 30.0 s |
| Sustained decode | 32K | 1 | Valid | 57.5 | 57.5 | 736 ms | 17.4 ms | 1.0 | 0 | 1,725 | 30.0 s |
| Sustained decode | 32K | 2 | Valid | 112.4 | 55.9 | 1,004 ms | 17.9 ms | 2.0 | 0 | 3,372 | 30.0 s |
| Sustained decode | 32K | 4 | Valid | 175.0 | 44.0 | 1,970 ms | 22.7 ms | 4.0 | 0 | 5,248 | 30.0 s |
| Sustained decode | 32K | 8 | Valid | 246.0 | 30.3 | 2,838 ms | 33.0 ms | 8.0 | 0 | 7,376 | 30.0 s |
| Sustained decode | 32K | 16 | Requests queued | 241.1 | 30.2 | 2,850 ms | 33.1 ms | 8.0 | 0 | 7,232 | 30.0 s |
| Sustained decode | 64K | 1 | Valid | 56.6 | 56.8 | 754 ms | 17.6 ms | 1.0 | 0 | 1,698 | 30.0 s |
| Sustained decode | 64K | 2 | Valid | 112.1 | 55.9 | 952 ms | 17.9 ms | 2.0 | 0 | 3,362 | 30.0 s |
| Sustained decode | 64K | 4 | Valid | 172.7 | 43.4 | 1,959 ms | 23.0 ms | 4.0 | 0 | 5,180 | 30.0 s |
| Sustained decode | 64K | 8 | Valid | 237.3 | 29.4 | 2,644 ms | 34.0 ms | 8.0 | 0 | 7,120 | 30.0 s |
| Sustained decode | 64K | 16 | Requests queued | 229.1 | 29.1 | 2,757 ms | 34.4 ms | 8.0 | 0 | 6,872 | 30.0 s |
| Sustained decode | 128K | 1 | Valid | 55.1 | 55.3 | 979 ms | 18.1 ms | 1.0 | 0 | 1,653 | 30.0 s |
| Sustained decode | 128K | 2 | Valid | 107.3 | 53.6 | 1,193 ms | 18.7 ms | 2.0 | 0 | 3,220 | 30.0 s |
| Sustained decode | 128K | 4 | Valid | 164.4 | 40.5 | 1,615 ms | 24.7 ms | 4.0 | 0 | 4,932 | 30.0 s |
| Sustained decode | 128K | 8 | Valid | 224.0 | 27.3 | 2,743 ms | 36.6 ms | 8.0 | 0 | 6,714 | 30.0 s |
| Sustained decode | 128K | 16 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 248K | 1 | Requests queued | 50.3 | 52.3 | 1,675 ms | 19.1 ms | 0.9 | 0 | 1,508 | 30.0 s |
| Sustained decode | 248K | 2 | Requests queued | 95.3 | 50.0 | 1,935 ms | 20.0 ms | 1.9 | 0 | 2,856 | 30.0 s |
| Sustained decode | 248K | 4 | Valid | 149.5 | 36.6 | 2,636 ms | 27.3 ms | 4.0 | 0 | 4,484 | 30.0 s |
| Sustained decode | 248K | 8 | Valid | 201.0 | 23.8 | 4,001 ms | 42.0 ms | 8.0 | 0 | 6,024 | 30.0 s |
| Sustained decode | 248K | 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.
