SkipReduce: (Interconnection) Network Sparsity to Accelerate Distributed Machine Learning


A1 主要贡献

本文旨在解决大规模分布式训练系统中 AllReduce 集合操作带来的通信挑战。随着深度神经网络(DNN)模型和数据集规模的持续增长,分布式训练中的通信开销成为性能瓶颈,导致计算资源利用率下降。

核心问题与研究目标
核心问题是,在数据并行训练中,每个梯度更新后都需要进行 AllReduce 集合通信来同步模型,这一同步过程会产生显著的通信开销,限制了训练效率和系统的可扩展性。研究目标是利用梯度内在的稀疏性,通过一种新颖的通信加速技术来减少 AllReduce 的通信时间,同时对训练精度影响最小。

创新点(主要贡献)
本文提出了一种名为 SkipReduce 的集合通信算法,通过在通信过程中随机跳过部分梯度来加速训练。具体贡献如下:

实验结果表明,在通信密集型的 VGG-19 训练中,当跳过 50% 的梯度时,8-GPU 系统上的训练迭代时间最多可减少 21%,且对最终训练精度影响极小。与基准 AllReduce 相比,SkipReduce 在“达到目标精度的时间”(time-to-accuracy)上最高可实现 1.58 倍的加速。


图 1: 包含4个工作节点(例如GPU)的基准环形 AllReduce,由3个 Reduce-Scatter 步骤和另外3个 AllGather 步骤组成。每个方框代表一个消息分片,字母表示不同的分片。我们假设一个单向环,箭头表示分片的移动方向。


A3 背景知识/关键Observation/设计原则

2 背景知识

2.1 深度神经网络训练

深度神经网络(DNN)的训练过程包括前向传播和反向传播两个步骤。在前向传播期间,DNN接收输入x,通过各层传播产生输出y,并计算出标量损失 $L(w_t)$。损失是关于第t次迭代时DNN权重 $w_t$ 的函数。在反向传播期间,损失信息从后向前流经每一层以计算梯度。然后,权重沿着梯度的方向进行更新以最小化损失。这种优化方法称为梯度下降,如公式1所示。

$$\mathbf{w}_{t+1}=\mathbf{w}_{t}-\alpha\nabla_{\mathbf{w}_{t}}L(\mathbf{w}_{t})$$

其中 $\alpha$ 是标量学习率,用于调整权重更新的步长。梯度下降根据每次权重更新所使用的数据量,可以分为确定性(或批量)梯度下降和随机梯度下降。确定性梯度下降在每次更新时使用整个训练数据集。而随机(或小批量)梯度下降仅使用训练数据的一个小的随机抽样子集,通常称为“minibatch”。minibatch的大小是一个可调参数【14, Ian Goodfellow, Yoshua Bengio, and Aaron Courville. 2016. Deep Learning.】。本文使用随机梯度下降(SGD)进行训练。

2.2 分布式数据并行训练

数据并行训练【50, Leslie G. Valiant. 1990. A Bridging Model for Parallel Computation.】将训练数据集分配给一组工作节点,每个工作节点训练一个完全相同的DNN模型副本。因此,每个工作节点使用不同的输入数据执行前向传播,获得不同的损失值,并在反向传播后计算出不同的梯度。在每次权重更新之前,需要使用AllReduce集合通信来对所有工作节点的梯度进行平均,以同步所有工作节点【12, Jiawei Fei, Chen-Yu Ho, Atal N. Sahu, Marco Canini, and Amedeo Sapio. 2021. Efficient Sparse Collective Communication and Its Application to Accelerate Distributed Deep Learning.】。然后,这些平均后的梯度被用来更新每个工作节点上的模型副本【6, Tal Ben-Nun and Torsten Hoefler. 2019. Demystifying Parallel and Distributed Deep Learning: An In-Depth Concurrency Analysis.】。因此,在每个训练步骤结束时,每个工作节点都持有一个相同的模型。本文重点关注常用的环形AllReduce(Ring AllReduce)【34, Pitch Patarasuk and Xin Yuan. 2009. Bandwidth optimal all-reduce algorithms for clusters of workstations.】,它通过在物理网络拓扑上构建一个或多个逻辑环来工作。图1展示了环形AllReduce在4-GPU系统上的分步操作。一个有N个工作节点的环形AllReduce在 $2(N-1)$ 个步骤内完成。因此,对于4-GPU的例子,操作在六个步骤内完成。最初,每个GPU上的本地梯度首先被分成多个分片(slices),这是传输的基本单位。分片的数量等于参与集合通信的GPU数量。在每一步中,每个GPU向其邻居发送一个分片。在第一个 $(N-1)$ 步之后,每个GPU都持有一个包含了来自所有其他GPU的归约后梯度信息的分片——这被称为Reduce-Scatter阶段。下一个阶段是AllGather,它循环传递这些完全归约后的分片,以便每个GPU最终都得到一份相同的归约后梯度副本。这个阶段也需要 $(N-1)$ 步来完成。

2.3 相关工作

表1从几个关键特性对先前提出的加速分布式训练(特别是数据并行)通信时间的技术进行了高层次的定性比较。该表比较了SkipReduce与先前工作。Communication 指明是发送全部数据(dense)还是部分数据(sparse)。Pattern 指明稀疏模式是否规则(regular),规则模式允许在不转换消息格式的情况下减小消息大小,而不规则(irregular)的稀疏模式则需要使用稀疏消息格式,如坐标(COO)格式。Sparsity 表示稀疏度,即通信过程中跳过的数据比例。我们还比较了每种算法的相关成本或开销。Indexing Overhead 指的是因转换为稀疏消息格式而产生的计算成本。Preprocessing Overhead 是在传输前预处理消息的计算开销,例如在基于top-k的方法【25, Shigang Li and Torsten Hoefler. 2022. Near-Optimal Sparse Allreduce for Distributed Deep Learning.】【30, Yujun Lin, Song Han, Huizi Mao, Yu Wang, and Bill Dally. 2018. Deep Gradient Compression: Reducing the Communication Bandwidth for Distributed Training.】【42, Shaohuai Shi, Qiang Wang, Kaiyong Zhao, Zhenheng Tang, Yuxin Wang, Xiang Huang, and Xiaowen Chu. 2019. A Distributed Synchronous SGD Algorithm with Global Top-k Sparsification for Low Bandwidth Networks.】和PowerSGD【51, Thijs Vogels, Sai Praneeth Karimireddy, and Martin Jaggi. 2019. PowerSGD: practical low-rank gradient compression for distributed optimization.】中的消息压缩,或量化为低精度格式。Reconstruction Overhead 是将接收到的消息恢复到其原始格式的计算成本,例如将稀疏消息转换回密集消息格式(如基于top-k的方法)或将低精度值反量化为更高精度格式(如梯度量化)。最后,Error Accumulation 指明该方法是否需要额外的内存空间用于误差累积,例如在基于top-k的方法中存储未发送的梯度,或在PowerSGD中通过存储计算出的梯度与压缩后梯度之间的差异来实现误差反馈。先前的方法引入了开销,因为它们通常依赖于稀疏、不规则的通信;使用增加了索引、预处理和重构成本的压缩方法;或需要额外的内存来跟踪压缩误差。相比之下,SkipReduce依赖于集合通信库中已经普遍存在的规则通信模式,没有额外的计算或内存开销,使其能够无缝集成到广泛使用的库中。


