NCCL的all-reduce实现?ring算法代码走读?NCCL的all-reduce实现?ring算法代码走读?
NCCL 提供多 GPU/多机集合通信,all-reduce 即每 rank 有一份输入,结果每 rank 得到相同的规约值(如 sum)。用于分布式训练里梯度/参数同步。
Ring 算法把 N 个节点连成环。Reduce-Scatter 阶段:数据分块,沿环多轮传递,每轮每节点做部分 reduce 并传给下一节点,最终每节点持有 1/N 的完整规约结果。All-Gather 阶段:再沿环把各节点持有的块广播出去,最后每节点得到完整结果。带宽利用好,适合大 tensor。
NCCL 源码中 ring 实现在 ring.cu 等;关注 send/recv 方向、chunk 划分、in-place 与 buffer、以及 ncclSend/ncclRecv 与 kernel 的配合。不同拓扑(单机多卡、多机)会选 ring 或 tree 等算法。
| 返回模块 | 返回总览 |