Prhub

#37529 [ROCm] Enable MORI EP for unquantized MoE with AITER backend

原始 PR 作者 pinsiangamd 合并时间 2026-03-30 15:19 文件变更 2 提交数 6 评论 7 代码增减 +24 / -9

执行摘要

修复 ROCm 平台未量化 MoE 模型使用 AITER 后端时 MORI 专家并行失效的静默退化问题。

根据 PR body,当使用 MORI EP(--all2all-backend mori)与未量化 MoE 模型和 AITER 后端时,UnquantizedFusedMoEMethod.maybe_make_prepare_finalize() 返回 None,导致 MORI dispatch/combine 被静默跳过,token 无法发送到远程 GPU,每个 GPU 仅运行本地专家,造成专家贡献严重下降(约 87.5%),模型输出质量退化。

建议精读此 PR 以理解未量化 MoE 调度机制,特别关注 AITER 后端集成和 MORI 初始化逻辑;设计决策中,scale_type_size 的处理和守卫移除值得学习,以提高代码清晰度和避免过度工程。

讨论亮点

review 中有两个核心讨论:

1) 在 all2all_utils.py 中,gemini-code-assist[bot] 建议当 scale_dim=0 时,将 scale_type_size 设为 0 而非 torch.float32.itemsize,以提高代码清晰度,作者 pinsiangamd 接受建议并基于 MORI 测试更新。
2) 在 layer.py 中,tjtanaa 询问是否有更好方式处理多个标志列表,作者 pinsiangamd 回应移除了守卫,因为它不完整且与修复无关,真正修复在其他文件中。

实现拆解

关键改动涉及三个文件:

1) unquantized_fused_moe_method.py:移除 maybe_make_prepare_finalize() 中对 AITER 后端的特殊返回 None 逻辑,确保调用父类方法返回 MoriPrepareAndFinalize;并在 select_gemm_impl() 中添加 AiterExperts 支持,当后端为 AITER 时返回。
2) all2all_utils.py:在 maybe_make_prepare_finalize() 中区分量化与未量化调度,当未量化时(FP8 dispatch 不活动),使用 moe.in_dtype 作为 quant_dtype,设置 scale_dim=0scale_type_size=0
3) layer.py:初始添加验证守卫以避免静默失败,但在 review 中因不完整被移除,最终修复不依赖此守卫。

文件 模块 状态 重要度
vllm/model_executor/layers/fused_moe/unquantized_fused_moe_method.py fused_moe modified 7.0
vllm/model_executor/layers/fused_moe/all2all_utils.py fused_moe modified 7.0
vllm/model_executor/layers/fused_moe/layer.py fused_moe modified 4.0

关键符号

maybe_make_prepare_finalize select_gemm_impl

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

评论区精华

scale_type_size 设置优化 设计

gemini-code-assist[bot] 建议当 scale_dim=0 时,将 scale_type_size 设为 0 而非 torch.float32.itemsize,以提高代码意图清晰度。

结论:作者接受建议,基于 MORI 测试更新代码,确保一致性和可读性。 · 已解决

layer.py 验证守卫的设计权衡 设计

tjtanaa 询问是否有更好方式处理多个标志列表,而非逐个检查,作者 pinsiangamd 回应移除了守卫,因为它不完整且与核心修复无关。

结论:移除了守卫,强调修复应集中在其他文件,避免过度复杂化。 · 已解决

风险与影响

技术风险包括:

1) 回归风险:修改核心调度逻辑(如 maybe_make_prepare_finalize()select_gemm_impl())可能影响其他后端或配置,需确保测试覆盖量化与未量化场景。
2) 性能风险:启用 MORI dispatch 可能增加跨 GPU 通信开销,但修复了专家贡献丢失,整体提升准确性。
3) 兼容性风险:与 companion PR #37418 的 FP8 修复协调,避免冲突,同时需验证与其他专家并行后端(如 deepep/nixl)的兼容性。
4) 缺少测试覆盖:PR body 提供了测试结果,但 review 中未讨论单元测试覆盖,可能存在未覆盖的边缘案例。

影响范围:

1) 用户影响:直接修复了使用 ROCm 平台、AITER 后端和未量化 MoE 模型时的输出质量退化问题,提升模型推理准确性(如 gsm8k 基准测试所示)。
2) 系统影响:确保 MORI EP 正确工作,专家贡献分发恢复正常,增强系统在专家并行场景下的可靠性。
3) 团队影响:作为 #37418 的 companion,需协同测试和部署,揭示了对 MoE 调度路径的持续优化趋势,可能影响后续 ROCm 相关开发。

核心路径变更 缺少测试覆盖

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论