表 1: 各种集合通信算法的高层次比较。‘+’:好,‘-’:差

梯度压缩方法,如DGC、gTopk、OkTopk,利用了DNN模型中并非所有权重都经历显著更新的观察,导致梯度大部分是稀疏的。因此,为了实现收敛,并不需要通信所有梯度值【6, Tal Ben-Nun and Torsten Hoefler. 2019. Demystifying Parallel and Distributed Deep Learning: An In-Depth Concurrency Analysis.】。这些方法提出仅选择并发送最重要的梯度,以其数值大小作为重要性度量。这通常被称为top-k选择,即只传输数值大小排在前k%的梯度。选定的梯度以坐标(COO)格式发送,该格式将每个值与其对应的索引配对。主要缺点是这种索引方式会使总消息大小加倍【25, Shigang Li and Torsten Hoefler. 2022. Near-Optimal Sparse Allreduce for Distributed Deep Learning.】【38, Cedric Renggli, Saleh Ashkboos, Mehdi Aghagolzadeh, Dan Alistarh, and Torsten Hoefler. 2019. SparCML: High-Performance Sparse Communication for Machine Learning.】【41, Shaohuai Shi, Xiaowen Chu, Ka Chun Cheung, and Simon See. 2019. Understanding Top-k Sparsification in Distributed Deep Learning.】【42, Shaohuai Shi, Qiang Wang, Kaiyong Zhao, Zhenheng Tang, Yuxin Wang, Xiang Huang, and Xiaowen Chu. 2019. A Distributed Synchronous SGD Algorithm with Global Top-k Sparsification for Low Bandwidth Networks.】。这些稀疏化方法的通信时间加速比简单地为 $2k \times$,其中 $k$ 是压缩比,分母中的因子2是考虑了COO格式的开销。转换为COO格式以及从COO格式转换回来分别会产生索引和重构开销。此外,未被选中传输的梯度会与后续迭代的梯度在本地累积,直到其累积的数值大小足以被选中【25, Shigang Li and Torsten Hoefler. 2022. Near-Optimal Sparse Allreduce for Distributed Deep Learning.】【30, Yujun Lin, Song Han, Huizi Mao, Yu Wang, and Bill Dally. 2018. Deep Gradient Compression: Reducing the Communication Bandwidth for Distributed Training.】【46, Sebastian U. Stich, Jean-Baptiste Cordonnier, and Martin Jaggi. 2018. Sparsified SGD with Memory (NIPS’18).】。主要缺点是存储这些残差梯度会产生相当于整个模型大小的内存开销。

先前工作探索了多种方法以最小化选择重要梯度的预处理开销。一种方法是使用静态阈值来选择top-k梯度【47, Nikko Strom. 2015. Scalable distributed DNN training using commodity GPU cloud computing.】。然而,这种方法存在显著误差【11, Nikoli Dryden, Tim Moon, Sam Ade Jacobs, and Brian Van Essen. 2016. Communication Quantization for Data-Parallel Training of Deep Neural Networks.】,因为最优阈值在每次迭代中都会变化【3, Alham Fikri Aji and Kenneth Heafield. 2017. Sparse Communication for Distributed Gradient Descent.】。因此,最近的大多数工作都采用动态阈值进行top-k梯度选择。SparCML提出在每个工作节点本地选择top-k梯度,并执行AllGather操作来同步所有工作节点的梯度【38, Cedric Renggli, Saleh Ashkboos, Mehdi Aghagolzadeh, Dan Alistarh, and Torsten Hoefler. 2019. SparCML: High-Performance Sparse Communication for Machine Learning.】。然而,一个关键挑战是不同工作节点选择的梯度索引常常不同。当这些稀疏消息在通信过程中聚合时,唯一索引的总数——从而消息大小——会增长,削弱了稀疏化的好处。这个问题通常被称为“填充问题”(fill-in issue)。为了缓解这个问题,gTopk提出在每个AllReduce步骤中重新计算top-k梯度,以保持消息大小恒定【42, Shaohuai Shi, Qiang Wang, Kaiyong Zhao, Zhenheng Tang, Yuxin Wang, Xiang Huang, and Xiaowen Chu. 2019. A Distributed Synchronous SGD Algorithm with Global Top-k Sparsification for Low Bandwidth Networks.】,但这会带来很高的计算开销。OkTopk提出执行额外的AllReduce操作,以确保各工作节点间的本地top-k梯度值数量大致相同,从而平衡通信负载【25, Shigang Li and Torsten Hoefler. 2022. Near-Optimal Sparse Allreduce for Distributed Deep Learning.】。

低秩近似是另一种梯度压缩方法。一个显著的例子是PowerSGD,它使用幂迭代法【51, Thijs Vogels, Sai Praneeth Karimireddy, and Martin Jaggi. 2019. PowerSGD: practical low-rank gradient compression for distributed optimization.】。它不发送完整的梯度,而是只通信其近似值,这个近似值要小得多,从而减少了消息大小。接收方随后使用接收到的低秩张量重构完整的梯度张量。其主要优点是避免了不规则的通信模式,使其与现有的集合通信库兼容。然而,这种方法引入了创建低秩近似的计算开销,并需要额外的内存开销用于误差累积。

