[Usage]: DeepSeek-V4: –kv-cache-dtype auto fails silently on Blackwell SM120 — should auto-resolve to fp8_ds_mla

报错出现在 Blackwell SM120(compute capability 12.0)上用 vLLM 0.24.0 启动 DeepSeek-V4-Flash,并保留默认的 --kv-cache-dtype auto (或不传该参数)时。优先显式指定 --kv-cache-dtype fp8 ,

快速结论:报错出现在 Blackwell SM120(compute capability 12.0)上用 vLLM 0.24.0 启动 DeepSeek-V4-Flash,并保留默认的 --kv-cache-dtype auto(或不传该参数)时。优先显式指定 --kv-cache-dtype fp8,可绕开 SM120 路径对 auto 的断言检查。

适用环境:vLLM 0.24.0;模型 deepseek-ai/DeepSeek-V4-Flash;2× NVIDIA RTX PRO 6000 Blackwell Workstation Edition(各 96 GB);GPU 架构 SM120;驱动 595.71.05(open kernel module);CUDA 13.0(toolkit & runtime);Python 3.12;Ubuntu 24.04。维护者在评论中确认该问题在当前 main 上仍可复现。

最快修复方案:启动命令显式传入 --kv-cache-dtype fp8。vLLM 会将其转换为 fp8_ds_mla 并输出一条日志说明;直接传 fp8_ds_mla 也可以。Issue 中未提供已验证的代码级修复。

注意事项:这是绕过方案,不是根因修复。SM120 路径的 KV cache 只支持 fp8_ds_mla 布局,无法存放 bf16;让 auto 自动解析为 fp8_ds_mla 会改变 vLLM 中 auto 的既有含义(即“使用模型自身精度”),需要维护者决策,Issue 中尚未合入。显式传 fp8 会让 KV cache 实际以 fp8 存储,需确认这对你的精度和显存预期可接受。

问题场景

在 2 张 Blackwell SM120 显卡上用 vLLM 0.24.0 启动 deepseek-ai/DeepSeek-V4-Flash,按模型页给出的 vllm serve "deepseek-ai/DeepSeek-V4-Flash" 方式运行,或不写 --kv-cache-dtype、写 --kv-cache-dtype auto。vLLM 在模型初始化阶段崩溃。同样的默认写法在 H100/SM100 上可以工作,而在 SM120 上失败,且错误信息没有提示需要指定 fp8。

报错原文

AssertionError: DeepseekV4 fp8_ds_mla layout only supports fp8 kv-cache, got auto

原因分析

SM120 对应的注意力实现(DeepseekV4FlashInferSM120Attention)在类级别把 use_fp8_ds_mla_layout 硬编码为 True,而 vllm/models/deepseek_v4/attention.py 中的 _resolve_dsv4_kv_cache_dtype 在该分支下先断言 kv_cache_dtype.startswith("fp8"),任何非 fp8 值(包括 auto)都会命中断言。回退到 bf16 的分支只在 use_fp8_ds_mla_layout=False 时可达,SM120 永远走不到。

此外,vllm/models/deepseek_v4/nvidia/flashinfer_sparse.py 的后端校验中,SM10x 允许 auto,而 SM12x 只允许 fp8、fp8_e4m3、fp8_ds_mla,没有为 auto 提供解析路径。两处共同导致默认配置在 SM120 上静默失败。

维护者指出,让 auto 自动解析为 fp8_ds_mla 会与 vLLM 其他位置对 auto 的定义(使用模型自身精度,此处为 bf16)冲突,因此更稳妥的第一步是改进错误信息,而非改变语义。

环境排查

  • 确认 vLLM 版本是否为 0.24.0(Issue 环境),或已确认仍复现的当前 main。
  • 确认 GPU 计算能力为 SM120(compute capability 12.0),即 Blackwell RTX PRO 6000 这类卡;SM100/H100 不触发此问题。
  • 确认 CUDA 13.0(toolkit 与 runtime)与 Python 3.12。
  • 检查 NVIDIA 驱动版本(Issue 为 595.71.05,open kernel module)。
  • 检查启动命令是否未显式指定 --kv-cache-dtype,或显式写成了 auto。
  • 排查日志中是否有 “kv_cache_dtype not supported” 或 fp8_ds_mla 相关日志,用于区分是校验阶段拒绝还是断言阶段失败。

解决步骤

  1. 在启动命令中显式加入 --kv-cache-dtype fp8:
    vllm serve deepseek-ai/DeepSeek-V4-Flash --kv-cache-dtype fp8
  2. vLLM 内部会把 fp8 转换为 fp8_ds_mla,并输出一条升级日志;确认日志中出现该说明。
  3. 如仍需直接指定底层布局,也可传 --kv-cache-dtype fp8_ds_mla,维护者确认该写法同样有效。
  4. 若期望 auto 在 SM120 上直接可用,可优先尝试关注或跟进 Issue 中提出的两处代码修改(attention.py 中的 auto/bfloat16 解析,以及 flashinfer_sparse.py 中 SM12x 分支接受 auto);但这是建议方案,Issue 中未见合并或验证记录,不能视为已完成修复。

验证方法

用 --kv-cache-dtype fp8 重新启动后,模型初始化不再抛出上述 AssertionError,服务正常起来,并且日志中出现 vLLM 将 fp8 转换为 fp8_ds_mla 的提示。若仍出现 kv_cache_dtype not supported,说明命中的是校验阶段而非断言阶段,需检查实际传入的 dtype 字符串。

参考来源

vllm-project/vllm #47174

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 29924

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注