☰
分布式训练中最常见和核心的集合通信操作(All-Reduce,All-Gather,All-to-All等)
2026/10/8 6:43:10 网站建设 项目流程

📚 核心集合通信操作

以下是分布式训练中最常见和核心的集合通信操作,它们构成了大多数并行策略的基础。

操作名称通信模式一句话说明
Broadcast一对多将一个节点的数据复制到所有其他节点。
Scatter一对多将一个节点的数据分片后分发到各个节点。
Gather多对一将各个节点的数据收集到一个节点上。
Reduce多对一将各个节点的数据进行归约(如求和),结果只发给一个节点。
All-Reduce多对多对所有节点的数据进行归约,并将结果分发给所有节点。
All-Gather多对多收集所有节点的数据,并将完整结果分发给所有节点。
Reduce-Scatter多对多先归约,再将结果分片散射到各个节点。
All-to-All多对多每个节点都向其他所有节点发送不同的数据,实现全交换。
Barrier同步同步所有节点,不传输数据,仅用于等待。

不同库中的操作列表

不同通信库支持的操作集略有不同,以下是几个主流库的列表:

  • MPI (Message Passing Interface):作为经典标准,MPI 定义了一套非常完整的集合操作,除了上述核心操作外,还包括Scan(前缀扫描)、Alltoallv(可变数据量的全交换)以及众多操作的变体(如Gatherv,Allgatherv等)。

  • NCCL (NVIDIA Collective Communications Library):NCCL 针对 GPU 间通信进行了优化,其官方文档列出的核心操作包括AllReduce、Broadcast、Reduce、AllGather、ReduceScatter、AlltoAll、Gather、Scatter等。

  • PyTorch (torch.distributed):PyTorch 的分布式包提供了与 MPI/NCCL 类似的集合通信 API,包括all_reduce、broadcast、gather、scatter、all_gather、reduce_scatter、all_to_all和barrier等。

  • HCCL (Huawei Collective Communication Library):作为昇腾 AI 处理器上的通信库,HCCL 同样支持AllReduce、Broadcast、AllGather、ReduceScatter、AlltoAllV等核心操作,其接口命名与 NCCL 类似。

下面用4 个进程/GPU(rank 0~3)举例,默认根节点为 rank 0。数据用符号或简单数字表示,便于看清输入输出。集合通信都发生在同一个通信域内,底层通常由点对点send/recv实现。


1. Broadcast:一对多,广播

例子:
rank 0 有数据[1, 2, 3],其他 rank 为空。
Broadcast 后:

  • rank 0:[1, 2, 3]

  • rank 1:[1, 2, 3]

  • rank 2:[1, 2, 3]

  • rank 3:[1, 2, 3]

原理:
根节点把同一份完整数据复制给所有节点。实现上常用树形广播:根先发给几个中间节点,中间节点再继续转发,复杂度约O(log N)步;也有链式广播。

用途:
初始化模型参数、同步超参数、广播配置。


2. Scatter:一对多,散射

例子:
rank 0 有[A, B, C, D],其他 rank 为空。
Scatter 后:

  • rank 0:A

  • rank 1:B

  • rank 2:C

  • rank 3:D

原理:
根节点把数据切成若干片,每个 rank 收到不同的一片。可以看成 Broadcast 的“分片版”:Broadcast 是所有节点收到相同完整数据,Scatter 是每个节点收到不同分片。

用途:
数据并行中把一个大 batch 切分给不同 GPU;分发任务。


3. Gather:多对一,收集

例子:
各 rank 分别有:

  • rank 0:A

  • rank 1:B

  • rank 2:C

  • rank 3:D

Gather 到 rank 0 后:

  • rank 0:[A, B, C, D]

  • 其他 rank:无结果或空

原理:
所有非根节点把自己的数据发给根节点,根节点按 rank 顺序拼接。它是 Scatter 的逆操作。

用途:
收集各 GPU 的预测结果、指标、梯度分片。


4. Reduce:多对一,归约

例子:
各 rank 有数值:

  • rank 0:1

  • rank 1:2

  • rank 2:3

  • rank 3:4

执行Reduce(sum)到 rank 0 后:

  • rank 0:10

  • 其他 rank:无结果

原理:
所有节点把数据发给根节点,根节点按指定操作(sum、max、min、prod 等)进行归约。Reduce 可以看成 Gather + 本地计算,但实现上通常边收边算,减少内存。

