DeepSeek-V4-Flash W4A16+FP8 结合 MTP 自推测:在 2 张 RTX PRO 6000 Max-Q 上以 524K 上下文长度实现 85 tok/s
摘要
这篇文章详细介绍了一个经过定制并量化的 DeepSeek-V4-Flash 模型版本,启用了 MTP 自推测功能。通过修改后的 vLLM 设置,在双 RTX PRO 6000 Max-Q GPU 上实现了显著的速度提升。
**TL;DR**:在 2× RTX PRO 6000 Max-Q 上,pasta-paul 的 `DeepSeek-V4-Flash-W4A16-FP8` 量化版本表现优异,在 **524k 上下文窗口下达到 85.52 tok/s**,在 **128k 单流场景下达到 ~111 tok/s**。但是,其 MTP(多令牌预测)头在加载时被静默剥离(HF transformers 将其列入 `_keys_to_ignore_on_load_unexpected`),因此使用 `--speculative-config '{"method":"mtp",...}'` 实际上无效。我重新整合了 MTP 模块,对其路由专家层进行了 GPTQ 量化,以匹配基础模型的 W4A16 INT4 分组格式,并修补了 vLLM。解码速度从 **无 MTP 时的 52.85 tok/s 提升至 85.52 tok/s @ 524k 双流 → ~111 tok/s @ 128k 单流**。总参数量 671B / 活跃参数 32B,可适配 2× 96 GB 显存。模型地址:[https://huggingface.co/LordNeel/DeepSeek-V4-Flash-Acti-MTP-W4A16-FP8](https://huggingface.co/LordNeel/DeepSeek-V4-Flash-Acti-MTP-W4A16-FP8)
# 数据表现
硬件配置:2× RTX PRO 6000 Blackwell Max-Q(每卡 96 GB 显存,无 NVLink,sm_120):
| 配置 | 解码 TPS | TTFT | 相对于基线变化 |
|:-|:-|:-|:-|
| 基线(pasta-paul 原版,无 MTP,524k) | 52.85 | 91 ms | 参考值 |
| **本模型(524k 双流)** | **85.52** | 155 ms | **+62% (1.62×)** |
| **本模型(128k 单流)** | **~111** | ~310 ms | **+110% (2.10×)** |
Sanity-check 基准测试(小样本,完整数据见模型卡片):
| 基准测试 | 样本数 (n) | 得分 |
|:-|:-|:-|
| GSM8K (T=0, CoT, 精确匹配) | 100 | **93%** |
| MMLU (混合学科) | 100 | 53% (受困难学科拖累,与基线一致) |
| HumanEval (语法检查,非 pass@1 执行) | 50 | **90%** |
# 量化细节
* **768 个路由专家张量**(256 个专家 × {w1, w2, w3}):W4A16 INT4,组大小 128,对称量化,采用 GPTQ(基于 Frantar 风格的 Cholesky H⁻¹)。校准数据来自运行中的 pasta-paul 模型捕获的 256 个 ultrachat_200k 提示词,最大 token 数为 256 —— 共 17,701 个 MTP 前向传播 dump,473k tokens。
* **5 个注意力投影层**:FP8_BLOCK(保留上游的 FP8 权重,仅将 `scale` 重命名为 `weight_scale` 以匹配 pasta-paul 的 compressed-tensors 约定)。
* **共享专家、e_proj、h_proj、归一化层、门控、attn_sink**:保持 BF16 / FP32。
# Max-Q 特定修复
如果你使用的是 **Max-Q 工作站显卡**:必须传递 `--disable-custom-all-reduce` 参数。vLLM 的 CustomAllreduce 使用 CUDA P2P(独立于 `NCCL_P2P_DISABLE`),在仅支持 PCIe 的 Max-Q 拓扑结构上,这会导致后图 eager 预热阶段死锁。如果不加该标志,引擎将卡在 `gpu_worker.py:619`,并无限打印 `shm_broadcast.py:681 No available shared memory broadcast block` 警告。**Server** 变体拥有 NVLink,不会遇到此问题。
可将 TTFT 从 ~155 ms 降低至 ~91 ms 且零解码 TPS 损失的 NCCL 调优参数(针对 Max-Q):
```bash
NCCL_PROTO=LL
NCCL_ALGO=Ring
NCCL_MIN_NCHANNELS=8
NCCL_NTHREADS=512
```
# 如何运行
需要使用修补过的 vLLM 分支。原版 vLLM 无法加载 DSV4-Flash 量化模型。
基础工作空间位于 [https://github.com/pasta-paul/dsv4-flash-w4a16-fp8](https://github.com/pasta-paul/dsv4-flash-w4a16-fp8)。在此基础上应用 MTP 补丁。
```bash
vllm serve LordNeel/DeepSeek-V4-Flash-Acti-MTP-W4A16-FP8 \
--tensor-parallel-size 2 \
--kv-cache-dtype fp8 \
--block-size 256 \
--max-model-len 524288 \
--max-num-seqs 2 \
--gpu-memory-utilization 0.93 \
--tokenizer-mode deepseek_v4 \
--tool-call-parser deepseek_v4 \
--enable-auto-tool-choice \
--reasoning-parser deepseek_v4 \
--trust-remote-code \
--disable-custom-all-reduce \
--speculative-config '{"method":"mtp","num_speculative_tokens":1}' \
--host 0.0.0.0 \
--port 8000
```
我还编写了一份 [`AGENTS.md`](http://AGENTS.md) 运行手册。你可以让 Claude/Codex/Cursor 指向该文件,并指示它“设置环境”/“验证硬件并运行模型”或类似指令。流程涵盖:预检查 → CUDA 工具包(通过 conda 无需 sudo)→ 修补版 vLLM 构建 → 下载 → 应用补丁 → 启动服务 → 冒烟测试。
# 局限性
* **仅限 TP=2。** TP=1 在单张 RTX 6000 专业卡上会 OOM;TP≥4 会触发上游 W4A16 MoE 的 scale-sharding bug ([vllm-project/vllm#41511](https://github.com/vllm-project/vllm/issues/41511))。
* `num_speculative_tokens` **上限为 1。** DSV4 Flash 仅配备一个 MTP 头(`num_nextn_predict_layers=1`);更高的值不会产生更多的草稿 token。
* **推理解析器注意事项。** 使用 `--reasoning-parser deepseek_v4` 时,输出会拆分为 `content` 和 `reasoning_content`。仅读取 `content` 的客户端在“思考”响应中会看到空字符串。
* **MTP GPTQ 在校准期间跳过了注意力层** —— 详见模型卡片中的“未来工作”部分。
* **测试硬件:仅限 Max-Q。** Server 变体 + DGX Spark + H200 **应该**可以工作,但我**尚未**测试。
# 社区请求
如果你运行此模型,发现 **MTP 草稿接受率** 在你的提示分布下显著不同,请评论告知你的领域及该比率(vLLM 会将其记录为 `spec_decode_acceptance_rate`)。
# 致谢
* 基础模型来自 DeepSeek-AI
* pasta-paul 提供了 W4A16+FP8 量化及 jasl/vllm 服务栈 ([仓库](https://github.com/pasta-paul/dsv4-flash-w4a16-fp8))
[](/submit/?source_id=t3_1t9efrb&composer_entry=crosspost_prompt)
相似文章
Deepseek V4 Flash 在 RTX 5090 MoE 上运行
用户分享了在 RTX 5090 上使用 llama.cpp 的一个分支运行 DeepSeek-V4-Flash (Q2_K) 的优化基准测试结果,实现了 21.3 token/秒的生成速度和 100 万上下文大小。
@Hikari_07_jp:我终于让 DeepSeek-V4-Flash MTP 投机解码在 2× RTX PRO 6000 上实际运行了,单流吞吐量提升 38%。它……
通过修复加载器中量化格式路由错误,在 2× RTX PRO 6000 上实现了 DeepSeek-V4-Flash MTP 投机解码,吞吐量提升 38%。
在本地用4张老款RTX 2080 Ti运行DeepSeek-V4(2000美元预算配置)。自定义图灵内核、W8A8量化,以及255个预填充token/秒!
一位开发者成功在四张RTX 2080 Ti GPU上以2500美元预算本地运行DeepSeek-V4-Flash(总计284B,激活13B),通过自定义图灵CUDA内核、W8A8量化和异构推理实现了255个预填充token/秒。该实现已开源。
@Snixtp: DeepSeek V4 Flash 能否在单张 RTX Pro 6000 上运行?
antirez 已发布 DeepSeek V4 Flash 的 GGUF 量化版本,使该模型能够在单张 GPU(如 RTX Pro 6000)以及 128GB 以上内存的 Mac 上运行。量化文件已上传至 Hugging Face,并附有 DS4 推理引擎的使用说明。
后续:DeepSeek V4 Flash 在双 RTX PRO 6000 上完成真实编程任务的速度快于 Sonnet 和 Opus,质量与 Sonnet 相当
DeepSeek V4 Flash 在双 RTX PRO 6000 GPU 上完成真实编程任务的速度快于 Anthropic 的 Sonnet 和 Opus 模型,同时达到与 Sonnet 相近的质量。