)
核心集合通信操作以下是分布式训练中最常见和核心的集合通信操作它们构成了大多数并行策略的基础。操作名称通信模式一句话说明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 个进程/GPUrank 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 0Arank 1Brank 2Crank 3D原理根节点把数据切成若干片每个 rank 收到不同的一片。可以看成 Broadcast 的“分片版”Broadcast 是所有节点收到相同完整数据Scatter 是每个节点收到不同分片。用途数据并行中把一个大 batch 切分给不同 GPU分发任务。3. Gather多对一收集例子各 rank 分别有rank 0Arank 1Brank 2Crank 3DGather 到 rank 0 后rank 0[A, B, C, D]其他 rank无结果或空原理所有非根节点把自己的数据发给根节点根节点按 rank 顺序拼接。它是 Scatter 的逆操作。用途收集各 GPU 的预测结果、指标、梯度分片。4. Reduce多对一归约例子各 rank 有数值rank 01rank 12rank 23rank 34执行Reduce(sum)到 rank 0 后rank 010其他 rank无结果原理所有节点把数据发给根节点根节点按指定操作sum、max、min、prod 等进行归约。Reduce 可以看成 Gather 本地计算但实现上通常边收边算减少内存。用途参数服务器中汇总梯度、汇总 loss、统计最大值等。5. All-Reduce多对多全归约例子各 rank 有数值rank 01rank 12rank 23rank 34执行All-Reduce(sum)后rank 010rank 110rank 210rank 310原理先对所有节点的数据做归约再把结果分发给所有节点。经典实现是Ring All-ReduceReduce-Scatter 阶段每个节点只负责一部分归约结果沿环传递并累加。All-Gather 阶段把各节点负责的归约分片沿环传播最终所有节点拥有完整结果。所以常写作All-Reduce Reduce-Scatter All-Gather用途数据并行训练中最核心的操作用于梯度求和/平均。6. All-Gather多对多全收集例子各 rank 分别有rank 0Arank 1Brank 2Crank 3DAll-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 中收集 tokenZeRO 中收集分片参数。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 01111rank 12222rank 23333rank 34444原理先对所有节点的数据做按元素归约然后把归约结果切成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-GatherAll-Gather多对多所有人得到所有分片拼接环、递归加倍Reduce-Scatter多对多先归约再每人得到结果分片All-Reduce 前半All-to-All多对多每人向所有人发不同分片矩阵转置式通信Barrier同步无数据仅等待计数器/握手