[Bug]: Kimi-K3 DSpark/DCP illegal memory access

该报错是 vLLM 在 Python 优化模式( python -O )下运行 Kimi-K3 与 DSpark/DCP 多 token 推测解码时,KV-cache 分组逻辑依赖 assert 导致被移除后误选元数据,最终触发 CUDA graph 非法内存访问。优先排查 vLLM 版本是否包含

快速结论:该报错是 vLLM 在 Python 优化模式(python -O)下运行 Kimi-K3 与 DSpark/DCP 多 token 推测解码时,KV-cache 分组逻辑依赖 assert 导致被移除后误选元数据,最终触发 CUDA graph 非法内存访问。优先排查 vLLM 版本是否包含 PR #54277 的回归,以及是否在 -O 模式下运行。

适用环境:vLLM 0.10.x nightly 容器(含 commit 6d4562c59b / PR #54277)、Kimi-K3 模型、DSpark/DCP8、CUDA graphs、GB300 测试机。TokenSpeed MLA 与 FlashInfer MLA 两种后端均可复现。

最快修复方案:暂无确认的一步修复方案。可优先尝试:① 回退到引入回归之前的旧版 vLLM 容器;② 在源码层面将 MLAAttentionSpec.merge() 中的条件改回 any(spec.non_causal_multi_token_decode ...);③ 使用 eager 模式绕过 CUDA graph 失败(性能不代表真实水平)。维护者已准备修复 PR,但尚未合入。

注意事项:仅捕获 AssertionError 或改成 ValueError 不足以修复,且可能把普通不兼容变成启动失败。物理 MLA cache 布局不变,仅需修正合并条件与目标/草稿分组逻辑。

问题场景

在 vLLM nightly 容器(含 commit 6d4562c59b,即 PR #54277)中运行 Kimi-K3 与 Kimi-K3-DSpark 的多 token 推测解码,启用 DCP8 与 CUDA graphs。TokenSpeed MLA 与 FlashInfer MLA 两种 attention 后端均可触发,因此更换 attention 后端无效。

报错原文

[Bug]: Kimi-K3 DSpark/DCP illegal memory access
# Regression introduced by vLLM commit 6d4562c59b / PR #54277
MLAAttentionSpec.merge() uses an assert ... The nightly container runs optimized Python, which removes assertions.
A subsequent set.pop() then nondeterministically selects the wrong metadata, eventually causing a CUDA-graph illegal memory access.

原因分析

问题根因在 MLAAttentionSpec.merge():原实现使用 assert 保持因果目标(causal target)与非因果草稿(non-causal draft)的 KV-cache 规格分离。但 nightly 容器以优化 Python(python -O)运行,assert 会被移除,后续 set.pop() 便无法确定性地选择正确的元数据,最终导致 CUDA graph 非法内存访问。这不是注意力后端的问题,而是 KV-cache 分组和合并逻辑的回归。

维护者指出,non_causal_multi_token_decode 应保留其原始 group-*capability* 语义:用 any() 合并因果目标(False)与非因果草稿(True),然后由每次调用的 CommonAttentionMetadata.causal 选择对应路径。物理 MLA cache 布局无需改变。此外,继承/默认合并保护应显式抛出 AssertionError,以便在 python -O 下仍保留现有分组回退逻辑,避免 Mamba 被静默合并到 MLA。

环境排查

  • 确认 vLLM 版本是否包含 PR #54277(commit 6d4562c59b)的回归代码
  • 确认运行模式是否为 python -O(优化模式会移除 assert)
  • 确认是否启用 CUDA graphs(eager 模式可绕过但性能不具代表性)
  • 确认模型为 Kimi-K3 + Kimi-K3-DSpark,且使用 DCP8 / TP8 多节点配置
  • 确认 MLA attention 后端(TokenSpeed MLA 或 FlashInfer MLA)——两者均可复现,换后端不解决问题

解决步骤

  1. 回退容器版本:使用引入回归之前的旧版 vLLM 容器,避开 PR #54277 的改动。
  2. 源码补丁(可优先尝试):在 MLAAttentionSpec.merge() 中把条件改回 any(spec.non_causal_multi_token_decode ...)。维护者已端到端验证该补丁有效。
  3. 等待上游修复 PR:维护者已准备聚焦 PR,保留独立的目标/草稿 KV-cache 组,用显式运行时逻辑实现分组条件,而不是依赖 assert 控制流。合并遇到不兼容规格时应确定性失败,绝不使用未检查的 set.pop()
  4. eager 模式:如仅需验证功能,可关闭 CUDA graphs 使用 eager 模式,但性能不代表真实水平,仅作临时手段。

验证方法

在保留的 GB300 开发机上运行:聚焦的 MLA merge/metadata 测试(包括一个 capability-enabled builder 同时服务因果目标与非因果草稿元数据);python -O 兼容性探针(确认不等的继承规格返回现有 non-uniform 回退);2 节点 TP8/DCP8 Kimi-K3 + Kimi-K3-DSpark 运行(目标与草稿均在 FlashInfer MLA 上,启用 full/piecewise CUDA graphs 和优化 Python),预期结果为 HTTP 200、正确的 smoke answer、81/220 个接受的草稿 token,且无 CUDA/engine 错误。

参考来源

vllm-project/vllm #54649

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 22017

发表回复

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