集合通信总览
分布式推理和训练把一个模型切分到数百乃至数千个加速器上,这些加速器在每一步计算后必须交换中间结果——梯度、激活、KV 缓存、专家路由 token——才能继续推进。集合通信(Collective Communication)就是这套交换协议的总称:它定义了"谁向谁发送什么数据、最终每个节点得到什么",并提供经过带宽优化的算法实现。正确选择集合通信原语和算法,直接决定了 TP/DP/EP 并行策略的效率上限。
名词定义
| 名词 | 定义 |
|---|---|
| 集合通信(Collective Communication) | 分布式计算中多个节点协同完成的数据交换操作,定义"谁向谁发什么、每个节点最终得到什么"的通信语义 |
| 规约(Reduce) | 对多份等形状数据按元素执行可交换结合运算(SUM/MAX/MIN 等),产生一份合并结果 |
| 带宽下界(Bus Bandwidth Lower Bound) | 由带宽约束决定的时间下界——即使启动延迟 $\alpha = 0$,在有限带宽下传输必需的数据量也至少需要的时间。不是"带宽的下界",而是"带宽所决定的时间下界",与延迟下界共同构成总时间下界 |
| 节点(Node / Rank) | 参与集合通信的一个计算单元,可以是 GPU、NPU 等加速器,集合通信原语中通常用 rank 编号标识 |
| Root 节点 | 在一对多或多对一操作(Broadcast/Scatter/Reduce/Gather)中,作为数据源或汇聚目标的特定节点 |
| 分片(Shard / Chunk) | 将完整数据按节点数均分后,每个节点负责的那一份,大小为 $M/N$($M$ 为总数据量,$N$ 为节点数) |
| 带宽利用率(Bus Bandwidth Utilization) | 算法实际使用的有效传输量与理论带宽下界之比,Ring AllReduce 的带宽利用率约为 $\frac{N-1}{N}$,趋近 1 |
| 步数(Step Count) | 完成一次集合通信所需的通信轮次;带宽型算法步数多但利用率高,延迟型算法步数少但利用率低 |
| 网内计算(In-network Computing) | 在交换机芯片内部直接执行规约运算,而非在终端节点上做软件规约,代表技术为 NVLS(NVLink SHARP) |
| AllReduce | 规约后每个节点都得到完整结果的全对称操作,等价于 ReduceScatter + AllGather,是 TP/DP 的核心原语 |
| ReduceScatter | 全局规约后将结果按分片分发,每个节点只保留 $1/N$ 的结果,是 ZeRO 优化器和序列并行的基础 |
| AllGather | 每个节点贡献一个分片,操作完成后每个节点都持有所有节点分片的完整拼接,与 ReduceScatter 互为对偶 |
| AllToAll | 每个节点向每个其他节点发送不同数据,等价于对 $N \times N$ 数据矩阵做转置,是 MoE 专家路由的核心原语 |
符号定义
| 符号 | 含义 | 单位 |
|---|---|---|
| $N$ | 参与通信的节点数 | -- |
| $M$ | 总消息大小 | Byte |
| $\alpha$ | 启动延迟(单次通信的固定开销) | $\mu s$ |
| $\beta$ | 单链路带宽 | GB/s |
| $d$ | 节点度(直连链路数) | -- |
| $D$ | 拓扑直径(最长最短路径跳数) | hops |
| $T$ | 通信总时间 | $\mu s$ |
| $\oplus$ | 规约运算符(SUM/MAX/MIN/MUL) | -- |
| $k$ | 端口数(k-port 模型中节点可同时使用的独立链路数) | -- |
| $p$ | 有效并行端口数,$p = \min(k, d)$ | -- |
| $B_{\text{bisection}}$ | Bisection Bandwidth(割集带宽) | GB/s |
分类与核心概念
集合通信原语按数据流向分为五类:
P2P(点对点):Send/Recv,一对一传输,是所有集合操作的原子构建块。
一对多:单个 root 节点向所有节点分发数据。Broadcast 发送相同内容,Scatter 分发不同分片。
多对一:多个节点将数据汇聚到单个 root。Reduce 执行规约运算,Gather 执行拼接。
全局对称:每个节点既是发送方也是接收方,最终所有节点状态对等。
- AllReduce:规约后每个节点都获得完整结果,等价于 ReduceScatter + AllGather。
- ReduceScatter:规约后将结果按分片分发,每节点保留 $1/N$。
- AllGather:每节点贡献一个分片,操作后每节点持有完整拼接。
全交换:AllToAll 中每个节点向每个其他节点发送不同数据,等价于对 $N \times N$ 数据矩阵做转置。
硬件加速:NVLS(NVLink SHARP)将规约操作下沉到 NVSwitch 交换芯片内置引擎,把每个 GPU 的传输量从 $\frac{2(N-1)}{N}M$ 压缩到 $M$,打破软件算法的带宽下界。
横向对比
| 原语 | 通信模式 | 数据流向 | 带宽下界(每节点) | 典型应用 | 拓扑要求 |
|---|---|---|---|---|---|
| P2P | 一对一 | 单向 | $M / \beta$ | PP 流水线阶段间激活传递 | 两端直连或低跳数路径 |
| Broadcast | 一对多 | root → all(相同内容) | $M / \beta$ | 参数广播、初始化同步 | 低直径,tree 或 switch |
| Scatter | 一对多 | root → all(各取分片) | $M/N / \beta$ | 数据分发、初始 token 分片 | 同 Broadcast |
| Reduce | 多对一 | all → root(规约) | $M / \beta$ | 梯度汇总(非 DP 主流) | 同 Broadcast |
| Gather | 多对一 | all → root(拼接) | $M/N / \beta$ | 结果收集 | 同 Broadcast |
| AllReduce | 全对称,规约 | 环形/树形多步 | $2\frac{N-1}{N}M / \beta$ | DP 梯度同步、TP 激活同步 | 高 bisection bandwidth,环形或 switch |
| ReduceScatter | 全对称,规约+分片 | 环形多步 | $\frac{N-1}{N}M / \beta$ | ZeRO 优化器、SP 序列并行 | 高 bisection bandwidth |
| AllGather | 全对称,拼接 | 环形多步 | $\frac{N-1}{N}M / \beta$ | ZeRO 参数重建、SP 序列并行 | 高 bisection bandwidth |
| AllToAll | 全交换,转置 | 全对称多对多 | $(N-1)M/N / \beta$ | EP 专家路由(MoE) | 全连通或低阻塞 Fat-tree |
| NVLS AllReduce | 全对称,硬件规约 | GPU → switch → GPU(单步) | $M / \beta$ | TP/DP(NVSwitch 域内) | 必须接入 NVSwitch;域外退化为软件算法 |
文档导航
| 文档 | 内容 |
|---|---|
| 01-理论下界 | 延迟下界、带宽下界推导框架、汇总表、综合下界、bisection 下界、最优算法分类 |
| 02-p2p | P2P Send/Recv 语义、单跳与多跳代价、流水线与并发优化 |
| 03-一对多 | Broadcast 与 Scatter:二叉树/binomial tree 算法及理论下界 |
| 04-多对一 | Reduce 与 Gather:对偶性分析及 root 瓶颈规避策略 |
| 05-reduce-scatter | ReduceScatter:与 AllGather 的对偶关系,Ring 实现与带宽利用率 |
| 06-all-gather | AllGather:Ring 实现、在 ZeRO 和 SP 中的具体用法 |
| 07-all-reduce | AllReduce:Ring / Double Binary Tree / Halving-Doubling 算法对比与选型 |
| 08-all-to-all | AllToAll:矩阵转置语义、Pairwise/Ring/Bruck 算法,MoE 路由建模 |
| 09-nvls | NVLS 硬件归约:如何突破软件 AllReduce 带宽下界及建模方法 |
| 10-拓扑影响 | Ring/Torus/Fat-Tree 等拓扑对各原语性能的系统性影响与分层策略 |
| 11-端口模型与硬件成本 | k-port 模型的硬件实现、端口增加的成本与收益递减、瓶颈转移分析 |