Ring AllReduce

关注
义项:分布式通信算法
Ring AllReduce

Ring AllReduce是分布式计算中一种基于逻辑环形拓扑的全局归约通信算法,用于在多个计算节点之间同步并合并数据。它把参与计算的节点排成一个环,每个节点只与左右相邻的两个节点收发数据,通信成本不随节点数量增长,而由环中最慢的一条链路决定[1]。该算法最早出现在高性能计算领域,2017 年前后被引入深度学习领域,成为多 GPU 数据并行训练中平均梯度的主流方案之一[1][2]。

百科 图文
目录
  1. 定义
  2. 原理
  3. 发展历程
  4. 应用
  5. 局限
  6. 参见

定义

Ring AllReduce是一种用于多节点并行计算的集合通信算法,解决的问题是:让所有参与节点各自持有一份大小相同的数组,经过通信后每个节点都得到这些数组逐元素合并后的完整结果[3]。它在消息传递接口(MPI)体系中被归类为 AllReduce 操作的一种实现,与归约(Reduce)加广播的思路等价[4]。

所谓环形,指节点之间的逻辑连接关系而非物理布线:全部节点首尾相接组成一个逻辑环路,每个节点有左邻和右邻,数据只沿一个方向依次传递。环中不存在中心聚合节点,所有节点既参与计算也参与存储[2]。

原理

设环中有 $N$ 个节点,每个节点持有一个长度为 $K$ 的数组。算法把每个节点的数组切分成 $N$ 个数据块,整个过程分2个阶段执行,共需 $2(N-1)$ 次通信。第1阶段是 Scatter-Reduce,节点把数据块发送给右邻并从左邻接收,接收到的块与本地对应块做归约运算后继续转发,$N-1$ 轮之后每个节点恰好持有一个已经合并了全体节点信息的完整数据块[2]。第2阶段是 AllGather,节点继续沿环转发这些已归约完成的块,再经过 $N-1$ 轮,所有节点都补齐了全部数据块的最终结果。

由于任意时刻每个节点只从一个邻居接收、向另一个邻居发送,链路上的流量是可预测的,不会出现多个节点同时争用同一条链路的情况[4]。在只考虑带宽、忽略延迟的前提下,这一算法达到带宽最优,即通信量下界为 $2K(N-1)/N$,与节点数量无关,仅由环中最慢的一条连接决定[3][1]。

发展历程

Ring AllReduce 最初诞生于高性能计算领域,在该领域内是一个广为人知的算法,长期未在深度学习中获得广泛应用[1]。

2017 年 2 月,百度硅谷人工智能实验室宣布将该算法引入深度学习,用它在多 GPU 之间平均梯度,并公布了演示该算法的 C 语言库,同时以补丁形式把算法整合进 TensorFlow[1]。百度用该算法训练语音识别模型,称在 40 个 GPU 上相比单一归约 GPU 的方案获得了 31 倍的训练速度提升[1]。此后 Uber 的 Horovod 等框架也基于该算法实现多机多卡梯度同步[2]。

应用

该算法最主要的应用场景是深度学习的数据并行训练。在这类训练中,每块 GPU 持有完整的模型副本,各自用一部分样本做前向与反向计算,再通过通信把各自的梯度求平均后更新权重;梯度规模可达数 GB,通信机制因此成为训练效率的关键[3]。Ring AllReduce 取代了早期把全部梯度汇总到单一 GPU 的做法,避免中心节点的带宽瓶颈[1]。

在框架层面,TensorFlow、PyTorch 和 MXNet 等主流深度学习框架都把参数服务器与 Ring AllReduce 作为主要的分布式训练通信架构[2]。有测试以参数服务器架构为基准,在 32 块 GPU 规模下测得该架构的扩展效率可达 97%,分布式计算性能提升约 30%[2]。

训练过程中,反向传播使靠后网络层的梯度先算完、靠前层后算完,Ring AllReduce 可以利用这一顺序,在后续层梯度仍在计算时先传递已算好的梯度,进一步压缩整体耗时[2]。

局限

Ring AllReduce 的通信量固定为 $2(N-1)/N$ 倍的数组大小,这一优势以同步为前提。每个节点必须先处理完收到的数据才能转发给下一个节点,在归约运算进行期间链路上没有流量,计算与通信无法重叠,因此难以完全用满网络带宽[4]。针对这一依赖关系,已有采用双缓冲、把通信与计算步骤交叠的做法[4]。

该算法要求所有节点按同样的节奏步进,整体速度会被最慢的节点或最慢的连接拖住;当参与者性能不一致时,资源利用率受限于其中最弱的一方[5]。参数同步需要在环中逐步传递多个轮次,对数据量很小的张量不友好,往往需要用批量合并的方式降低开销;随着节点规模增大,每个节点用于建立通信和处理数据的时间占比上升,带宽利用率会随之下降。

参见

  • AllReduce —— Ring AllReduce 所实现的集合通信操作,也是它的算法基础。

  • 参数服务器 —— 另一种主流的分布式训练参数通信架构,常与 Ring AllReduce 对比。

  • 消息传递接口 —— 定义 AllReduce 等集合通信语义的标准,是该算法的接口来源。

  • 数据并行 —— 该算法最典型的应用场景,即多设备同时训练同一模型。

  • Horovod —— 基于 Ring AllReduce 实现多机多卡梯度同步的分布式训练框架。

  • NCCL —— 英伟达的集合通信库,其中包含多环调度的 Ring AllReduce 实现。

参考资料

  1. 百度引入Ring Allreduce算法 大规模提升模型训练速度 [引用日期2026-10-14]
  2. 分布式深度学习通信架构的性能分析 [引用日期2026-10-14]
  3. Andrew Gibiansky :: Math → [Code] [引用日期2026-10-14]
  4. google.com 上的网页 [引用日期2026-10-14]
  5. arxiv.org 上的网页 [引用日期2026-10-14]
词条评价
词条统计

浏览次数:2 次

阅读量:0 次 · 阅读完成量:0 次

最近更新:2026-10-13T21:33:53Z

历史版本

本条目引用的词条
AllReduce 参数服务器 消息传递接口 数据并行 Horovod NCCL