你好。本模块开始进入分布式训练的通信模型。对 5T MoE 强化学习训练框架而言,集合通信不是一个“库调用细节”:它直接决定并行维度能否扩展、专家并行能否落地,以及新 ASIC 的互联和通信库还缺哪些能力。
这一课建立一个足够实用的第一版性能模型:用 - 模型估算点对点通信,以及 AllReduce、AllGather、ReduceScatter 和 All-to-All 的时间;再把均匀拓扑上的公式转换为面对真实、分层且可能低带宽互联时的判断方法。学完后,你应当能把一次“通信很慢”的描述拆成:是启动延迟、有效带宽、拓扑瓶颈、算法选择,还是通信竞争造成的。
1. 从一条消息开始:- 模型
设一个设备向另一个设备发送 字节,最基本的通信时间模型为:
其中:
- :每次消息启动成本,单位通常是秒或微秒。它综合反映运行时调度、同步、DMA 启动、网络协议和链路传播等固定成本。
- :每字节传输时间,单位为秒每字节。
- :有效带宽,单位为字节每秒。
所以也常写成:
这是一种端到端的抽象模型,不是芯片规格表的直接翻译。ASIC 宣称某链路带宽为 ,不代表训练进程真的能以它传输。实际有效带宽还会受到以下因素影响:
- 设备到 NIC 的路径是否经过共享交换结构;
- 多条通信流是否竞争同一条链路;
- DMA、通信内核和运行时是否充分并发;
- 数据是否需要额外打包、转置或中转;
- 消息是否过小,导致 主导;
- 是否同时发送和接收,以及链路是否全双工。
因此,在工程决策中,更可靠的量是针对具体通信组、具体消息尺寸、具体 collective测得的 和 。
两个极端帮助建立直觉:
这是延迟受限:减少通信轮数往往比提升峰值带宽更有效。
这是带宽受限:应关注链路利用率、分片、拓扑放置与通信计算重叠。
临界消息大小为:
例如 、 时,临界大小约为 。远大于这个量级的梯度分片或 MoE token 缓冲区,通常主要受带宽制约;小控制消息、很细的通信 bucket 或短序列下的小张量,则可能被延迟吞噬。
2. 五种通信操作:先明确“每个 rank 最后拿到什么”
设通信组有 个 rank。必须先定义 的含义,否则公式很容易被误用。
这里采用大消息、带宽优化实现中常用的约定:
- 对 AllGather、AllReduce、All-to-All, 是每个 rank 的输出张量大小。
- 对 ReduceScatter, 是每个 rank 的输入张量大小。
- 对 P2P, 是这条消息的大小。
| 操作 | 每个 rank 的初始数据 | 每个 rank 的最终数据 | 是否执行规约 |
|---|---|---|---|
| P2P | 一个待发送缓冲区 | 对端得到同样的数据 | 否 |
| AllGather | 一个 大小分片 | 拼接后的 大小完整张量 | 否 |
| ReduceScatter | 一个 大小完整张量 | 规约后属于自己的 分片 | 是 |
| AllReduce | 一个 大小完整张量 | 规约后的 大小完整张量 | 是 |
| All-to-All | 一个 大小输入,按目的 rank 切分 | 从每个 peer 接收一段,合成 大小输出 | 否 |
注意:All-to-All 的输出大小保持为 ,不代表它等价于“简单复制”。每个 rank 需要和多个 peer 交换不同的数据片段,这一通信模式对拓扑和并发能力尤其敏感。
下面先用带宽优化的长消息模型。它是很有用的起点,但并不是所有通信库、所有消息尺寸和所有拓扑上的唯一公式。
| 操作 | 时间近似 | 主要含义 |
|---|---|---|
| P2P | 一次消息启动加上传输时间 | |
| AllGather | 轮交换,累计移动接近一个完整输出张量 | |
| ReduceScatter | 同样有 轮;每轮还做局部规约 | |
| AllReduce | ReduceScatter 加 AllGather | |
| All-to-All | 面向不同 peer 的 轮交换,传输约一个本地张量量级 |
AllReduce 的模型可以写成:
这不是巧合,而是一个重要的实现结构:先把分片逐步规约到正确的 rank,再把规约好的分片传回所有 rank。

