[Cherry-Pick][Optimization] merge_allreduce (#7039)#7475
[Cherry-Pick][Optimization] merge_allreduce (#7039)#7475Copilot wants to merge 1 commit intorelease/2.5from
Conversation
Co-authored-by: Jiang-Jia-Jun <163579578+Jiang-Jia-Jun@users.noreply.github.com>
|
Thanks for your contribution! |
PaddlePaddle-bot
left a comment
There was a problem hiding this comment.
🤖 AI Code Review |
2026-04-17 23:56 CST
📋 Review 摘要
PR 概述:Cherry-pick #7039,将 GLM4-MoE 模型中普通专家和共享专家各自的 allreduce 合并为一次,减少集合通信开销。
变更范围:model_executor/models/glm4_moe.py
影响面 Tag:Models Optimization
问题
未发现阻塞性问题。
总体评价
变更逻辑清晰正确,具体验证点如下:
-
merge_ffn_tp条件判断正确:self.use_tp and not self.use_ep精确识别纯 TP 模式(tp>1, ep=1),仅在该模式下延迟 allreduce。在 EP 模式或无并行模式下,各分支仍保持原有的内部 reduce 行为(reduce_results=True)。 -
reduce_results参数传递正确:FusedMoE在reduce_results=False时跳过内部的tensor_model_parallel_all_reduce(已确认moe.py第 760 行的条件逻辑)。Glm4MoeMLP的reduce_results参数仅影响RowParallelLinear(非use_sequence_parallel_moe分支),use_sequence_parallel_moe分支使用ReplicatedLinear不涉及 TP reduce,不受影响。
-
forward 方法正确:先将两个分支的部分和相加(
out + self.shared_experts(x)),再执行一次统一的tensor_model_parallel_all_reduce。当n_shared_experts == 0时,仍会正确执行 allreduce(因为 FusedMoE 输出仍是部分和)。 -
函数签名匹配:
tensor_model_parallel_all_reduce(out, self.tp_group)与communication.py中定义的(input_, group_)签名一致。
这是一个有效的通信优化,在纯 TP 模式下将两次 allreduce 合并为一次,减少约 50% 的集合通信次数,对大规模推理场景有明显收益。
Motivation
Cherry-pick of #7039 to
release/2.5branch.Modifications
将普通专家和共享专家在计算ffn后各自的allreduce合并为一个allreduce。
具体变更:
glm4_moe.py中,新增merge_ffn_tp标志判断是否为纯TP模式(tp>1, ep=1)FusedMoE和shared_experts的reduce_results设为False,延迟 allreducetensor_model_parallel_all_reduce,减少一次集合通信Conflict Resolution
tests/e2e/utils/rollout_routing_replay_test_utils.py的 baseline 路径冲突已解决,保留了 release/2.5 分支已有的R3_BaseLine_25_uint8_0403路径。Checklist
pre-commitbefore commit.releasebranch, and the PR has been submitted to thedevelopbranch first ([Optimization] merge_allreduce #7039).