快速结论:该报错在启用 DSpark 推测解码(--spec-method dspark)时触发,常见于 NVIDIA H200 (SM90) 环境。优先检查 DeepseekV4Attention.get_kv_cache_spec 中是否传入了正确的 kv_quant_mode,以及 DSpark 草稿模型权重的路径映射是否正确。
问题场景
用户在使用 vLLM 0.23.1rc1.dev788+gfa4321de3 部署 deepseek-ai/DeepSeek-V4-Flash-DSpark 模型时,启用了 DSpark 推测解码(--spec-method dspark --spec-tokens 5),在 KV-cache 预热阶段引擎初始化失败。不启用推测解码时服务正常。
报错原文
RuntimeError: kv must have shape (num_blocks, page_block_size, h_kv, bytes_per_token)
File ".../vllm/models/deepseek_v4/nvidia/flashmla.py", line 219, in _forward_decode
out, _ = flash_mla_with_kvcache(
...
原因分析
该问题由两个独立 bug 共同导致:
- 草稿模型权重路径不匹配:
_remap_dspark_name函数将检查点名称mtp.{i}.*映射到model.layers.{num_hidden_layers + i}.*,但实际参数在 PyTorch 中注册的名称为model.layers.{i}.*(ModuleList索引从 0 开始),导致草稿层权重未正确加载,可能随机初始化。 - KV-cache 形状不匹配:
DeepseekV4Attention.get_kv_cache_spec返回的MLAAttentionSpec未设置kv_quant_mode,导致cache_dtype_str被传递为"auto",进而get_kv_cache_shape返回错误的形状(512 bytes per token)。对于--kv-cache-dtype fp8的fp8_ds_mla布局,正确值应为 584 bytes per token。
环境排查
- vLLM 版本:
0.23.1rc1.dev788+gfa4321de3 - PyTorch 版本:
2.11.0+cu129 - GPU:NVIDIA H200 (SM90), 8张 GPU
- 模型:
deepseek-ai/DeepSeek-V4-Flash-DSpark - 启动参数:
--tensor-parallel-size 8 --kv-cache-dtype fp8 --block-size 256 --spec-method dspark --spec-tokens 5 --trust-remote-code - 其他尝试失败的参数:
--kv-cache-dtype bfloat16(报错AssertionError: DeepseekV4 fp8_ds_mla layout only supports fp8 kv-cache, got bfloat16);--attention-backend FLASHINFER_MLA_SPARSE_DSV4(报错Unsupported architectureon SM90)
解决步骤
- 修复权重路径映射:修改
vllm/models/deepseek_v4/nvidia/dspark.py中的_remap_dspark_name函数,将mtp.{i}.*映射到model.layers.{i}.*(而非model.layers.{num_hidden_layers + i}.*)。 - 修复 KV-cache 形状:修改
vllm/models/deepseek_v4/attention.py中的DeepseekV4Attention.get_kv_cache_spec函数,在返回的MLAAttentionSpec中添加kv_quant_mode=get_kv_quant_mode(self.kv_cache_dtype)。同时设置alignment=576(适用于fp8_ds_mla布局)。 - 重建或更新 vLLM:应用上述修改后,重新编译或安装 vLLM(建议升级到包含修复的最新
main分支版本)。 - 可优先尝试:如果无法自行修改代码,可确认是否使用
vllm-main分支的最新代码,其中已包含_remap_dspark_name修复,但kv_quant_mode修复可能尚未合并(截至 Issue 关闭时的上游状态)。
验证方法
使用 Issue 中的启动命令(vllm serve ... --spec-method dspark --spec-tokens 5)启动模型服务,确认引擎初始化完成且无 RuntimeError 报错。可通过 /v1/completions 接口发送请求验证正常推理。也可运行 vllm bench serve 进行压力测试,确认吞吐量和接受率在合理范围(如接受率 25-36%)。
参考来源
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。


