Prhub

#42098 Use hidden_pad and intermediate_pad from vLLM #34301

原始 PR 作者 rebklee 合并时间 2026-05-14 14:21 文件变更 1 提交数 2 评论 3 代码增减 +2 / -2

执行摘要

修复 ROCm Aiter MoE padding 对齐问题提升性能

修复 ROCm Aiter 融合 MoE 路径中 hidden_pad 和 intermediate_pad 传参与内核栈 padding 约定不匹配的问题。该问题源自 PR#37128 引入的 padding 计算逻辑,并被 PR#37787 遗漏。在 GPT-OSS-120B / MI355X 上,修复后吞吐量几何平均提升约 8%。

值得合并。改动小而精,有明确的性能收益和充分的 benchmark 数据支持。建议关注后续对非标准形状模型的进一步验证。

讨论亮点

gemini-code-assist[bot] 提出正确性风险:向下取整可能导致非标准形状模型的内存偏移错误,建议在张量分配时强制对齐或使用显式断言。
dllehr-amd 确认效果并说明具体影响:对于 GPT-OSS 模型,hidden_pad 从 192 变为 128,改变了 n_pad 值,计划进一步测试两阶段 MoE。
Rohan138 确认问题根源:该问题由 PR#37128 引入,PR#37787 遗漏。
最终结论:审核者均批准了该 PR,认为当前改动正确且有益。

实现拆解

  1. vllm/model_executor/layers/fused_moe/experts/rocm_aiter_moe.pyrocm_aiter_fused_experts 函数中,将传递给 rocm_aiter_ops.fused_moehidden_pad 参数由原始值改为 hidden_pad // 128 * 128(即向下对齐到 128 的倍数)。
  2. intermediate_pad 参数由原始值改为 intermediate_pad // 64 * 64 * 2(即向下对齐到 128 的倍数)。
  3. 该对齐方式与 PR#34301 中引入的 padding 逻辑一致,确保内核栈能正确解释 padding 大小。
  4. 仅修改了 2 行代码,属于数据契约层面的修正。
文件 模块 状态 重要度
vllm/model_executor/layers/fused_moe/experts/rocm_aiter_moe.py MoE 层 modified 5.68

关键符号

rocm_aiter_fused_experts

关键源码片段

vllm/model_executor/layers/fused_moe/experts/rocm_aiter_moe.py data-contract

核心变更文件,修改了传递给 ROCm Aiter 融合 MoE 内核的 hidden_pad 和 intermediate_pad 对齐方式。

# vllm/model_executor/layers/fused_moe/experts/rocm_aiter_moe.py (line 356-362)
        return rocm_aiter_ops.fused_moe(
            hidden_states,
            w1,
            w2,
            topk_weights,
            topk_ids,
            expert_mask=expert_mask,
            quant_method=quant_method,
            activation_method=activation_method,
            w1_scale=quant_config.w1_scale,
            w2_scale=quant_config.w2_scale,
            a1_scale=quant_config.a1_scale if a1q_scale is None else a1q_scale,
            a2_scale=quant_config.a2_scale,
            doweight_stage1=apply_router_weight_on_input,
            num_local_tokens=num_local_tokens,
            output_dtype=output_dtype,
            hidden_pad=hidden_pad // 128 * 128, # 向下对齐到 128 的倍数
            intermediate_pad=intermediate_pad // 64 * 64 * 2, # 向下对齐到 128 的倍数
            bias1=quant_config.w1_bias if quant_config.use_mxfp4_w4a16 else None,
            bias2=quant_config.w2_bias if quant_config.use_mxfp4_w4a16 else None,
        )

评论区精华

Padding 向下取整的正确性风险 正确性

gemini-code-assist[bot] 指出向下取整可能导致非标准形状模型的内存偏移错误,建议在张量分配时强制对齐或使用显式断言。

结论:审核者认为当前改动正确,实际测试精度仅下降 0.08pp,风险可控。 · 已解决

风险与影响

正确性风险:向下取整可能导致非标准形状模型(padding 值不是 128 的倍数)接收到错误的 padding 计数,进而引起内存偏移错误,影响 SwiGLU 激活或不同专家的数据处理。该风险由 gemini-code-assist[bot] 指出,但实际测试显示精度仅下降 0.08pp(95.0% vs 94.92%),且审核者认为风险可控。
回归风险:低。改动仅 2 行,且已在特定模型上验证性能提升。

用户影响:使用 ROCm Aiter 融合 MoE 后端的用户(如 AMD GPU 用户)将体验到显著的性能提升(约 8% 吞吐量提升),精度基本不变。
系统影响:仅影响 rocm_aiter_moe.py 一个文件,无外部接口或配置变更。
团队影响:修复了 PR#37128 引入的遗漏问题,降低了维护成本。

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

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论