梯度量化是一种通过使用较低精度数值格式表示梯度来减少通信开销的方法【3, Alham Fikri Aji and Kenneth Heafield. 2017. Sparse Communication for Distributed Gradient Descent.】【38, Cedric Renggli, Saleh Ashkboos, Mehdi Aghagolzadeh, Dan Alistarh, and Torsten Hoefler. 2019. SparCML: High-Performance Sparse Communication for Machine Learning.】。相对于像FP32这样的32位表示,这种方法提供了理论上 $32/bw \times$ 的加速,其中 $bw$ 是量化格式的位宽。先前的工作尝试用更少的比特表示梯度,同时显示出最小的精度损失。Gupta等人【17, Suyog Gupta, Ankur Agrawal, Kailash Gopalakrishnan, and Pritish Narayanan. 2015. Deep learning with limited numerical precision.】证明,使用16位宽表示进行训练对图像分类精度的影响可以忽略不计。Aji等人【3, Alham Fikri Aji and Kenneth Heafield. 2017. Sparse Communication for Distributed Gradient Descent.】观察到在MNIST【24, Yann LeCun, Léon Bottou, Yoshua Bengio, and Patrick Haffner. 1998. Gradientbased learning applied to document recognition.】数据集上使用2位表示可以获得足够的训练精度。1位表示也曾被考虑过【40, Frank Seide, Hao Fu, Jasha Droppo, Gang Li, and Dong Yu. 2014. 1-Bit Stochastic Gradient Descent and Application to Data-Parallel Distributed Training of Speech DNNs.】【47, Nikko Strom. 2015. Scalable distributed DNN training using commodity GPU cloud computing.】,并且低精度SGD的收敛保证也得到了探索【4, Dan Alistarh, Demjan Grubic, Jerry Li, Ryota Tomioka, and Milan Vojnovic. 2017. QSGD: Communication-Efficient SGD via Gradient Quantization and Encoding.】【39, Christopher De Sa, Ce Zhang, Kunle Olukotun, and Christopher Ré. 2015. Taming the wild: a unified analysis of HOG WILD! -style algorithms.】。值得注意的是,梯度量化是一种与梯度稀疏化和压缩方法以及SkipReduce正交的方法。

先前的工作提出了网络内计算(in-network computation)【15, Richard L. Graham, et al. 2016. Scalable Hierarchical Aggregation Protocol (SHArP).】【18, Jiayi Huang, et al. 2021. Communication Algorithm-Architecture Co-Design for Distributed Deep Learning.】【20, Benjamin Klenk, et al. 2020. An In-Network Architecture for Accelerating Shared-Memory Multiprocessor Collectives.】【26, Youjie Li, et al. 2019. Accelerating Distributed Reinforcement learning with In-Switch Computing.】【27, Youjie Li, et al. 2018. A Network-Centric Hardware/Algorithm Co-Design to Accelerate Distributed Training of Deep Neural Networks.】【36, Saeed Rashidi, et al. 2021. Enabling compute-communication overlap in distributed deep learning training platforms.】,通过将计算卸载到网络中来加速通信。也提出了基于软件的方法来加速集合通信,例如新颖的逻辑拓扑【18, Jiayi Huang, et al. 2021. Communication Algorithm-Architecture Co-Design for Distributed Deep Learning.】【23, Sabuj Laskar, et al. 2024. Enhancing Collective Communication in MCM Accelerators for Deep Learning Training.】【28, Dongkyun Lim and John Kim. 2025. TidalMesh: Topology-Driven AllReduce Collective Communication for Mesh Topology.】、逻辑拓扑合成器【55, William Won, et al. 2024. TACOS: Topology-Aware Collective Algorithm Synthesizer for Distributed Machine Learning.】和集合通信调度器【37, Saeed Rashidi, et al. 2022. Themis: a network bandwidth-aware collective scheduling policy for distributed training of DL models.】。分布式数据并行训练对梯度丢弃的容忍性也被利用来减少有损网络传输上的集合通信尾延迟,如MLT【52, Hao Wang, et al. 2024. Towards DomainSpecific Network Transport for Distributed DNN Training.】和OptiReduce【53, Ertza Warraich, et al. 2025. OptiReduce: Resilient and Tail-Optimal AllReduce for Distributed Deep Learning in the Cloud.】所证明。这些工作与SkipReduce是正交的,可以一起使用来加速通信。

3 动机

SkipReduce的动机源于观察到分布式训练中通信的梯度通常是稀疏的。虽然先前的工作也利用了这一观察,但它们通常依赖于对梯度进行排序和压缩。然而,我们展示了随着信道带宽的增加,这类方法的计算开销可能会变得非常显著。相比之下,本文提出的SkipReduce没有这样的计算开销,并且由于其简单性,可以轻松地在集合通信库中实现。本文提出利用网络稀疏性,通过在AllReduce中跳过一些通信步骤来提高通信性能,有效地以“批次”方式丢弃梯度——从而减少通信时间。跳过梯度本质上等同于假设它们为零,由于梯度是稀疏的,将它们视为零是一个合理的估计。


图 2: VGG-19在CIFAR-100数据集上训练时,三个代表性阶段的梯度值分布。

先前工作显示,在数据并行训练中通信的梯度通常紧密分布在零附近或稀疏【3, Alham Fikri Aji and Kenneth Heafield. 2017. Sparse Communication for Distributed Gradient Descent.】【11, Nikoli Dryden, Tim Moon, Sam Ade Jacobs, and Brian Van Essen. 2016. Communication Quantization for Data-Parallel Training of Deep Neural Networks.】【25, Shigang Li and Torsten Hoefler. 2022. Near-Optimal Sparse Allreduce for Distributed Deep Learning.】【38, Cedric Renggli, Saleh Ashkboos, Mehdi Aghagolzadeh, Dan Alistarh, and Torsten Hoefler. 2019. SparCML: High-Performance Sparse Communication for Machine Learning.】【42, Shaohuai Shi, Qiang Wang, Kaiyong Zhao, Zhenheng Tang, Yuxin Wang, Xiang Huang, and Xiaowen Chu. 2019. A Distributed Synchronous SGD Algorithm with Global Top-k Sparsification for Low Bandwidth Networks.】【47, Nikko Strom. 2015. Scalable distributed DNN training using commodity GPU cloud computing.】。图2显示了VGG-19训练过程中梯度随时间变化的分布。梯度分布在不同训练阶段有所不同——随着训练的进行,稀疏度降低,如图2b中更宽的分布所示,表明更大范围的权重正在被更新。然而,随着模型收敛,梯度变得越来越稀疏,如图2c所示,反映了对权重的更新减少。总的来说,虽然梯度分布在不同训练阶段有所变化,但在整个训练过程中,梯度始终以零为中心,这表明数据并行训练本质上表现出高的互连网络稀疏性。

