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: DSPARK, 7 tokens lookahead. Warm room, SYSTIN 23-29 C; instantaneous power peaks up to 222 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 1Prefill
prompt tok/s by context length8K context1,2806,354 ms TTFT
16K context1,46410,983 ms TTFT
32K context1,48321,577 ms TTFT
64K context1,45443,901 ms TTFT
128K context1,40890,543 ms TTFT
Sustained decode
total tok/s · rows are context length, columns are simultaneous requests| Context | 1 | 2 | 4 | 8 | 16 |
|---|---|---|---|---|---|
| 0 | 81.7291 ms TTFT | 111.6443 ms TTFT | 174.4888 ms TTFT | 221.31,535 ms TTFT | 215.1Requests queued1,527 ms TTFT |
| 16K | 86.4627 ms TTFT | 98.5852 ms TTFT | 174.01,693 ms TTFT | 215.82,569 ms TTFT | 215.1Requests queued2,570 ms TTFT |
| 32K | 77.6739 ms TTFT | 103.5997 ms TTFT | 176.61,931 ms TTFT | 216.32,740 ms TTFT | 208.4Requests queued2,794 ms TTFT |
| 64K | 76.21,004 ms TTFT | 105.11,304 ms TTFT | 164.02,513 ms TTFT | 210.02,888 ms TTFT | 205.4Requests queued2,933 ms TTFT |
| 128K | 73.1955 ms TTFT | 97.81,137 ms TTFT | 156.91,647 ms TTFT | 197.92,600 ms TTFT | Over capacity |
| 248K | 60.7Requests queued1,558 ms TTFT | 85.22,011 ms TTFT | 140.32,775 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 | 1,280.0 | — | 6,354 ms | — | — | 1 | — | — |
| Prefill | 16K | 1 | Valid | 1,464.0 | — | 10,983 ms | — | — | 1 | — | — |
| Prefill | 32K | 1 | Valid | 1,483.0 | — | 21,577 ms | — | — | 1 | — | — |
| Prefill | 64K | 1 | Valid | 1,454.0 | — | 43,901 ms | — | — | 1 | — | — |
| Prefill | 128K | 1 | Valid | 1,408.0 | — | 90,543 ms | — | — | 1 | — | — |
| Sustained decode | 0 | 1 | Valid | 81.7 | 83.0 | 291 ms | 12.1 ms | 1.0 | 0 | 2,451 | 30.0 s |
| Sustained decode | 0 | 2 | Valid | 111.6 | 55.7 | 443 ms | 18.0 ms | 2.0 | 0 | 3,344 | 30.0 s |
| Sustained decode | 0 | 4 | Valid | 174.4 | 44.2 | 888 ms | 22.6 ms | 4.0 | 0 | 5,231 | 30.0 s |
| Sustained decode | 0 | 8 | Valid | 221.3 | 27.7 | 1,535 ms | 36.1 ms | 8.0 | 0 | 6,633 | 30.0 s |
| Sustained decode | 0 | 16 | Requests queued | 215.1 | 27.4 | 1,527 ms | 36.5 ms | 8.0 | 0 | 6,449 | 30.0 s |
| Sustained decode | 16K | 1 | Valid | 86.4 | 85.5 | 627 ms | 11.7 ms | 1.0 | 0 | 2,591 | 30.0 s |
| Sustained decode | 16K | 2 | Valid | 98.5 | 50.5 | 852 ms | 19.8 ms | 2.0 | 0 | 2,952 | 30.0 s |
| Sustained decode | 16K | 4 | Valid | 174.0 | 43.2 | 1,693 ms | 23.2 ms | 4.0 | 0 | 5,217 | 30.0 s |
| Sustained decode | 16K | 8 | Valid | 215.8 | 26.7 | 2,569 ms | 37.5 ms | 8.0 | 0 | 6,468 | 30.0 s |
| Sustained decode | 16K | 16 | Requests queued | 215.1 | 26.9 | 2,570 ms | 37.2 ms | 8.0 | 0 | 6,444 | 30.0 s |
| Sustained decode | 32K | 1 | Valid | 77.6 | 78.5 | 739 ms | 12.7 ms | 1.0 | 0 | 2,328 | 30.0 s |
| Sustained decode | 32K | 2 | Valid | 103.5 | 51.5 | 997 ms | 19.4 ms | 2.0 | 0 | 3,103 | 30.0 s |
| Sustained decode | 32K | 4 | Valid | 176.6 | 43.8 | 1,931 ms | 22.8 ms | 4.0 | 0 | 5,294 | 30.0 s |
| Sustained decode | 32K | 8 | Valid | 216.3 | 26.6 | 2,740 ms | 37.5 ms | 8.0 | 0 | 6,480 | 30.0 s |
| Sustained decode | 32K | 16 | Requests queued | 208.4 | 26.2 | 2,794 ms | 38.2 ms | 8.0 | 0 | 6,247 | 30.0 s |
| Sustained decode | 64K | 1 | Valid | 76.2 | 76.1 | 1,004 ms | 13.1 ms | 1.0 | 0 | 2,286 | 30.0 s |
| Sustained decode | 64K | 2 | Valid | 105.1 | 52.3 | 1,304 ms | 19.2 ms | 2.0 | 0 | 3,150 | 30.0 s |
| Sustained decode | 64K | 4 | Valid | 164.0 | 41.0 | 2,513 ms | 24.4 ms | 4.0 | 0 | 4,917 | 30.0 s |
| Sustained decode | 64K | 8 | Valid | 210.0 | 25.3 | 2,888 ms | 39.5 ms | 8.0 | 0 | 6,293 | 30.0 s |
| Sustained decode | 64K | 16 | Requests queued | 205.4 | 25.6 | 2,933 ms | 39.1 ms | 8.0 | 0 | 6,159 | 30.0 s |
| Sustained decode | 128K | 1 | Valid | 73.1 | 73.2 | 955 ms | 13.7 ms | 1.0 | 0 | 2,191 | 30.0 s |
| Sustained decode | 128K | 2 | Valid | 97.8 | 48.7 | 1,137 ms | 20.5 ms | 2.0 | 0 | 2,933 | 30.0 s |
| Sustained decode | 128K | 4 | Valid | 156.9 | 38.8 | 1,647 ms | 25.8 ms | 4.0 | 0 | 4,701 | 30.0 s |
| Sustained decode | 128K | 8 | Valid | 197.9 | 24.1 | 2,600 ms | 41.5 ms | 8.0 | 0 | 5,933 | 30.0 s |
| Sustained decode | 128K | 16 | Over capacity | — | — | — | — | — | — | — | — |
| Sustained decode | 248K | 1 | Requests queued | 60.7 | 62.9 | 1,558 ms | 15.9 ms | 1.0 | 0 | 1,820 | 30.0 s |
| Sustained decode | 248K | 2 | Valid | 85.2 | 42.6 | 2,011 ms | 23.5 ms | 2.0 | 0 | 2,553 | 30.0 s |
| Sustained decode | 248K | 4 | Valid | 140.3 | 34.8 | 2,775 ms | 28.8 ms | 4.0 | 0 | 4,207 | 30.0 s |
| Sustained decode | 248K | 8 | Over capacity | — | — | — | — | — | — | — | — |
| 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.