在这张图中,ReduceScatter 的关键不是“每张卡最终数据更少”这么简单,而是:它把完整梯度的规约工作与分片保存结合起来。随后 AllGather 把已经正确规约的各分片重新拼成完整梯度。后续学习 FSDP/ZeRO 时,这正是理解“梯度分片”和“参数物化”通信代价的基础。
AutoDDL: Automatic Distributed Deep Learning with Near- ...
阅读论文的第 3.1 和 3.2 节。第 3.1 节给出本课使用的长消息集合通信复杂度;第 3.2 节说明为什么不能直接相信硬件标称带宽,而应通过实测拟合模型参数。
先阅读第 3.1 节 “Collective Performance based on the Alpha-Beta Model”,从 模型定义到表 2 的算法假设。重点核对 n 在不同 collective 中代表输入还是输出大小,并观察 AllReduce 相比 ReduceScatter 或 AllGather 多出的通信阶段。 接着阅读第 3.2 节 “Inferring Network Parameters on Real World Systems”,从 实测拟合方法。关注其测量多个消息大小和进程数、重复测量、再用最小二乘估计参数的流程;这将成为新 ASIC 通信验收的基本方法。
3. 手算一次:8 卡通信组上的时间量级
假设一个 8 卡通信组的实测有效参数为:
因此:
现在考虑 的通信张量。纯带宽传输一个完整张量所需时间为:
P2P
这里延迟只占很小一部分。
AllGather 或 ReduceScatter
虽然每个 rank 最后会拥有 的 AllGather 输出,但环形传输把数据拆分为 8 份,每个 rank 的累计传输量接近 个完整张量。
AllReduce
它接近 ReduceScatter 和 AllGather 的两倍,因为它确实包含两个阶段。
All-to-All
这个数字很容易让人误判:从带宽项看,All-to-All 似乎只比 P2P 多一点启动延迟;但在真实 MoE 路由里,它常常远比这个理想值糟糕。原因不在公式本身,而在公式默认了:
- 各 peer 的数据量大致均匀;
- 端点可以高并发地发送和接收;
- 路径没有严重竞争;
- 每轮通信都能接近有效带宽;
- 不存在额外的 token 重排、padding、打包和同步开销。
MoE 的路由分布、固定长度 whole-group All-to-All 限制,以及跨机链路的争用,都会逐项破坏这些假设。后续会专门分析这种偏差;本课先建立理想下界和可测基线。
4. 公式并不脱离拓扑: 与 必须属于一条具体路径
对新 ASIC 平台,不能只问“带宽是多少”,而要为候选通信组定义其通信路径。至少应区分:
| 候选通信域 | 常见路径特征 | 应单独测量的参数 |
|---|---|---|
| 单机、同一高速互联域 | 低延迟、高带宽,可能多路径并行 | 、 |
| 单机、跨交换域或共享总线 | 可能发生局部拥塞或中转 | 、 |
| 跨机、同一网络平面 | 受 NIC、RDMA 和交换网络限制 | 、 |
| 跨机且共享上行/超售链路 | 非均匀、竞争明显 | 在并发负载下的 |
假设一台机器内 8 卡的有效带宽为 ,跨机有效带宽仅为 。若你把通信组从单机 8 卡扩成两机 16 卡,并直接把一个扁平 ring 放到跨机路径上,那么用于初算的保守带宽不应仍取 ,而应接近跨机瓶颈:
对于大消息,带宽项会约扩大四倍。即使总设备数增加,通信时间也可能吃掉新增算力带来的收益。
这也是为什么“设备数量翻倍,吞吐应翻倍”在分布式训练中通常不成立。计算工作被更多设备分摊,而一次 AllReduce 的总带宽代价并不会按同样比例消失;All-to-All 更可能因端点数和跨域流量增加而恶化。
NCCL: High-Speed Inter-GPU Communication for Large-Scale Training - Sylvain Jeaugey, NVIDIA
观看 Sylvain Jeaugey 在 Coding Workflows 的演讲 “NCCL: High-Speed Inter-GPU Communication for Large-Scale Training” 中关于拓扑发现、环与树算法的一段。它将“公式里的带宽”放回真实设备、NIC 和交换网络组成的路径中理解。
在该视频的拓扑与算法部分,先看 拓扑建模:关注通信库为何要发现 GPU、交换结构和 NIC 的连接关系,以及机内互联如何影响跨机 NIC 带宽能否被聚合。然后看 环与树:重点比较 ring 的线性延迟增长与 tree 的对数级延迟特征,并把它与“消息大小决定算法选择”的判断联系起来。
5. Ring、Tree 与 Pairwise Exchange:公式背后有算法假设
同一个 collective 没有唯一时间公式,因为通信库可以选择不同算法。
Ring:带宽友好,但启动轮数随规模线性增长
环形算法中,每个 rank 通常只与相邻 rank 交换。对大消息,它能稳定地让链路持续传输,因此带宽项接近理想;但它需要大约 个通信轮次。
因此,ring 的特点可以概括为:
适合大张量、较稳定的拓扑和可充分流水化的传输。
Tree 或递归倍增:延迟友好,但带宽常数不同
使用递归倍增的 AllGather,其典型形式为:
对于较小消息, 通常优于 。例如 时:
如果消息很小,63 次启动与 6 次启动的差异可能远大于数据搬运量差异。
但不能由此简单宣布 tree 永远更好。大消息场景中,ring 常能通过稳定流水和全链路利用获得更高有效带宽。实际通信库通常会依据消息大小、通信组规模和拓扑,在 ring、tree 或其他变体间选择。
Pairwise Exchange:All-to-All 的常见思路
All-to-All 常以“每轮与一个不同 peer 通信”的 pairwise exchange 实现。它天然需要多个 peer 之间的交叉流量,因此其延迟项通常为:
对于均匀 All-to-All,每个 rank 向每个 peer 发送约 数据。理想公式中的带宽项为 ,表示每个 rank 总共需要注入或接收大约一个完整本地张量量级的数据。
但若很多 rank 的流量同时跨越同一台机器的 NIC 或同一条交换机上行链路,真正的瓶颈是割边带宽,而不是单个点到点链路带宽。一个必须检查的下界是:
其中:
- :必须穿过某个机器边界、网络平面或交换机割边的总数据量;
- :该割边在实际并发条件下可提供的聚合带宽。
这个下界对 MoE 专家并行特别重要。即使每块 ASIC 的单链路带宽不错,只要专家放置导致大量 token 跨机交换,而每台机器的 NIC 总带宽不足,All-to-All 就会被网络割边锁死。
6. 分层拓扑上的估算:不要把“峰值链路”当成“collective 带宽”
考虑 个设备,其中:
- 每台机器有 个设备;
- 一共有 台机器;
- 机内与跨机互联的 明显不同。
对 AllReduce,一个常见的分层方案可以近似拆为:
- 每台机器内 ReduceScatter;
- 对每个分片在跨机组中 AllReduce;
- 每台机器内 AllGather。
其估算形式为:
这个式子的价值不在于它对每个通信库实现都精确,而在于它迫使你回答三个架构问题:
-
跨机阶段传的是多大的数据?
分片后跨机传输的是 ,而不是每次都传完整 。 -
最慢链路发生在哪个阶段?
机内阶段通常拥有更高带宽;跨机阶段则是更可能的瓶颈。 -
通信库是否真的实现了这个分层路径?
若没有,扁平通信可能让机内和跨机路径混在一起,导致跨机瓶颈放大。
对于 AllGather、ReduceScatter 和 All-to-All,也可以按“机内阶段 + 跨机阶段 + 机内阶段”去分解,但必须依据实际数据布局和通信调度定义每一步的输入大小。不能机械地把某个 AllReduce 公式套上去。
特别是 All-to-All:其层次化实现往往需要先把“发往同一远端机器的数据”重组,再跨机发送,再在目的机器内分发。这样能减少跨机消息数量、提高 NIC 利用率,却可能引入额外的重排缓冲区、同步和机内通信。它是性能、内存和实现复杂度之间的交换,而不是免费优化。
7. 用模型服务架构决策:一张最小估算表
在平台拓扑尚未完全明确时,可先维护一张“假设可替换”的估算表。下面是适合当前阶段的模板。
| 项目 | 需要填入的量 | 目的 |
|---|---|---|
| 通信组大小 | ,以及机内 、机器数 | 区分扁平与分层方案 |
| 张量语义 | 是输入、输出还是每 peer 分片 | 避免公式量纲正确但语义错误 |
| 数据类型 | BF16、FP8 或其他 | 将元素数转换为字节数 |
| 小消息参数 | 判断控制面、细粒度 bucket 和小张量影响 | |
| 大消息带宽 | 估算梯度、参数、token 缓冲区等主流量 | |
| 并发条件 | 单 collective / 多组并发 / 训练计算并发 | 测试链路争用和可重叠性 |
| 路径位置 | 机内、跨机、跨交换域 | 暴露真正的慢链路 |
| 算法与实现 | ring、tree、pairwise、分层 | 避免把算法差异误判为硬件差异 |
建议将预测写为区间,而不是单点:
其中乐观值使用独占带宽和理想均衡,保守值使用并发压力下的有效带宽、较高的启动成本,并显式加入必要的数据重排和同步开销。对新 ASIC 平台,这比基于标称带宽给出一个“精确到小数点后两位”的数字更可信。
最终,你要向集合通信库和运行时团队提出的不是笼统的“提升 All-to-All 性能”,而是可以验证的需求,例如:
- 在 的通信组上,分别测量 P2P、AllReduce、AllGather、ReduceScatter、All-to-All;
- 覆盖从延迟主导到带宽主导的一组消息大小;
- 分开测量机内、跨机、分层和多通信组并发;
- 报告算法、实际路径、bus bandwidth、端到端延迟及尾部延迟;
- 用拟合后的 预测端到端训练通信时间,并用 trace 验证误差。
小结
本课的核心结论是:
-
点对点通信的基本模型是
描述每条消息的启动成本, 是每字节时间, 是有效带宽。
-
对大消息的初步估算中,AllGather 和 ReduceScatter 约为
AllReduce 可理解为二者串联;All-to-All 的理想带宽项约为一个本地张量,但它对拓扑竞争和负载不均高度敏感。
-
collective 的公式取决于算法。ring 通常偏带宽优化,tree/递归算法常降低小消息延迟;不能脱离消息大小与拓扑谈“哪个更快”。
-
在真实新 ASIC 上,应该拟合并使用实测有效参数,而不是用标称带宽替代 。对跨机、共享链路和并发 collective,还必须检查网络割边带宽。
下一课将把通信模型放回训练迭代本身:分析数据并行如何复制模型、同步梯度、改变全局批量大小,以及它为什么在规模扩大时首先暴露 AllReduce 的成本。