尽管先前工作在通信时间上显示了显著的加速,但其优势通常在带宽受限的系统上进行评估(约1 GBps或更低的带宽【25, Shigang Li and Torsten Hoefler. 2022. Near-Optimal Sparse Allreduce for Distributed Deep Learning.】【29, Hwijoon Lim, et al. 2024. Accelerating Model Training in Multi-cluster Environments with Consumer-grade GPUs.】【30, Yujun Lin, Song Han, Huizi Mao, Yu Wang, and Bill Dally. 2018. Deep Gradient Compression: Reducing the Communication Bandwidth for Distributed Training.】【38, Cedric Renggli, Saleh Ashkboos, Mehdi Aghagolzadeh, Dan Alistarh, and Torsten Hoefler. 2019. SparCML: High-Performance Sparse Communication for Machine Learning.】【42, Shaohuai Shi, Qiang Wang, Kaiyong Zhao, Zhenheng Tang, Yuxin Wang, Xiang Huang, and Xiaowen Chu. 2019. A Distributed Synchronous SGD Algorithm with Global Top-k Sparsification for Low Bandwidth Networks.】【51, Thijs Vogels, Sai Praneeth Karimireddy, and Martin Jaggi. 2019. PowerSGD: practical low-rank gradient compression for distributed optimization.】)。然而,这些方法在更高带宽的系统上会产生显著的计算开销,从而削弱了它们的优势。图3提供了在配备8个A40 GPU的系统上,不同信道带宽下,使用各种集合通信进行VGG-19【44, Karen Simonyan and Andrew Zisserman. 2015. Very Deep Convolutional Networks for Large-Scale Image Recognition.】训练的迭代时间分解。我们将有和没有通信计算重叠的AllReduce进行比较,分别表示为Overlap和No Overlap。对于所有其他集合通信,重叠总是启用的。为了调整带宽,我们配置了NCCL_P2P_DISABLE环境变量。禁用点对点(或GPU到GPU)通信会强制数据通过主机CPU,将带宽降低到约5 GBps。当启用点对点通信时,可以实现高达16 GBps的带宽。这个值低于A40 GPU支持的PCIe 4.0的理论最大值,因为CPU插槽之间的互连成为性能瓶颈。在较低带宽下,训练时间由通信时间主导,通信时间的节省显著超过计算开销,使得基于压缩或近似的方法能够实现显著的加速。然而,随着带宽的增加,通信时间减少,而计算开销保持不变。最终,执行压缩或近似的成本主导了通信时间,削弱了这些技术的优势,如图3b所示。


图 3: 在8-GPU系统上,不同信道带宽下,各种集合通信的VGG-19迭代时间分解。迭代时间相对于相应信道带宽下的AllReduce(无重叠)进行了归一化。

为了进一步说明先前工作在更高带宽系统上的局限性,图4展示了传输信息比例与通信时间加速比之间的权衡。理想情况下,通信应该既快速又信息损失最小,对应于图的右上区域。先前的工作要么压缩要么近似梯度,以积极减少消息大小,传输一小部分信息以在低带宽下实现大幅加速。然而,在更高带宽下,这些方法遭受同样程度的信息损失,同时提供的加速效果减弱,因为它们的计算开销变得更加突出。相比之下,尽管SkipReduce在较低带宽下提供的加速相对较少,但在更高带宽下,它实现了与先前工作相当的加速,而信息损失显著减少。这一优势在第5.2节中提出的达到目标精度时间评估中得到了进一步验证。


图 4: 在不同信道带宽下,LLaMA-3.2 1B训练中性能(即迭代时间)与通信信息量之间的权衡。启用了通信-计算重叠。PowerSGD和理想的top-k传输的信息非常少(接近0%),在低带宽下(a)实现了高加速比,但在更高带宽下由于计算开销(b),加速比降低。


A2 方法细节

4 SkipReduce 集合通信

利用梯度稀疏的观察,我们探索了如何通过跳过梯度来减少训练时间,并提出了SkipReduce集合通信。与之前的工作不同,SkipReduce没有引入计算开销(索引、预处理和重构开销),并且可以轻松地集成到现有的集合通信库中。

4.1 预备知识

在本文中,我们区分了梯度的跳过(skipping)丢弃(dropping)。跳过梯度指的是梯度的值被忽略并有效地用零替换。相比之下,丢弃梯度指的是梯度本身被完全从操作中移除。对于求和操作,与跳过没有区别,但对于平均操作,丢弃会改变除数,导致不同的结果。此外,我们区分了细粒度(fine-grained)粗粒度(coarse-grained)的跳过或丢弃。细粒度指的是集合通信中每个单独的梯度被跳过(或丢弃)。对于粗粒度实现,梯度在分片级别(slice-level)上被粗略地跳过(或丢弃)。我们首先总结本文中介绍的AllReduce和SkipReduce集合通信的不同变体。
* AllReduce_Dropout:细粒度地跳过单个梯度。单个梯度被随机跳过。
* SkipReduce:粗粒度地梯度跳过,其中AllReduce的某些步骤被跳过,梯度被有效地替换为零。
* DropReduce:粗粒度地梯度丢弃,其中AllReduce的某些步骤被跳过,通过调整除数(对于平均操作)完全移除梯度。

4.2 SkipReduce 算法

算法1展示了带有细粒度跳过的AllReduce概述,这是一种类似于Dropout【45, Nitish Srivastava, et al. 2014. Dropout: A Simple Way to Prevent Neural Networks from Overfitting.】但应用于梯度的方法,我们称之为AllReduce_Dropout。该算法基于传统的环形AllReduce,唯一的区别是在归约核(reduction kernel)中引入了梯度跳过概率(第14行)——以确定梯度应该被使用还是“跳过”。对于分片中的每个元素,根据伯努利过程随机决定是归约还是跳过本地梯度(第3行)。如果一个梯度被跳过,当前GPU只是简单地转发它从前一个GPU收到的梯度,而不加上本地梯度(第4行)。这等同于在该特定操作中将本地梯度视为零。如果梯度没有被跳过,当前GPU会将其自己的本地梯度与从前一个GPU收到的梯度进行归约,并将结果转发给下一个GPU(第6行)。这种行为等同于NCCL中的默认归约核。

Algorithm 1 AllReduce with Fine-Grained Skipping

N : number of workers (e.g., GPUs)
x : tensor of local gradients, divided into slices
p: gradient skipping probability
1: function ReduceOrSkip(x, y, p, op):
2:   for each index i in x do
3:     if random_float in [0.0, 1.0] < p then
4:       x[i] = y[i]
5:     else
6:       x[i]= op(x[i], y[i])
7:   return x
8: function AllReduce_Dropout(op):
9:   for s = 0 to (N − 2) do // (N-1) Reduce-Scatter steps
10:    slice_to_send = (rank − s)%N
11:    slice_to_recv = (rank − s − 1)%N
12:    Send(x[slice_to_send], rank + 1)
13:    y_received = Receive(rank − 1)
14:    x[slice_to_recv] = ReduceOrSkip(x[slice_to_recv], y_received, p, op)
15:  AllGather() // same as baseline AllReduce

