RuntimeError: Triton Error [CUDA]: an illegal memory access was encountered

该报错发生在使用 vLLM 的 Humming 后端加载 Qwen3.5-397B-A17B-GPTQ-Int4 模型并启用专家并行(Expert Parallelism)时。优先排查 MoE 融合 kernel 中 expert_map 索引越界问题,同时检查该模型在 Humming 下的数值路径

快速结论:该报错发生在使用 vLLM 的 Humming 后端加载 Qwen3.5-397B-A17B-GPTQ-Int4 模型并启用专家并行(Expert Parallelism)时。优先排查 MoE 融合 kernel 中 expert_map 索引越界问题,同时检查该模型在 Humming 下的数值路径是否存在兼容性问题。

适用环境:Issue 已确认的环境为 vLLM 0.24.0、PyTorch 2.11.0+cu130、CUDA 13.0、Triton 3.6.0(另有 tokenspeed-triton 3.7.10.post20260531)、NVIDIA H20 x8、Debian 12、Python 3.12.11,涉及 flashinfer-python 0.6.12。

最快修复方案:暂无确认的一步修复方案。Issue 讨论中的 -1 哨兵值掩码修复已实际验证无效。可优先尝试切换到 Marlin 内核或按需加载模型,因为 Issue 中确认 Marlin 内核可正常工作。

注意事项:Issue 评论区中的修复方案仅为推测(贡献者已提出修复补丁但暂未确认有效性);热补丁修复后需完全重启 vLLM 服务以确保新的 Triton kernel 被加载;H20 显卡可能需要的备用路径尚未验证。

问题场景

用户在使用 vLLM 0.24.0 的 Humming 后端加载量化模型 Qwen3.5-397B-A17B-GPTQ-Int4 时触发 CUDA illegal memory access。该问题仅在使用 --enable-expert-parallel 时出现,而同配置下的 Qwen3.5-35B-A3B-GPTQ-Int4 模型可以正常启动,说明问题与特定模型规模或量化方式相关。

报错原文

RuntimeError: Triton Error [CUDA]: an illegal memory access was encountered

原因分析

可能原因一:moe_fused_mul_sum_kernel(Humming MoE 路径使用)在计算时未对 expert_map 的类型为 -1 的哨兵值做防护,该哨兵值用于表示被路由到其他 rank 的 pair。当 id_val == -1 时会产生越界读取,既可能导致当前报错,也可能悄无声息地产生错误输出。但根据 Issue 评论区实际验证,加入 -1 掩码修复后故障依旧,因此该理论尚不能完全解释本场景。

可能原因二:Qwen3.5-397B-A17B-GPTQ-Int4 模型的 MoE 结构在 Humming 后端的具体参数配置或数值路径上与 H20 硬件存在特定兼容性问题。Issue 中提到较小模型在相同环境下可正常运行,暗示这是模型特异的错误而非通用的 EP 哨兵值缺陷。

环境排查

  • 确认 vLLM 版本是否为 0.24.0(当前 Issue 中验证的版本)。
  • 检查 PyTorch 版本是否为 2.11.0+cu130、CUDA runtime 是否为 13.0.88。
  • 确认 Triton 版本为 3.6.0,注意环境中另有 tokenspeed-triton 3.7.10.post20260531。
  • 确认显卡型号为 NVIDIA H20(8 卡),驱动版本 535.161.08。
  • 确认是否启用了 --enable-expert-parallel 标志。
  • 检查模型文件中 GPTQ 量化配置与 MoE 层参数是否匹配 Humming 路径的 kernel 约束。

解决步骤

  1. 排查内核路径:确认调用的是否确实是 Humming 内核路径(而非 Marlin 路径)。Marlin 内核在 Issue 中确认可正常工作,可作为对照组。
  2. 尝试修复哨兵值:moe_fused_mul_sum.py 中将 expert_map 索引处增加 -1 掩码。注意:Issue 中实际验证这一修复不能解决当前模型的报错,应作为诊断排查步骤而非最终方案。
  3. 热补丁后完全重启:修改 Triton kernel 后必须完全重启 vLLM 服务,确保重新编译并加载新的 kernel,否则修改不生效。
  4. 切换内核验证:改用 Marlin 内核启动同一模型和配置,确认问题是否消失。这是 Issue 中确认可用的备选路径。
  5. 对照实验:使用相同环境加载较小的 Qwen3.5-35B-A3B-GPTQ-Int4 模型,若可正常启动,则问题与大模型特有的配置相关,可继续向 vLLM 反馈该模型特异问题。

验证方法

若不存在本问题,vLLM 服务启动过程应顺利完成模型加载并开始监听请求。能正常处理推理请求并返回符合预期的输出即表示问题已修复。若问题依旧,可观察不同修复手段下的报错日志是否有变化,以判断是否切入了不同的代码路径。

参考来源

vllm-project/vllm #47281

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 22017

发表回复

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