从 AllReduce 到通算融合:语义、流水、资源竞争与优化验收
问题起点
9月22日问AllReduce与AllGather是否“通信完全没区别”;23日继续问通算融合、MegaMoE、多Agent调优及算子并行。本篇把语义正确性、执行重叠和端到端收益分开。
用两个rank计算一次
rank0=[1,2],rank1=[10,20]:
- Sum AllReduce:每个rank得到[11,22],结果长度2。
- AllGather:每个rank得到[1,2,10,20],结果长度4,顺序依rank。
- ReduceScatter:先求和得到[11,22],再分别给rank0的[11]与rank1的[22]。
因此通信不只是把数据搬过去:是否归约、何时产生结果、接收大小和后继计算布局都不同。ReduceScatter再AllGather可构成AllReduce,但实现和浮点求和顺序可能不同。
NCCL集合操作说明要求参与rank匹配调用参数;不一致可导致挂起或错误。HCCL应另核对接口和支持范围,数学语义相同不代表底层算法相同。
通算融合解决什么
典型关系:AllGather→MatMul、MatMul→ReduceScatter/AllReduce、MoE Dispatch→专家计算→Combine。融合可减少中间写回,也可把整块等待改为分块就绪即计算;不必物理上只有一个kernel。
四个方案必须分别测量:完整串行、不同stream并发、单kernel融合、tile级通信计算流水。依赖不满足时不能强行并发;独立stream只是给运行时提供机会。
教学算例:通信4毫秒、计算6毫秒,串行10毫秒,理想完全重叠下界6毫秒。若争用后分别变成7和8毫秒,收益远小于理想值,甚至加上同步后不如串行。
为什么单算子最快可能让系统变慢
并发受SM/AI Core、寄存器、shared/UB、HBM带宽和通信引擎约束。给一个kernel最大的资源可能减少同驻留机会;但主动少用资源也不一定好,因为另一个任务可能没有就绪,或两者都受同一带宽限制。
决策顺序:画依赖图→标关键路径→测独立资源特征→挑少量可并发候选→实测串行/并发/融合总时间。优化目标是请求SLO和系统吞吐,不是所有kernel都同时执行。
MegaMoE如何定位
当日追问中的MegaMoE可放到MoE通信与专家计算整体融合这一层理解。但不同项目同名实现不能混同。vLLM-Ascend的Fused MC2配置有具体模式与条件,不能从“存在enable_fused_mc2”推导你的模型、量化、硬件、PD组合均受支持。
上游插件配置是核对入口;本次未执行用户环境验证,也不把旧环境变量和当前配置直接混用。
Agent能加速什么,不能替代什么
Agent可生成候选tile、融合边界、测试与基准脚本;搜索规模最终受硬件测试预算、编译耗时、噪声和正确性约束限制。上百Agent共享一台测量机可能互相污染结果。
建议控制器分配候选,隔离测量时段,以数值通过为硬门槛,记录每次配置、commit、shape分布及显存。先筛选Pareto候选,再在真实模型验证。没有统一的“一个算子必须一个月”或“Agent几小时必定完成”工期。
验收清单
覆盖空输入/尾块/不对齐、不同world size与rank、动态专家负载、失败与超时、数值误差、预热及稳态;同时报告单算子与端到端收益。对比固定模型权重、版本、输入输出长度、并发和拓扑。
原理与教学例于2026-09-23整理;没有新增机器实测。