然而,细粒度跳过(AllReduce_Dropout)并不能减少消息大小或GPU之间传输的数据量,而只是减少了每条消息携带的信息内容。例如,在不跳过的情况下,一个数据包包含来自所有 $(N-1)$ 个先前GPU的归约结果。相反,在跳过的情况下,一个数据包只包含来自 $(N-2)$ 个或更少GPU的结果,但消息大小保持不变。另一方面,SkipReduce利用了NCCL以分片(slices)方式通信梯度的事实(第2.2节)。通过跳过AllReduce的步骤,它有效地跳过了梯度“分片”,而不是单个梯度,从而减少了通信时间。图5提供了一个SkipReduce的例子,通过从Reduce-Scatter阶段跳过一个步骤,每个GPU的一个完整梯度分片被从最终的归约中跳过。这直接缩短了集合操作的持续时间。理论上,跳过k个Reduce-Scatter步骤可以将通信时间减少 $k/2(N-1)$ 的比例,同时跳过相应的 $k/N$ 比例的梯度。


图 5: 提议的SkipReduce,其中Reduce-Scatter阶段的一个步骤被跳过。带有对角条纹的分片表示在Reduce-Scatter阶段被有效“丢弃”的梯度,并且在AllReduce集合通信中不被使用。AllGather的进行方式与基准AllReduce相同。

SkipReduce算法的概述在算法2中提供。SkipReduce的实现方式是减少Reduce-Scatter循环的迭代次数。如果k是要跳过的Reduce-Scatter步骤数,则Reduce-Scatter阶段在 $(N-1-k)$ 步内完成(第2行),而AllGather阶段未作修改,在 $(N-1)$ 步内完成(第8行)。正如我们稍后在第5.2节中展示的,AllGather中的步骤也可以被跳过,但会导致更高的精度损失。由于SkipReduce只跳过分片(粗粒度),ReduceOrSkip函数的细粒度梯度跳过概率(p)被设置为零(第7行),因为这只在细粒度跳过时需要。

1: function SkipReduce(k, op): // k: # of Reduce-Scatter steps to skip
2:   for s = k to (N − 2) do // Skip k Reduce-Scatter steps
3:     slice_to_send = (rank − s)%N
4:     slice_to_recv = (rank − s − 1)%N
5:     Send(x[slice_to_send], rank + 1)
6:     y_received = Receive(rank − 1)
7:     x[slice_to_recv] = ReduceOrSkip(x[slice_to_recv], y_received, 0, op)
8:   AllGather() // same as baseline AllReduce

4.3 随机 SkipReduce

如前所述,SkipReduce通过跳过AllReduce内部的步骤(例如,Reduce-Scatter步骤)来减少通信时间,在此过程中以分片级别粒度跳过数据。然而,SkipReduce的朴素实现(第4.2节)是确定性的,例如,每个GPU在每次迭代中都跳过相同的分片。这会导致不公平(或偏见),因为相同的特定分片无法对集合通信结果做出贡献。为了让每个GPU在每次迭代中跳过不同的分片,可以将分片索引(算法2,第3和第4行)通过一个每轮迭代重新生成的随机偏移量进行移位。我们称之为随机SkipReduce (Random SkipReduce),以区别于第4.2节中的静态SkipReduce (Static SkipReduce)。这确保了被跳过的分片在不同迭代中是变化的,促进了被跳过梯度分片的随机性。一个关键的挑战是所有GPU必须生成相同的随机数,以确保每个GPU都有一个唯一的索引。我们通过修改NCCL,将当前迭代计数从主机传递给所有GPU,从而在没有额外同步的情况下实现了这一点。这个迭代计数作为一个共同的种子,确保每个GPU上的随机数生成器是同步的。图6展示了一个例子,其中移动分片索引改变了在给定训练迭代结束时被跳过的分片。当没有应用移动时,被跳过的分片与图5中所示的例子完全相同。


图 6: (a) 基准SkipReduce中被跳过的分片(由对角条纹显示),(b) 分片索引被移动一个rank,以及(c) 被移动两个rank。

图7比较了在VGG-19训练中使用Static和Random SkipReduce进行集合通信时的训练精度。AllReduce_Dropout以元素级粒度跳过梯度,因此没有通信时间减少。随着跳过比例的增加,Random SkipReduce比Static SkipReduce获得了更高的精度,在75%的跳过率下,Random SkipReduce将测试精度提高了19个百分点。在所有比率下,Random SkipReduce都达到了与AllReduce_Dropout相当的测试精度。为了解随机化分片索引的性能开销,图8比较了Random SkipReduce与Static SkipReduce的综合、仅集合通信的性能。Static SkipReduce的性能非常接近理论加速比 $2(N-1) / (2(N-1)-k)$,其中N是节点数,k是跳过的Reduce-Scatter步骤数。相比之下,Random SkipReduce实现的加速比几乎与其静态对应方案相同,性能(即通信时间)开销仅高达1.1%。这表明,可以以可忽略的开销实现随机化,从而提高模型精度。


图 7: 使用AllReduce_Dropout、Static SkipReduce和Random SkipReduce的VGG-19训练和测试精度。精度相对于不跳过梯度的基准AllReduce进行了归一化。


图 8: 使用nccl-test和1GB消息大小的AllReduce,Static和Random SkipReduce在不同梯度跳过率下的加速比,相对于AllReduce(不跳过梯度)。

4.4 选择性 SkipReduce

梯度的大小通常被用作其“重要性”的代理【5, Dan Alistarh, et al. 2018. The Convergence of Sparsified Gradient Methods.】。例如,top-k稀疏化技术以元素级方式保留最大的top-k梯度,已被证明优于基于随机的方法【46, Sebastian U. Stich, Jean-Baptiste Cordonnier, and Martin Jaggi. 2018. Sparsified SGD with Memory (NIPS’18).】。在本节中,我们将这一原则应用于SkipReduce,但采用更粗糙的层级粒度,而不是元素级粒度。这使得SkipReduce能够选择性地跳过梯度以保持模型精度。

图9显示了VGG-19每一层的层大小(参数数量),以及重要梯度在整个模型中的分布。重要梯度被定义为在第一个epoch结束时采样,其大小在全球排名前25%的梯度。该图揭示了梯度稀疏性在模型各层中是不均匀的,表现为某些层中大数值梯度的集中。由于梯度的大小与其重要性相关,具有高浓度大数值梯度的层可以被认为更重要,因此对跳过更敏感。相反,具有较少重要梯度的层不太敏感,是跳过的更好候选者。此外,我们观察到重要层的尺寸可能远小于非重要层。这为通过跳过大的、非重要的层,同时保护小的、关键的层来维持训练精度,从而实现显著的通信加速提供了关键机会。虽然理解为什么某些层具有相对更高的重要性可能需要严谨的理论理解,并且超出了本工作的范围,但某些层的重要性可以是直观的。例如,我们可以预期VGG-19中的第一个卷积层和transformers中的嵌入层对跳过更敏感,因为它们启动了输入到网络潜在空间的投影。


