Prhub

#38504 [Kernels][MoE] Fix legacy_routing to use bitmatrix-based routing path

原始 PR 作者 AndreasKaratzas 合并时间 2026-04-07 10:57 文件变更 7 提交数 10 评论 8 代码增减 +84 / -216

执行摘要

修复 MoE 路由中 HIP 平台整数除法导致的 bitmatrix 错误,避免 GPU 内存访问故障。

PR body指出:'Three issues prevented test_gpt_oss_triton_kernels and GPQA serving from working on gfx950 (CDNA4) after the legacy routing deprecation',详细描述了pack_bitmatrix中的未定义行为导致专家31污染bitmatrix,引发GPU内存访问故障。根因是HIP使用C风格整数除法,-1 // 32 = 0 且 1 << -1 设置比特31,破坏路由元数据。

建议技术管理者和工程师精读此PR,关注pack_bitmatrix的valid guard设计和平台条件化对齐策略,这些是处理跨平台差异的典型模式。同时,可参考相关MoE refactor PR以了解路由演进脉络。

讨论亮点

review中核心讨论:1) tjtanaa询问更改是否来自另一个PR #38503,AndreasKaratzas确认并恢复相关scheduler代码,聚焦于MoE修复;2) tjtanaa建议移除未使用的legacy_routing_from_sparsematrix函数并要求披露模型准确性,AndreasKaratzas回应已移除并启用GPQA eval测试,提供了通过结果。讨论强调了代码清理和测试验证。

实现拆解

实现分为四部分:1) 在vllm/model_executor/layers/fused_moe/gpt_oss_triton_kernels_moe.py的pack_bitmatrix函数中添加valid = indices >= 0 guard,防止负索引产生伪比特;2) 在tests/kernels/moe/test_gpt_oss_triton_kernels.py中条件化padding对齐,ROCm使用256/512匹配CDNA4硬件要求,CUDA保持64/128;3) 更新四个GPQA eval配置文件,添加--tokenizer openai/gpt-oss-20b和--tensor-parallel-size 2参数;4) 移除legacy_routing_from_sparsematrix等未使用代码,统一使用bitmatrix-based路由路径。

文件 模块 状态 重要度
vllm/model_executor/layers/fused_moe/gpt_oss_triton_kernels_moe.py MoE modified 9.0
tests/kernels/moe/test_gpt_oss_triton_kernels.py 测试 modified 7.0
tests/evals/gpt_oss/configs/gpt-oss-20b-rocm-quark-mxfp4-bf16-aiter.yaml 配置 modified 5.0

分析完成后,这里会展示 LLM 生成的相对完整源码片段和详细注释。

关键符号

pack_bitmatrix legacy_routing

评论区精华

legacy 路由代码移除 设计

tjtanaa 建议移除未使用的 legacy_routing_from_sparsematrix 函数,以清理代码。

结论:作者已移除该函数,并启用 GPQA eval 测试验证准确性。 · 已解决

模型准确性验证 测试

tjtanaa 要求披露模型准确性,作者提供了 GPQA eval 结果,显示所有配置通过阈值。

结论:测试通过,准确性在允许范围内,确保修复不引入回归。 · 已解决

风险与影响

风险包括:1) 核心路径变更:pack_bitmatrix修改可能影响所有MoE路由逻辑,需确保CUDA平台行为不变(作者说明为no-op);2) 跨平台不一致:条件化对齐引入维护负担,未来硬件变更需调整;3) legacy代码移除可能破坏潜在依赖,但鉴于deprecation,风险较低;4) 配置文件修改可能导致其他环境serving错误,需验证参数适用性。

影响范围:1) 用户:在AMD GPU(如gfx950)上运行GPT-OSS模型的用户将避免GPU崩溃,提升serving稳定性和准确性;2) 系统:MoE路由更健壮,测试套件通过率从1/5提升至5/5,GPQA eval全部通过;3) 团队:代码更简洁,legacy代码减少,跨平台支持增强。影响程度中等,主要针对特定硬件和模型。

核心路径变更 跨平台不一致 legacy 代码移除

关联 Issue

未识别关联 Issue

当前没有检测到明确关联的 Issue 链接,后续同步到相关引用后会出现在这里。

完整报告

