Prhub

#37418 [Bugfix][ROCm] Fix MoRI + AITER FP8 dispatch compatibility for defer_input_quant

原始 PR 作者 Duyi-Wang 合并时间 2026-03-19 17:49 文件变更 2 提交数 2 评论 1 代码增减 +9 / -7

执行摘要

修复 ROCm 平台 MoRI 与 AITER 后端 FP8 量化分发不兼容的 bug。

MoE Oracle重构后(#32414, #32567),AiterExperts.expects_unquantized_inputs无条件返回True,导致defer_input_quant=True被传递给MoriPrepareAndFinalize.prepare(),后者引发NotImplementedError,使得无法在ROCm平台上使用MoRI + AITER的FP8量化模型。PR body明确指出需解决此兼容性问题。

建议精读此PR,了解MoE架构中FP8量化处理的设计权衡,特别是如何通过条件化属性和异常移除实现后端兼容。关注AiterExperts.expects_unquantized_inputs的条件逻辑和MoriPrepareAndFinalize.prepare中的量化跳过机制。

讨论亮点

review评论中,gemini-code-assist[bot]确认变更逻辑正确,解决了兼容性问题,并指出变更协调了量化步骤;tjtanaa批准。无争议点或未解决疑虑,讨论简短且一致通过。

实现拆解

实现涉及两个文件修改:在rocm_aiter_fused_moe.py中,将AiterExperts.expects_unquantized_inputs属性从无条件返回True改为条件返回not self.moe_config.use_mori_kernels,这样当使用MoRI时返回False;在mori_prepare_finalize.py中,移除defer_input_uant时的NotImplementedError,并在use_fp8_dispatch且defer_input_quant=False时执行FP8量化,否则跳过以支持内部量化的后端。

文件 模块 状态 重要度
vllm/model_executor/layers/fused_moe/mori_prepare_finalize.py fused_moe modified 5.0
vllm/model_executor/layers/fused_moe/rocm_aiter_fused_moe.py fused_moe modified 5.0

关键符号

AiterExperts.expects_unquantized_inputs MoriPrepareAndFinalize.prepare

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

评论区精华

代码逻辑正确性确认 正确性

gemini-code-assist[bot] 评论指出变更解决了兼容性问题,逻辑正确,并协调了量化步骤。

结论:变更被接受,无异议,reviewer tjtanaa 批准。 · 已解决

风险与影响

风险包括:修改核心MoE量化逻辑可能影响其他配置,尤其在defer_input_quant=True时跳过FP8分发量化需确保与后端的正确协调;条件化属性可能在不同MoE配置下行为不一致,需测试覆盖;FP8量化跳过可能引入精度问题。具体文件mori_prepare_finalize.py中逻辑变更需确保在defer_input_quant=True时正确跳过量化。

对用户而言,修复了FP8量化MoE模型在ROCm平台上的使用障碍,使MoRI能与AITER后端协同工作,提升模型部署灵活性。系统层面,增强了MoE模块对不同后端的兼容性,优化网络流量减少。团队影响小,但解决了重要bug,确保ROCm平台功能完整性。

FP8 量化逻辑修改 条件化属性可能引入歧义 缺少广泛测试覆盖

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论