图 9: VGG-19每一层的层大小(参数数量)和重要梯度的集中度。一个重要梯度被定义为按大小在全球排名前25%的梯度。

为了进一步证明网络不同层对跳过的敏感性差异,图10展示了当我们保护(不跳过)模型中的某些层时的测试精度。跳过梯度的比例是通过将受保护层相对于整个模型大小的比例乘以一个固定的50%跳过率来计算的。理想情况下,我们希望尽可能多地跳过梯度以实现通信加速,同时保持模型精度。因此,散点图中越靠近右上角的数据点越理想。图10a提供了一个例子,说明了保护不那么重要的层的好处减少了,保护更多的梯度并不能简单地带来更高的精度。通过保护重要的卷积层,其参数数量仅占总模型大小的4%,我们能够达到甚至比AllReduce(不跳过梯度)提高0.23个百分点的精度。然而,如果转而保护全连接层,即使保护了剩余的96%的梯度,精度也会下降5个百分点。在BERT-Large中也观察到了类似的趋势,如图10b所示。保护重要的层(即嵌入层)导致了精度的显著提高。这一观察促使我们设计SkipReduce来通过保护(不跳过)重要的层来选择性地跳过梯度。


图 10: (a) VGG-19和 (b) BERT-Large 在跳过模型不同部分(或层)时,跳过梯度比例与测试精度之间的权衡。SkipReduce表示在所有层上都进行跳过,而SkipReduce()表示只跳过括号中指定的层。随着目标层的不同,跳过梯度的比例也不同。

为了在SkipReduce中实现选择性梯度跳过,我们利用了梯度不是一次性全部通信,而是被分成多个桶(buckets)这一事实。这种设计,即每个桶由一个单独的AllReduce核函数启动处理,允许通信与计算重叠。通过利用这种结构,我们可以对不同的桶应用不同的跳过率——对与非重要层关联的桶中的梯度进行积极跳过,同时保留包含重要层的桶中的梯度。在本文的其余部分,除非另有说明,SkipReduce均指选择性SkipReduce(Selective SkipReduce)——非重要层的梯度被随机跳过,如Random SkipReduce中那样。


A4 实验环境

实验方法论基于在NCCL 2.25.1版本【1, Nvidia Collective Communication Library (NCCL). 2023.】内实现的SkipReduce。利用cuRAND库【2, Nvidia CUDA Random Number Generation (cuRAND) library. 2023.】生成实现Random SkipReduce所需的随机数。然后将PyTorch【33, Adam Paszke, et al. 2019. PyTorch: An Imperative Style, High-Performance Deep Learning Library.】链接到修改后的NCCL以进行训练。NCCL配置为使用Ring AllReduce算法。


表 2: 评估的模型及其训练数据集。


A4 实验结果

我们对不同模型上的各种集合通信方法进行了五次具有不同随机种子的“达到目标精度的时间”(TTA)测量。图11展示了SkipReduce相对于基准AllReduce表现出中位数加速比的运行情况。图12的点图展示了所有运行中TTA加速比的分布情况。对于图12a的结果,我们将top-k配置为选择5%的梯度(从1%上调),以牺牲迭代时间为代价来达到目标精度。在所有工作负载和运行中,SkipReduce的表现都优于基准AllReduce和先前的工作。


图 11: (a) VGG-19, (b) BERT-Large, 和 (c) LLaMA-3.2 1B 的各种集合通信的达到目标精度时间。红色的水平虚线表示每个模型的目标精度。


图 12: 各种集合通信相对于基准AllReduce的达到目标精度时间加速比,进行了五次运行。每个标记对应一次运行。

有趣的是,SkipReduce并不总能比理想top-k和PowerSGD产生更快的迭代时间。例如,在LLaMA-3.2上,如图13所示,SkipReduce的迭代时间比PowerSGD慢6%。尽管如此,SkipReduce在五次运行中相对于PowerSGD平均实现了16%的TTA加速。这是因为SkipReduce不需要激进的稀疏化或压缩,因此在实现与PowerSGD相当的迭代时间的同时,保留了大量的信息,这突显了先前工作在更高带宽设置下的局限性,正如第3节所讨论的。


图 13: LLaMA-3.2 1B各种集合通信的迭代时间分解。迭代时间相对于AllReduce(无重叠)进行了归一化。

另一个设计考虑是将SkipReduce扩展到也跳过AllGather步骤,因为当前实现仅通过针对Reduce-Scatter阶段来减少通信时间。虽然通过跳过AllGather步骤可以进一步缩短通信时间,但与跳过Reduce-Scatter步骤相比,跳过AllGather步骤的性能权衡更为显著。图14显示了当在Reduce-Scatter阶段跳过50%的梯度时,与在Reduce-Scatter和AllGather阶段各跳过25%的梯度时SkipReduce的性能。由于跳过的总步数相同,两种方案实现了相似的通信加速。然而,跳过AllGather步骤显著减慢了收敛速度,并将最终的训练和测试精度分别降低了1.95和1.3个百分点。跳过AllGather步骤的代价更高,因为被跳过的梯度携带了来自所有其他GPU的归约信息。因此,跳过AllGather步骤相对于Reduce-Scatter导致了更高的信息损失。此外,跳过AllGather阶段会导致每个GPU上的模型副本发散,违反了数据并行训练的同步要求。因此,在我们的评估中,我们仅使用副本的一个样本来测量精度。


图 14: VGG-19训练和测试精度,当SkipReduce跳过50%的Reduce-Scatter (RS)步骤时,与跳过25%的RS和AllGather (AG)步骤时的比较。

在数据并行训练中,模型权重使用所有GPU上局部梯度的平均值进行更新。对于SkipReduce,被跳过的梯度被有效地替换为零值,因为SkipReduce将梯度除以GPU的数量(N),无论跳过了多少步。然而,另一种设计是,将这个除数调整为剩余的Reduce-Scatter步骤数($N-k$),从而有效地移除这些梯度。我们称之为DropReduce(第4.1节),并将其与SkipReduce在图15中进行比较。然而,我们没有观察到任何好处,实际上还看到了性能下降。一种解释是,通过完全移除梯度,剩余梯度的贡献被放大了,可能产生偏见。此外,如前所示,梯度通常具有接近0的分布——因此,用零替换被跳过的梯度是一个合理的近似。一个悬而未决的问题是,用其他非零值替代被跳过的梯度是否能帮助提高精度。


图 15: VGG-19使用SkipReduce和DropReduce的训练和测试精度。


A7 补充细节

6 讨论

在本节中,我们对SkipReduce的不同实现进行了额外分析,包括其在其他逻辑拓扑上的应用、在其他并行类型中的使用,以及其作为一种正则化形式的好处。