执行摘要

  • 一句话:修复MoE路由中HIP平台整数除法导致的bitmatrix错误,避免GPU内存访问故障。
  • 推荐动作:建议技术管理者和工程师精读此PR,关注pack_bitmatrix的valid guard设计和平台条件化对齐策略,这些是处理跨平台差异的典型模式。同时,可参考相关MoE refactor PR以了解路由演进脉络。

功能与动机

PR body指出:'Three issues prevented test_gpt_oss_triton_kernels and GPQA serving from working on gfx950 (CDNA4) after the legacy routing deprecation',详细描述了pack_bitmatrix中的未定义行为导致专家31污染bitmatrix,引发GPU内存访问故障。根因是HIP使用C风格整数除法,-1 // 32 = 0 且 1 << -1 设置比特31,破坏路由元数据。

实现拆解

实现分为四部分:1) 在vllm/model_executor/layers/fused_moe/gpt_oss_triton_kernels_moe.py的pack_bitmatrix函数中添加valid = indices >= 0 guard,防止负索引产生伪比特;2) 在tests/kernels/moe/test_gpt_oss_triton_kernels.py中条件化padding对齐,ROCm使用256/512匹配CDNA4硬件要求,CUDA保持64/128;3) 更新四个GPQA eval配置文件,添加--tokenizer openai/gpt-oss-20b和--tensor-parallel-size 2参数;4) 移除legacy_routing_from_sparsematrix等未使用代码,统一使用bitmatrix-based路由路径。

关键文件:

  • vllm/model_executor/layers/fused_moe/gpt_oss_triton_kernels_moe.py(模块 MoE): 核心路由逻辑修改,添加valid guard防止HIP平台伪比特,并移除legacy函数,统一路由路径。
  • tests/kernels/moe/test_gpt_oss_triton_kernels.py(模块 测试): 测试调整,平台条件化padding对齐,确保CDNA4和Hopper硬件兼容性。
  • tests/evals/gpt_oss/configs/gpt-oss-20b-rocm-quark-mxfp4-bf16-aiter.yaml(模块 配置): serving配置文件更新,添加tokenizer和TP参数,修复GPU内存故障。

关键符号:pack_bitmatrix, legacy_routing

评论区精华

review中核心讨论:1) tjtanaa询问更改是否来自另一个PR #38503,AndreasKaratzas确认并恢复相关scheduler代码,聚焦于MoE修复;2) tjtanaa建议移除未使用的legacy_routing_from_sparsematrix函数并要求披露模型准确性,AndreasKaratzas回应已移除并启用GPQA eval测试,提供了通过结果。讨论强调了代码清理和测试验证。

  • legacy路由代码移除 (design): 作者已移除该函数,并启用GPQA eval测试验证准确性。
  • 模型准确性验证 (testing): 测试通过,准确性在允许范围内,确保修复不引入回归。

风险与影响

  • 风险:风险包括:1) 核心路径变更:pack_bitmatrix修改可能影响所有MoE路由逻辑,需确保CUDA平台行为不变(作者说明为no-op);2) 跨平台不一致:条件化对齐引入维护负担,未来硬件变更需调整;3) legacy代码移除可能破坏潜在依赖,但鉴于deprecation,风险较低;4) 配置文件修改可能导致其他环境serving错误,需验证参数适用性。
  • 影响:影响范围:1) 用户:在AMD GPU(如gfx950)上运行GPT-OSS模型的用户将避免GPU崩溃,提升serving稳定性和准确性;2) 系统:MoE路由更健壮,测试套件通过率从1/5提升至5/5,GPQA eval全部通过;3) 团队:代码更简洁,legacy代码减少,跨平台支持增强。影响程度中等,主要针对特定硬件和模型。
  • 风险标记:核心路径变更, 跨平台不一致, legacy代码移除

关联脉络

  • PR #38503 未知: review中提及,可能涉及相关scheduler更改,但本PR已恢复那些修改。
  • PR #38251 [Quantization] Add FlashInfer CuteDSL batched experts backend for NVFP4 MoE: 同为MoE相关PR,涉及量化后端,可能有代码结构交叉。
  • PR #35326 [MoE Refactor] Split of DefaultMoERunner class: 同为MoE重构PR,体现了路由和runner模块的演进趋势。

参与讨论