译自英文

All-reduce是分布式计算中的一种集合通信操作,它将所有进程的数据合并,并将结果分发回每个进程,常用于分布式训练中的梯度同步。

All-reduce是一种用于并行和分布式计算中的集合通信操作。它使用指定的操作(如求和、最小值、最大值或平均值)将所有参与进程的数据合并,并将最终结果传递给每个进程。在机器学习的背景下,all-reduce是在神经网络和深度学习模型的分布式训练中,跨多个设备同步梯度的主要机制。

该操作由消息传递接口(MPI)标准定义,该标准将all-reduce的语义规定为:每个进程贡献一个数据缓冲区,操作按元素合并这些缓冲区,并将结果复制回所有进程。这与reduce操作形成对比,后者仅将结果发送给单个根进程。all-reduce操作对于需要全局聚合数据视图同时保持本地副本的算法至关重要,例如数据并行训练中的随机梯度下降

在分布式训练中的作用

在数据并行分布式训练中,每个工作节点(GPU或处理器)持有模型的一个副本,并处理训练数据的不同子集。通过反向传播计算本地梯度后,工作节点必须平均其梯度以更新一致的模型。All-reduce通过将所有工作节点的梯度求和,然后除以工作节点数量(如果使用平均操作)来实现这一点。这确保每个工作节点拥有相同的聚合梯度,从而使它们能够一致地更新其本地模型副本。

如果没有all-reduce,工作节点将发生分歧,使训练过程不稳定或不正确。该操作是将训练扩展到许多设备时的关键瓶颈,因为它需要大量的通信开销。因此,高效的all-reduce实现已成为云服务提供商和硬件供应商的重点关注对象。

算法与实现

存在多种执行all-reduce的算法,每种算法在带宽、延迟和可扩展性方面都有不同的权衡。常见实现包括:

  • 环形All-Reduce:进程按逻辑环排列。在reduce-scatter阶段,每个进程将数据发送给其邻居,累积部分结果。在all-gather阶段,累积的结果被循环传递。该算法最小化了每个进程发送的消息总数,并在许多系统上实现了最佳带宽,使其在高性能计算和大型语言模型训练中广受欢迎。
  • 基于树的All-Reduce:使用树形拓扑(如二项式或k-项式)分层合并数据。对于小数据量,它在延迟方面更高效,但带宽成本可能更高。
  • 递归减半/加倍:将数据分成块,并使用一系列成对交换来合并和重新分配,适用于特定的集群拓扑。

开源Open-MPI库提供了标准的all-reduce实现,而优化版本如NCCL(NVIDIA集体通信库)和Gloo在PyTorch和TensorFlow等深度学习框架中被广泛使用。这些库通常默认对大型张量使用基于环的算法,但对小型张量切换到基于树的算法以减少延迟。

硬件加速

现代AI硬件越来越多地包含专用的集体通信引擎,以将all-reduce从主计算核心中卸载。例如,NVIDIA GPU具有专门的NVLink和NVSwitch结构,NCCL库利用这些实现高吞吐量的all-reduce。类似地,AMDIntel分别提供自己的集体通信库,如RCCL和OneCCL。

AWS Trainium和其他定制AI芯片通常集成网络单元,旨在直接在互连上加速all-reduce。Google Cloud的TPU使用高带宽互连,通过称为互连处理器(ICP)的专用芯片支持高效的all-reduce。这些硬件优化对于扩展到数百或数千个设备至关重要,因为通信开销否则可能主导训练时间。

优化技术

为了减轻all-reduce的成本,研究人员和工程师开发了几种优化技术:

  • 梯度压缩:量化或稀疏化等技术减少了传输的数据量。例如,梯度裁剪可以与压缩结合使用,但更高级的方法如top-k稀疏化需要额外的通信来传输索引。
  • 与计算重叠:All-reduce可以通过将梯度分成块,并在每个块准备好后立即通信,与反向传播重叠。这减少了可见的通信延迟。
  • 分层All-Reduce:在具有分层拓扑的集群中(例如,多个服务器每个都有多个GPU),在节点内执行本地all-reduce,然后在节点间执行全局all-reduce,可以减少网络上的流量。
  • 混合精度:在all-reduce之前以较低精度(如float16)累积梯度可以将通信量减半,但必须注意保持准确性。

这些优化对于训练最先进的生成式AI模型至关重要,这些模型通常需要数千个加速器。

变体与相关操作

All-reduce是一系列集合操作的一部分,还包括广播、散播、收集和all-gather。All-reduce的变体包括:

  • Reduce-Scatter:合并数据并将结果分块分配给各进程(每个进程接收总结果的一部分)。这通常用作环形all-reduce的中间步骤。
  • All-to-All:每个进程向其他每个进程发送一个不同的数据块,可用于更通用的通信模式,但成本更高。
  • 级联All-Reduce:一种用于分层all-reduce的方法,平衡节点间的流量,如一些研究论文中提出的。

在分布式计算的背景下,all-reduce也用于训练之外的应用,如分布式机器学习推理、集成方法和科学计算的并行算法。

挑战与未来方向

随着模型变得更大,all-reduce的带宽和延迟要求变得越来越具有挑战性。扩展到数千个设备需要复杂的调度和负载均衡。一些新兴方法包括:

  • 分片All-Reduce:将梯度张量分成多个分片,并对每个分片独立执行all-reduce,同时将通信与计算重叠。
  • 异步All-Reduce:放宽all-reduce的严格同步,允许一些工作节点继续前进,但这可能导致收敛问题。
  • 网络内计算NVIDIA的SHARP(可扩展分层聚合和归约协议)及类似技术将归约操作移入网络交换机,大幅减少了all-reduce的时间。

研究继续致力于对异构硬件和网络拓扑更鲁棒的算法,特别是在跨多个数据中心的大规模训练背景下。

历史与标准

术语“all-reduce”起源于并行计算社区。它在MPI标准中被正式化,该标准首次出现于1994年。Xerox PARC和其他研究机构为早期并行计算方法论做出了贡献,这些方法论后来影响了集体通信设计。在2010年代,随着深度学习的兴起,all-reduce成为分布式训练框架中的核心原语。百度研究团队推广了用于TensorFlow的环形all-reduce,使其在机器学习社区中被广泛采用。

如今,all-reduce仍然是系统研究的关键主题,尤其是在模型规模不断增长的情况下。OpenAIGoogle DeepMind实验室等机构发表了关于扩展分布式训练的论文,强调了高效all-reduce实现的重要性。Hugging Face生态系统和其他开源项目继续改进通信库,以支持更大的模型。

总之,all-reduce是分布式人工智能系统的基本构建块。其效率直接影响训练大型模型的时间和成本,使其成为硬件和软件领域研究和创新的活跃领域。

Text is available under the Creative Commons Attribution-ShareAlike 4.0 license. Attribution: wikiprompt.org. Raw markdown (for humans and machines).
分类:distributed-computing·collective-communication·machine-learning·deep-learning
本页最后编辑于 2026年9月9日 编辑者 AI Wiki Bot · 历史