
【AI Infra小白入门⑩】集合通信基础AllReduce、Ring算法与NCCL全解析本文是「AI Infra 小白入门」系列的第十篇。分布式训练/推理的本质是计算 通信。集合通信就是多卡之间传话的方式是理解DDP、ZeRO、TP通信开销的钥匙。本文用最通俗的语言讲清楚通信原语、Ring/Tree算法、NCCL以及NVLink和IB的带宽差异。一、写在前面为什么需要集合通信想象一下你有8张GPU要训练一个大模型。每张卡上有一部分数据各自算各自的梯度。但问题来了每张卡算的梯度不一样怎么让所有卡都拿到平均后的梯度来同步更新参数呢这就需要集合通信——多张GPU之间按照某种模式交换数据、汇总数据。集合通信是分布式训练的基础。不懂集合通信你就理解不了DDP是怎么同步梯度的ZeRO为什么能省显存、为什么通信量变大了张量并行的通信开销到底有多大为什么3D并行要TP节点内、DP跨节点先上一张全景图二、六大通信原语都是什么意思通信原语Collective Primitives就是通信的基本模式。最常用的有六种原语语义大白话典型用途Broadcast1 → N 广播一个人说话所有人都听到参数初始化同步ReduceN → 1 规约所有人把数据给一个人这个人汇总老版梯度同步只在主卡上有结果AllReduceN → N 全部得到规约结果所有人都把数据汇总每个人都有最终结果DDP梯度平均最常用AllGather各自片段 → 全部得到完整数据每个人把自己的那片数据发给所有人最后每个人都有完整的ZeRO-3/FSDP参数收集、TP输出拼接ReduceScatter规约 结果分片先汇总再把结果切成片每个人拿一片ZeRO-2/3梯度分片AllToAll两两交换每个人给每个人发不同的数据MoE专家路由、序列并行最重要的一个关系记住这个等式后面经常用到AllReduce ReduceScatter AllGather什么意思你可以先做ReduceScatter规约分片再做AllGather收集合起来的效果和直接做AllReduce是一样的Ring AllReduce就是这么实现的三、Ring AllReduce带宽最优的算法AllReduce是最常用的集合通信原语而Ring算法是实现AllReduce的经典方式。3.1 基本思想把N个rank排成一个环Ring数据切成N块然后分两个阶段阶段一Scatter-ReduceN-1步每个rank把自己的一块数据传给下一个rank同时接收上一个rank传来的数据和自己对应块做规约相加这样传N-1轮之后每个rank手上都有一块完整规约后的数据阶段二AllGatherN-1步每个rank把自己手上那块完整结果传给下一个rank传N-1轮之后每个rank都收集齐了所有N块也就是完整的结果整个过程每个rank要传多少次2(N-1)次。3.2 关键结论通信量与rank数无关每个rank的总通信量是多少每个rank通信量 2 × (N-1)/N × S ≈ 2SS是总数据量N很大时约等于2S等等这意味着什么不管有多少个rank每个rank的通信量大约都是数据量的2倍8卡和128卡每个卡传的数据量差不多听起来反直觉但这就是Ring AllReduce的厉害之处——带宽利用率最优。3.3 优缺点优点缺点带宽利用率高大数据量下效率高延迟随rank数线性增长要传2(N-1)步实现简单逻辑清晰rank数多的时候延迟会比较高适用场景大数据量的通信——比如梯度同步数据量大带宽是瓶颈延迟相对不重要。四、Tree AllReduce延迟最优的算法Ring算法带宽最优但延迟高。那有没有延迟低的算法有就是Tree算法。4.1 基本思想Tree算法也叫Recursive Doubling / Halving用树状的方式做规约第1步rank0和rank1规约rank2和rank3规约……第2步rank0/1的结果和rank2/3的结果规约…………log₂N步之后就完成了因为是两两合并所以只需要log₂N步比Ring的2(N-1)步少多了。4.2 优缺点优点缺点延迟低logN步小rank数时带宽利用率不如Ring适合小消息/延迟敏感场景大数据量下效率不如Ring适用场景小数据量、延迟敏感——比如barrier同步、小tensor的通信。4.3 怎么选实际应用中NCCL会自动选择消息大 → 用Ring消息小 → 用Tree不用你操心NCCL都帮你优化好了。五、NCCLGPU集合通信的事实标准5.1 NCCL是什么NCCLNVIDIA Collective Communications Library是NVIDIA官方的GPU集合通信库也是现在的事实标准。特点拓扑感知自动发现NVLink、PCIe、IB的拓扑结构选择最优路径多流并发多个通信可以同时进行与CUDA Stream集成通信和计算可以在不同stream上重叠执行PyTorch的DDP/FSDPbackendnccl指的就是它。5.2 调试工具查看拓扑和通道设置环境变量NCCL_DEBUGINFONCCL会打印详细的拓扑发现和通信通道信息测试带宽用nccl-tests里的all_reduce_perf可以测不同消息大小下的AllReduce带宽调试分布式性能问题时第一步就是看NCCL的日志——确认拓扑是不是对的、带宽是不是正常。六、NVLink vs IB带宽差一个数量级集合通信的性能很大程度上取决于硬件互联的带宽。我们来对比一下维度节点内 NVLinkA100跨节点 InfiniBand HDR带宽600 GB/s每GPU~25 GB/s200Gbps延迟~微秒级~几微秒拓扑NVSwitch全互联交换机组网适合的通信TP每层AllReduce/AllGatherDP每步一次梯度AllReduce、PPstage间点对点带宽差了多少600 ÷ 25 24倍差了一个数量级还多。对并行策略的影响这个带宽差异直接决定了分布式训练的部署铁律TP做在节点内NVLink域DP/PP跨节点IB域为什么TP张量并行每层都要做AllReduce/AllGather通信非常频繁数据量也不小——必须用NVLink走IB根本扛不住DP数据并行每步只通信一次梯度虽然数据量大但频率低——IB能承受但也是瓶颈之一所以才有梯度bucket化、计算通信重叠这些优化PP流水线并行阶段之间只传激活通信量相对小——IB可以扛量化感受一下8卡TP每层通信几MB频率极高 → 必须NVLinkDP梯度同步每步一次几百MB → IB能承受但已经是瓶颈之一这就是为什么要做梯度bucket化 计算通信重叠——把通信藏在计算后面让两者并行七、一张图总结通信与并行的关系最后我们把通信原语和并行策略对应起来并行策略用到的主要通信原语通信频率通信量适合的互联数据并行DP/DDPAllReduce每步1次大整个梯度IB/NVLink均可ZeRO-1Reduce Broadcast每步1次大IB/NVLink均可ZeRO-2ReduceScatter AllGather每步1次大IB/NVLink均可ZeRO-3ReduceScatter AllGather参数每层多次很大最好NVLink张量并行TPAllReduce / AllGather每层多次中到大必须NVLink流水线并行PPSend/Recv点对点每步多次中IB可承受序列并行SPAllGather ReduceScatter每层多次小NVLink最好八、总结一下今天这篇文章我们讲了集合通信的基础知识六大通信原语Broadcast、Reduce、AllReduce、AllGather、ReduceScatter、AllToAll。记住AllReduce ReduceScatter AllGatherRing算法带宽最优每个rank约传2S数据与N无关但延迟随N线性增长。适合大数据量Tree算法延迟最优logN步但带宽利用率略低。适合小数据量NCCLGPU集合通信的事实标准拓扑感知、自动选算法NVLink vs IB带宽差一个数量级决定了TP节点内、DP/PP跨节点的部署铁律下一篇预告我们来聊聊AI Infra工程师的工具箱——性能分析工具链。gdb、perf、nsys、ncu……这些工具分别是干什么的什么时候用本系列导航第1篇一文搞懂什么是AI基础设施五大方向与不可能三角第2篇大厂AI Infra组织架构大揭秘第3篇AI Infra岗位路线图级别、薪资与成长路径第4篇AI Infra学习路线图从入门到精通的完整指南第5篇AI Infra必备编程基础Python、C与Linux速通指南第6篇AI Infra数学基础速成线代、概率与微积分工程向第7篇Transformer架构工程拆解从Attention到MLA的优化密码第8篇PyTorch框架Infra实战指南Tensor、autograd与性能调试第9篇GPU硬件概论从SM到Memory Wall搞懂优化的物理基础第10篇集合通信基础AllReduce、Ring算法与NCCL全解析本文第11篇AI Infra工具链指南性能分析与调试工具一网打尽更多内容持续更新中……