6.1 替代逻辑拓扑

在本文中,我们重点关注基于环形的AllReduce算法,其中通信模式(或逻辑拓扑【8, Sanghun Cho, Hyojun Son, and John Kim. 2023. Logical/Physical Topology-Aware Collective Communication in Deep Learning Training.】)是一个环,因为它常用且已被证明是带宽最优的【34, Pitch Patarasuk and Xin Yuan. 2009. Bandwidth optimal all-reduce algorithms for clusters of workstations.】。然而,SkipReduce也可以应用于其他逻辑拓扑,每种拓扑具有不同的扩展属性。每种逻辑拓扑在跳过的梯度量(影响训练精度)和节省的通信时间之间提供了不同的平衡。图16展示了在256个节点上对各种逻辑拓扑进行SkipReduce的分析评估。对于环形和减半-加倍(halving-doubling)拓扑,通信时间加速比和跳过梯度的比例以类似的方式扩展——环形为线性,减半-加倍为对数。这意味着随着更多通信步骤被跳过,训练速度和精度损失之间的权衡保持一致。相比之下,在逻辑树拓扑上,这两个指标的扩展属性存在不匹配。对于树形拓扑,跳过梯度的比例呈对数扩展,而通信时间加速比大致呈线性扩展。这表明对于树形拓扑,跳过最初的几个步骤只会带来很小的加速,但精度代价很高。然而,随着更多通信步骤被跳过,这种权衡变得越来越有利。


图 16: 在256个节点的各种AllReduce逻辑拓扑中,每跳过一个Reduce-Scatter步骤所跳过的梯度比例和实现的通信时间加速比。

6.2 训练收敛性

先前的工作【5, Dan Alistarh, et al. 2018. The Convergence of Sparsified Gradient Methods.】【46, Sebastian U. Stich, Jean-Baptiste Cordonnier, and Martin Jaggi. 2018. Sparsified SGD with Memory (NIPS’18).】已经为带有梯度压缩算子的随机梯度下降(SGD)提供了收敛保证。给定总梯度大小为D,压缩算子将梯度大小压缩到d,其中 $0 < d \leq D$。SkipReduce本质上是一个随机梯度压缩器,其收敛性也已得到证明【46, Sebastian U. Stich, Jean-Baptiste Cordonnier, and Martin Jaggi. 2018. Sparsified SGD with Memory (NIPS’18).】。然而,SkipReduce与先前工作【3, Alham Fikri Aji and Kenneth Heafield. 2017. Sparse Communication for Distributed Gradient Descent.】【25, Shigang Li and Torsten Hoefler. 2022. Near-Optimal Sparse Allreduce for Distributed Deep Learning.】【30, Yujun Lin, Song Han, Huizi Mao, Yu Wang, and Bill Dally. 2018. Deep Gradient Compression: Reducing the Communication Bandwidth for Distributed Training.】【38, Cedric Renggli, Saleh Ashkboos, Mehdi Aghagolzadeh, Dan Alistarh, and Torsten Hoefler. 2019. SparCML: High-Performance Sparse Communication for Machine Learning.】【41, Shaohuai Shi, Xiaowen Chu, Ka Chun Cheung, and Simon See. 2019. Understanding Top-k Sparsification in Distributed Deep Learning.】【42, Shaohuai Shi, Qiang Wang, Kaiyong Zhao, Zhenheng Tang, Yuxin Wang, Xiang Huang, and Xiaowen Chu. 2019. A Distributed Synchronous SGD Algorithm with Global Top-k Sparsification for Low Bandwidth Networks.】之间的一个重要区别是,这些先前的方法使用额外的内存空间来累积在当前迭代中被跳过的梯度,以便可能在后续迭代中发送,而SkipReduce会“忘记”所有被跳过的梯度。没有梯度累积,一个随机梯度压缩器理论上最坏情况下需要 $D/d$ 倍的迭代次数才能达到与基准SGD或其他支持梯度累积的梯度压缩方案相同的模型质量【46, Sebastian U. Stich, Jean-Baptiste Cordonnier, and Martin Jaggi. 2018. Sparsified SGD with Memory (NIPS’18).】。然而,我们的实证结果表明,在某些DNN模型上,SkipReduce可以在相同训练轮数下达到甚至超过基准AllReduce的精度。这里的直觉是,由于SkipReduce不仅仅是随机跳过梯度,而是选择性地跳过,它跳过的梯度通常接近0。因此,只要跳过或丢弃的比例(k)合理地小,跳过它们对训练质量的影响是最小的。

6.3 分片数据并行(Sharded Data Parallel, SDP)

虽然数据并行(DP)训练加速了分布式训练,但其可扩展性受限于能够装入单个GPU的模型,因为它需要在多个GPU上复制模型。为了克服这个限制,分片数据并行(SDP)【35, Samyam Rajbhandari, et al. 2020. ZeRO: Memory Optimizations Toward Training Trillion Parameter Models.】【57, Yanli Zhao, et al. 2023. PyTorch FSDP: Experiences on Scaling Fully Sharded Data Parallel.】不仅对输入数据进行分区,还对模型参数、优化器状态和梯度在GPU之间进行分片。这导致了内存使用的减少,并使得训练更大的模型成为可能【35, Samyam Rajbhandari, et al. 2020. ZeRO: Memory Optimizations Toward Training Trillion Parameter Models.】【57, Yanli Zhao, et al. 2023. PyTorch FSDP: Experiences on Scaling Fully Sharded Data Parallel.】。图17展示了一个假设的3层网络上SDP训练的高层次概述,详细说明了三层计算和通信的顺序。


图 17: 分片数据并行训练中的通信。对于层i,Fi/Bi:前向/后向计算,AGi:模型权重的AllGather,RSi:梯度的Reduce-Scatter。

每个GPU被分配一个模型分片。在前向传播过程中,需要一个AllGather ($AG_i$) 操作来在计算层 $i$ 的激活之前收集参数。计算后,这些收集到的分片被丢弃以节省内存。反向传播过程遵循类似的模式。首先,执行一个AllGather来收集梯度计算所需的参数。随后是一个Reduce-Scatter ($RS_i$) 操作,其中每个GPU接收其分配的分片的最终归约梯度。


图 18: 在8-GPU系统中,数据并行(DP)和分片数据并行(SDP)训练下,不同模型大小的LLaMA-3训练的通信开销。OOM:内存不足错误。

