Ring AllReduceRing collective
沿环分阶段传递分块数据,实现归约并分发结果。
- 核心约束
- 每个结果块必须包含所有参与者的贡献。
- 适用问题
- 多 GPU 梯度与其他张量的集合通信。
- 边界与取舍
- 小消息启动延迟与物理链路拓扑会影响效率。
时间与空间#
p 为参与者数,m 为每个参与者的数据字节数;经典 ring = reduce-scatter + all-gather。
- 时间复杂度
- 2(p − 1) 个通信步骤;每参与者发送约 2m(p − 1)/p 字节
- 辅助空间
- 常见数据缓冲 ,额外流水线缓冲依实现
假设消息均分且链路均衡,启动时延项随 p 线性增长,带宽项随 m 增长;还需本地归约计算。实际 NCCL 会按拓扑、消息大小与协议选择算法,不固定使用 ring。
工程中的应用#
1 个案例 · 附源码用不同通信拓扑组织梯度归约,在带宽利用与启动延迟之间取舍。
附源码片段 · 通信与流量
基础原理参考资料
NVIDIA · NCCL 2.4 double binary trees对比 ring 的带宽利用和随规模增长的时延,以及双树方案。
NCCL 2.23.4 · AllReduce kernelsring 与 tree 归约的设备端分步实现。