Ring AllReduceRing collective

沿环分阶段传递分块数据,实现归约并分发结果。

核心约束
每个结果块必须包含所有参与者的贡献。
适用问题
多 GPU 梯度与其他张量的集合通信。
边界与取舍
小消息启动延迟与物理链路拓扑会影响效率。

时间与空间#

p 为参与者数,m 为每个参与者的数据字节数;经典 ring = reduce-scatter + all-gather。

时间复杂度
2(p − 1) 个通信步骤;每参与者发送约 2m(p − 1)/p 字节
辅助空间
常见数据缓冲 O(m)O(m),额外流水线缓冲依实现

假设消息均分且链路均衡,启动时延项随 p 线性增长,带宽项随 m 增长;还需本地归约计算。实际 NCCL 会按拓扑、消息大小与协议选择算法,不固定使用 ring。

工程中的应用#

1 个案例 · 附源码
基础原理参考资料

NVIDIA · NCCL 2.4 double binary trees对比 ring 的带宽利用和随规模增长的时延,以及双树方案。

NCCL 2.23.4 · AllReduce kernelsring 与 tree 归约的设备端分步实现。

6 个概念