SDP给SkipReduce带来了新的挑战和机遇。它以更高的通信开销换取了减少的内存使用,导致了更高比例的暴露通信(图18)。此外,通信模式不一定是AllReduce,因为AllGather和Reduce-Scatter操作是在不同的数据(权重和梯度)上执行的。单独加速Reduce-Scatter或AllGather通信是直接的——SkipReduce可以像在DP中实现SkipReduce一样应用(图5)。然而,同时加速Reduce-Scatter和AllGather通信需要一个关键的修改。为了最小化信息损失,SkipReduce必须确保被跳过的梯度与在AllGather阶段被省略的权重精确对应。这种对齐通过专门为积极参与训练的权重收集梯度来最小化信息损失,并通过在与AllGather相反的方向上运行Reduce-Scatter来实现。然而,默认情况下,NCCL在每个逻辑环上以相同的方向执行基于环的集合操作。因此,我们修改了NCCL,在Reduce-Scatter期间反转发送方-接收方对,使得两个操作能够在同一个逻辑环上以相反的方向运行。

当在SDP中跳过一个AllGather步骤时,每个GPU有效地丢弃了与缺失参数分片相关的连接,假设其权重为零。因此,每个GPU训练一个独特的子网络,在整个系统中创造了一种集成效应。请注意,在传统的(DP)训练中,每个GPU都持有一个完整的、相同的模型副本。在DP中,跳过AllGather步骤会损害模型的一致性,因为每个GPU将接收到不同的归约分片,导致GPU之间的模型副本发散。然而,这个问题在SDP中不会出现,因为每个GPU只维护其分配的模型分片,而不是一个完整的副本。这种区别在推理时变得至关重要。在SDP中,通过简单地收集分片就可以重构完整的模型。然而,在DP中,跳过AllGather步骤会导致多个不同的最终模型,使得不清楚应该使用哪个版本进行推理。

图19显示了在训练LLaMA 3.2模型时,在PyTorch FSDP【57, Yanli Zhao, et al. 2023. PyTorch FSDP: Experiences on Scaling Fully Sharded Data Parallel.】中实现的SkipReduce的测试精度与端到端加速比之间的权衡。仅对使用Reduce-Scatter通信的梯度应用SkipReduce可产生9%的加速,而将SkipReduce扩展到也跳过在AllGather中通信的权重可将加速比提高到22%,代价是精度略有下降。在我们的评估中,我们配置SkipReduce跳过50%的权重和梯度。然而,考虑到模型参数的关键性,对SkipReduce的一个有趣修改是需要对模型进行预热,即最初在应用SkipReduce之前的一段时间内使用基准AllGather(不跳过任何步骤)。这确保了训练能够收敛并且精度损失最小化。有趣的是,仅跳过AllGather通信阶段导致了最低的精度。这表明,保留那些在迭代中没有贡献的权重(因为在AllGather中被跳过)的梯度,可能比简单地忽略它们对模型的性能更有害。


图 19: 使用分片数据并行训练的LLaMA 3.2 1B的性能(即迭代时间)加速与精度之间的权衡。SkipReduce(RS)和SkipReduce(AG)分别表示SkipReduce仅在Reduce-Scatter或AllGather通信中实现。

6.4 对正则化的影响

Dropout【45, Nitish Srivastava, et al. 2014. Dropout: A Simple Way to Prevent Neural Networks from Overfitting.】通过丢弃中间激活值来正则化模型,有效地在每次迭代中创建一个不同的子网络。另一方面,SkipReduce不修改网络连接,而是在权重更新期间通过跳过或置零一部分梯度来引入噪声,这是一种类似于【49, Hung-Yu Tseng, et al. 2020. Regularizing Meta-Learning via Gradient Dropout.】的方法。与Dropout相比,SkipReduce在更粗的粒度上操作以减少通信时间。先前的工作【13, Golnaz Ghiasi, Tsung-Yi Lin, and Quoc V. Le. 2018. DropBlock: a regularization method for convolutional networks.】【22, Gustav Larsson, Michael Maire, and Gregory Shakhnarovich. 2017. FractalNet: Ultra-Deep Neural Networks without Residuals.】考虑了粗粒度的Dropout,但主要关注模型性能。

SkipReduce的正则化好处在图10中得到了展示,其中,通过保护敏感层并选择性地跳过梯度,SkipReduce实现了比基准AllReduce更高的测试精度,即使在跳过梯度以加速通信的情况下也是如此。图20进一步比较了Dropout提供的正则化好处与SkipReduce固有的正则化效果。SkipReduce的跳过率被配置为与VGG中使用的Dropout率相匹配,即50%【44, Karen Simonyan and Andrew Zisserman. 2015. Very Deep Convolutional Networks for Large-Scale Image Recognition.】。Dropout比SkipReduce提供了更好的正则化,Dropout和SkipReduce分别使测试精度额外提高了1%和0.3%。然而,当SkipReduce和Dropout一起使用时,我们看到了累积的好处,使测试精度额外提高了1.2%。这表明这两种方法不仅兼容,而且是互补的。


图 20: 基准AllReduce和SkipReduce在有和没有Dropout情况下的VGG-19测试精度。


A5 结论

本文展示了如何在数据并行训练的AllReduce集合通信期间跳过梯度(和数据包)以提高通信性能。通过减少AllReduce操作所需的步骤数,从而有效地跳过梯度,以最小的计算和内存开销实现了通信加速。我们将SkipReduce与先前的工作进行了评估,并证明了先前工作中使用的压缩技术的计算开销可能会在商品GPU系统和大规模高性能集群中常见的信道带宽下阻碍其有效性。为了保持模型精度,我们首先引入了一个随机化版本的SkipReduce,该版本可以以最小的开销实现。我们通过观察到梯度稀疏性在模型各层中不均匀,进一步增强了SkipReduce,使其能够选择性地跳过梯度。我们的结果表明,SkipReduce在保持精度的同时,提供了端到端训练时间的加速。更重要的是,这项工作介绍了SkipReduce的原则如何超越仅仅加速AllReduce集合通信——我们探索了它作为正则化器的影响,其在其他逻辑拓扑上的适用性,以及在其他并行类型中的应用。


A6 附录

A Artifact Appendix

A.1 摘要

此附件提供了SkipReduce的开源实现。提供了逐步指南,以复现SkipReduce和先前工作的结果,如图11所示。

A.2 附件清单(元信息)

A.3 描述

A.4 安装

这些步骤可以在系统的任何目录下执行。我们假设一个名为PATH的目录。

A.5 实验工作流程

A.6 评估和预期结果

用户应能观察到与图11中相同的趋势,即SkipReduce能够比先前工作更快地达到目标精度。由于工作负载的非确定性,精度随时间进展的方式可能存在轻微差异,但这不应影响论文中报告的趋势。

A.7 实验定制

提供的脚本允许用户轻松修改训练超参数,例如随机种子、学习率、批量大小。

A.8 备注

无。

A.9 方法论

提交、审查和徽章方法论: