DeepSeek V4-Flash · vLLM · NVFP4 + EAGLE3.1
status: blocked
Configuration
| Model | deepseek-ai/DeepSeek-V4-Flash |
|---|---|
| Company | DeepSeek |
| Family | DeepSeek |
| Parameters | 284B (MoE) — measured via llama.cpp (was mislabeled 158B) |
| Engine | vLLM + EAGLE3.1 (speculative decoding) |
| Quant / precision | NVFP4 |
| Why this quant | Intended as NVIDIA's NVFP4 base + ManiacLabs EAGLE3.1 draft (hidden sizes match at 4096). BLOCKED ON FIT, not engine — the repo's *actual* weights are 168.3 GB (MIXED_PRECISION = FP8 backbone + NVFP4 experts; the "~79 GB" was a nominal-4-bit estimate that never held), over the 121 GB ceiling. See Notes. |
| Download | nvidia/DeepSeek-V4-Flash-NVFP4 |
| Context window | 65536 |
| Input modalities | text |
Measured results
| Prefill tok/s | — |
|---|---|
| Decode tok/s | — |
| Peak memory (GB) | — |
Full run command
# Recipe is correct & ready (verified to the kernel-select step); blocked only by a GB10 NVFP4-MoE
# kernel gap in vLLM 0.22.0 (see Notes). Dockerfile: scripts/Dockerfile.vllm-v4flash
# FROM vllm/vllm-openai:v0.22.0 # natively bundles vllm/models/deepseek_v4 + eagle3
# ENV VLLM_ALLOW_INSECURE_SERIALIZATION=1 EAGLE3_DRAFT_KV_CACHE_DTYPE=auto
# Run (single Spark, adapted from ManiacLabs SERVING.md's 4-GPU recipe → TP=1, NVFP4 base to fit):
# docker run --gpus all --ipc=host -p 8000:8000 \
# -v ~/.cache/huggingface:/root/.cache/huggingface --env HF_TOKEN=*** \
# autobench-vllm-v4flash nvidia/DeepSeek-V4-Flash-NVFP4 \
# --max-model-len 8192 --gpu-memory-utilization 0.85 --max-num-seqs 32 \
# --trust-remote-code --enforce-eager --kv-cache-dtype fp8 --tensor-parallel-size 1 \
# --speculative-config '{"method":"eagle3","model":"ManiacLabs/DeepSeek-V4-Flash-EAGLE3.1","num_speculative_tokens":3}'
Notes
CORRECTION 2026-06-23 — the real blocker is FIT (168 GB), not the engine. The engine arrived; the model still doesn’t fit.
The earlier “NVFP4 ~79 GB fits / blocked on a GB10 NVFP4-MoE kernel gap” conclusion was wrong on the
decisive fact. Re-checked the actual downloaded weights: nvidia/DeepSeek-V4-Flash-NVFP4’s own
safetensors.index.json reports total_size = 168.3 GB (157 GiB on disk, 46 shards). Its
config.json is quant_algo: MIXED_PRECISION / quant_method: fp8 with per-layer NVFP4 only on the
experts — i.e. an FP8 backbone + NVFP4 experts, essentially FP8-sized, not the nominal ~79 GB a pure
4-bit 158B would be. 168 GB > the 121 GB unified-memory ceiling, so the weights alone can’t be held,
let alone KV + the EAGLE3.1 draft. This was never caught before because the model failed at the kernel
step before it ever tried to allocate weights. No engine/kernel/oracle/compilation work changes this
— it’s a hard fit wall.
Engine support, meanwhile, has fully arrived (now moot for this build): vllm/vllm-openai:nightly-aarch64
(vLLM 0.23.1rc1, the cu130-nightly successor — cu130-nightly itself is abandoned, no push in
~2 months) ships DeepseekV4ForCausalLM + deepseek_eagle3.py + a rewritten NVFP4-MoE oracle
(CUTLASS/CuteDSL/Marlin fallbacks, no blanket sm_121 reject). tie_word_embeddings is False, so it would
also dodge the gemma tie_weights regression. So the two-image standoff below is resolved — one image
now has both halves — but it doesn’t matter, because the NVFP4 build is 168 GB.
To actually benchmark DeepSeek-V4-Flash on one Spark you need a ~80 GB build (none is NVFP4):
- GGUF Q4_K_M / IQ-quants (~80 GB) — fits, but
deepseek_v4is not in upstream llama.cpp; only community/WIP forks load it (antirez’s CPU+Metal experimental fork; theggml-orgwip/deepseek-v4-supportbranch / PR #22378 with CUDA-Blackwell work). Requires building a WIP fork from source. - INT4-AWQ/GPTQ (~80 GB) on vLLM — fits, but only from community (individual-uploader) repos → trust per the repo policy.
So the vllm-nvfp4-eagle3 config as specified is physically impossible on a single 121 GB Spark. Status
stays blocked; the unblock is a fitting 4-bit build (different quant, and for GGUF a different engine),
not a compile. Left for a follow-up pending an explicit choice of fitting path.