用途:
参数服务器中汇总梯度、汇总 loss、统计最大值等。


5. All-Reduce:多对多,全归约

例子:
各 rank 有数值:

  • rank 0:1

  • rank 1:2

  • rank 2:3

  • rank 3:4

执行All-Reduce(sum)后:

  • rank 0:10

  • rank 1:10

  • rank 2:10

  • rank 3:10

原理:
先对所有节点的数据做归约,再把结果分发给所有节点。经典实现是Ring All-Reduce:

  1. Reduce-Scatter 阶段:每个节点只负责一部分归约结果,沿环传递并累加。

  2. All-Gather 阶段:把各节点负责的归约分片沿环传播,最终所有节点拥有完整结果。

所以常写作:
All-Reduce = Reduce-Scatter + All-Gather

用途:
数据并行训练中最核心的操作,用于梯度求和/平均。


6. All-Gather:多对多,全收集

例子:
各 rank 分别有:

  • rank 0:A

  • rank 1:B

  • rank 2:C

  • rank 3:D

All-Gather 后:

  • rank 0:[A, B, C, D]

  • rank 1:[A, B, C, D]

  • rank 2:[A, B, C, D]

  • rank 3:[A, B, C, D]

原理:
每个节点把自己的数据发给所有其他节点,同时接收所有其他节点的数据。可以看成 Gather 的结果广播给所有人,或者每个节点都执行一次“收集”。

用途:
张量并行中拼接分片参数;MoE 中收集 token;ZeRO 中收集分片参数。


7. Reduce-Scatter:多对多,归约后散射

例子:
每个 rank 有一个长度为 4 的向量:

  • rank 0:[1, 2, 3, 4]

  • rank 1:[10, 20, 30, 40]

  • rank 2:[100, 200, 300, 400]

  • rank 3:[1000, 2000, 3000, 4000]

按元素求和得到:
[1111, 2222, 3333, 4444]

Reduce-Scatter 后,每个 rank 得到结果的一个分片:

  • rank 0:1111

  • rank 1:2222

  • rank 2:3333

  • rank 3:4444

原理:
先对所有节点的数据做按元素归约,然后把归约结果切成world_size份,每个 rank 只保留自己那一份。它是 All-Reduce 的前半段。

用途:
ZeRO 优化器中梯度分片归约;All-Reduce 的内部阶段。


8. All-to-All:多对多,全交换

例子:
每个 rank 有一个数组,第j个元素是发给 rankj的:

  • rank 0:[A0, A1, A2, A3]

  • rank 1:[B0, B1, B2, B3]

  • rank 2:[C0, C1, C2, C3]

  • rank 3:[D0, D1, D2, D3]

All-to-All 后:

  • rank 0 收到:[A0, B0, C0, D0]

  • rank 1 收到:[A1, B1, C1, D1]

  • rank 2 收到:[A2, B2, C2, D2]

  • rank 3 收到:[A3, B3, C3, D3]

原理:
每个节点把数据切成world_size份,分别发给对应 rank;同时接收来自所有 rank 的对应分片。可以理解为把通信矩阵转置。

用途:
MoE 专家并行中把 token 发给不同专家;序列并行中交换分片;分布式转置。


9. Barrier:同步屏障

例子:
rank 0 很快算完,rank 3 很慢。
Barrier 后,所有 rank 必须都到达屏障点,才能继续往下执行。

原理:
不传输业务数据,只做同步。每个 rank 到达后增加计数器,等待所有 rank 都到达,然后一起释放。

用途:
调试、性能测量、确保资源初始化完成、阶段同步。


组合关系与总结

操作模式输入输出特点常见实现/关系
Broadcast一对多根有完整数据,所有人得到完整数据树形、链式
Scatter一对多根有完整数据,每人得到不同分片树形分发
Gather多对一每人有分片,根得到完整拼接Scatter 逆操作
Reduce多对一每人有数据,根得到归约结果Gather + 归约
All-Reduce多对多所有人得到归约结果Reduce-Scatter + All-Gather
All-Gather多对多所有人得到所有分片拼接环、递归加倍
Reduce-Scatter多对多先归约,再每人得到结果分片All-Reduce 前半
All-to-All多对多每人向所有人发不同分片矩阵转置式通信
Barrier同步无数据,仅等待计数器/握手

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询