摘要—基于参数服务器架构的异步训练广泛应用于大规模数据集和深度神经网络模型的扩展训练。在大规模分布式深度学习系统中,通信一直被认为是主要瓶颈。最近的研究尝试通过梯度稀疏化和量化方法来减少通信流量。我们发现前期研究存在三个限制。首先,他们的梯度稀疏化工作的基本准则是梯度的大小。然而,梯度的大小表示当前的优化方向,而不能指示参数的重要性,这可能导致对重要参数的延迟更新。其次,他们基于整个模型的梯度量化方法往往会导致梯度聚合时的误差累积,因为DNN模型不同层的梯度遵循不同的分布。第三,以前的量化方法对CPU的使用较多,给服务器带来了较大的开销。我们提出了MIPD,一种自适应的、逐层的梯度稀疏化框架,根据模型解释性和梯度的概率分布来压缩梯度。MIPD根据其参数的相应重要性(由模型解释性定义)来压缩梯度。还提出了指数平滑方法来补偿服务器上丢失的梯度,以减小梯度误差。MIPD建议在每个训练步骤中更新一半的参数,以减少服务器的CPU开销。它基于梯度的概率分布对梯度进行编码,从而最小化近似误差。在GPU集群上进行的大量实验结果表明,所提出的框架可以将DNN的训练性能提高多达36.2%,与最先进的解决方案相比,确保了高精度。相应地,服务器的CPU和网络使用分别下降了最多42.0%和32.7%。
关键词—指数平滑预测,梯度稀疏化,模型解释性,概率分布,量化
1 引言
近年来,深度学习在各种研究和工业领域(如计算机视觉和自然语言处理)取得了显著发展。通过互联网和高性能计算产生的大数据促进了深度学习的蓬勃发展,并为分布式深度学习的革命提供了强有力的支持。参数服务器架构下的异步训练已被证明是扩展深度神经网络训练的有效方法。然而,收敛时间与线性可扩展性存在很大差异。由于训练过程中传输的数据量巨大,通信被确定为瓶颈。由于工作节点频繁与服务器交换数据,通信往往占据了整体训练时间的相当大部分(> 90%)。大多数知名DNN的数据规模通常在Gb级别。因此,即使使用高吞吐量网络(如Infiniband),在数百万次迭代中重复传输如此大量的数据也是难以承受的昂贵代价。此外,GPU计算的快速革新导致计算时间的极端压缩,进一步凸显了通信带来的瓶颈。
已经提出了各种方法来减少分布式DNN训练的通信开销。通过分析通信策略,可以自然地确定三种可能的通信减少途径:1)减少参数更新频率(无损);2)将通信与计算重叠(无损);3)梯度压缩(有损)。减少更新频率的努力是对有损方法的补充。重叠解决方案对于线性神经网络架构(如VGG、AlexNet)效果良好,但最近的网络(如ResNet和Inception)限制了这种重叠的机会。几项最近的研究表明,由于随机梯度下降(SGD)的迭代特性,深度学习训练可以通过有损梯度实现收敛。这为通过积极压缩梯度来减轻通信开销创造了新机遇。
因此,梯度压缩仍然是分布式深度学习研究人员关注的一个主要领域。梯度压缩的关键部分包括识别不重要的梯度并对其进行过滤,以减少通信开销。与先前研究采用的方法不同,我们着重于识别重要参数并为它们提供更高的更新优先级,以加快训练速度。先前研究用于识别不重要梯度的主要标准是其大小。然而,梯度不能指示参数的重要性,即定义为它们对DNN模型预测准确性的贡献。我们确定了先前研究的四个局限性。
首先,先前的工作中的稀疏化和量化方法都是对DNNs的模型无关的方法。压缩标准仅取决于梯度的大小。这导致重要参数的更新潜在延迟,并减慢了收敛速度,因为梯度的大小不能指示其对应参数的重要性。对于最常用的CNNs来说,在提取微小细节特征方面,浅层主要起到作用。深层主要集中于特征整合和解读整体轮廓[8]。通过跨不同层使用参数对最终预测的准确性的影响是不同的。及时更新重要参数有利于DNN训练的收敛。因此,有必要探索一种模型相关的方法来识别重要参数,并优先高更新它们,以加速训练。
其次,先前的工作没有为服务器上被丢弃的梯度提供有效的补偿策略,从而导致梯度误差的积累,并影响收敛。它们丢失了接近零周围的大量实际梯度,并产生大的逼近误差,从而减慢了收敛速度。
第三,先前的研究通过假设梯度遵循均匀分布来量化梯度[18],[29],从而导致较大的梯度误差。一些研究提出基于梯度概率分布来量化整个模型的梯度,可以减少其分布产生的梯度误差。然而,不同层遵循不同的概率分布。因此,基于整个模型量化梯度会增加梯度误差,并可能减慢收敛速度。
第四,我们确定了影响分布式DNN训练系统性能的两个关键因素:网络带宽和服务器的CPU/内存性能。大多数通信减少研究仅关注减少梯度传输开销。他们忽略了服务器上参数更新开销(CPU/内存开销)。当扩展具有大型DNN模型的分布式DNN训练时,服务器上的参数更新成为一个障碍,仅仅减少通信开销是不够高效的。
为了解决上述问题,我们设计了一种自适应梯度稀疏化框架MIPD,根据模型可解释性和指数平滑预测方法来识别各层的重要梯度,从而减少DNN训练的通信开销。MIPD还为服务器提供了梯度补偿策略,以减少稀疏化产生的梯度误差。为了减少服务器的参数更新开销,MIPD建议每次迭代只更新一半的参数。此外,MIPD提供了基于概率分布的梯度量化和逼近算法,进一步减少梯度量化过程中的通信开销和逼近误差。具体来说,我们在表1中比较了各种梯度稀疏化和量化方法,并总结了我们的贡献如下:
-
我们为工作节点设计了一个轻量级参数拉取接口,可以确定每个训练步骤中要拉取和更新的参数数量。大多数先前的研究关注如何减少推送阶段的数据传输开销。我们的研究提供了双向稀疏化策略,在DNN训练过程中包括拉取和推送阶段,以减少通信开销和服务器的参数更新负担。
-
我们提出了一种基于模型可解释性的新算法,以识别各层的重要梯度,从而减少训练过程中的参数更新开销。在我们的框架中,重要参数以高优先级进行更新,以加速DNN的训练。
-
我们还提供了一种基于指数平滑预测的算法,进一步识别重要梯度,从而增强系统的鲁棒性。该算法还被提出用于服务器上的梯度补偿,以减少稀疏化产生的梯度误差率。
-
我们提出了一种梯度量化方法,根据各层的概率分布,进一步减少通信开销和梯度的逼近误差。该算法的关键思想是聚类方法,根据基于密度的聚类方法将接近彼此的梯度分组。这种方法可以将梯度的逼近误差限制在一个小范围内。
本文的剩余部分组织如下:我们在第2节描述动机,第3节给出系统概述,并在第4、5节提供所提出框架的详细描述。在第6节,我们讨论实验设置,并随后呈现基准结果。我们在第7节分析梯度压缩方法的现有解决方案,并在第8节结束论文。
(a) 对于1-10层的精度降级的比较;(b)指数平滑预测和真实值在不同层之间的梯度差异。
2 背景和动机
2.1 参数更新的瓶颈分析
在考虑与参数服务器架构在 GPU 集群上同步分布式 DNN 训练后,参数更新被确定为严重影响训练性能的瓶颈。我们还确定了两个可能减慢训练速度的关键因素:梯度的传输和聚合。它们的性能主要取决于服务器的网络带宽和计算资源。因此,为了减少参数更新的开销并提高训练性能,我们需要专注于减少服务器和工作者之间的数据传输以及服务器的计算资源利用率。
2.2 梯度稀疏化与量化挑战
在分布式 DNN 的训练过程中,使用参数服务器架构在服务器和工作者之间交换大量数据,产生了很大的通信开销并成为一个障碍。最近的研究表明,梯度稀疏化和量化是减少通信开销的有效方法。梯度压缩的关键元素,它通过识别显著梯度(稀疏化)并用低精度进行编码(量化)来实现通信减少,在每一步训练过程中消除非必要的通信。准确区分显著梯度,以加速分布式 DNN 训练是一个挑战。
2.3 模型可解释性和梯度与参数的重要性
深度学习(DL)的快速发展引起了对人类如何理解 DL 模型运作以及设计在关键情况下能够如预期运行的模型的担忧。对于理解 DL 模型的需求的日益认识已经从单向关注模型准确性转变为更广泛的视角,其中包括对 DL 可解释性的强调。针对黑盒模型的许多方法已被提出来解决模型可解释性问题,包括 LIME 和 SHAP,它们专注于提供一组“权重”以提供关于模型如何处理每个实例的见解。受 SHAP 方法的启发,我们的方法涉及根据其对 DNN 模型的预测准确性的贡献来识别显著参数。
以前的研究使用了各种基于从梯度中提取信息的方法来压缩梯度,例如梯度的大小或在频域中使用基于 FFT 的方法对梯度进行稀疏化等。从梯度中提取的信息只能指示 DNN 训练的优化方向,不能用于推断参数的重要性。与以往研究不同,我们根据参数对 DNN 模型的预测准确性的贡献量来量化参数的重要性,以识别显著梯度。
2.4 观察、挑战和机遇
根据对梯度稀疏化和量化评估结果的观察和分析,我们确定了五个优化方向,如下所述。
2.4.1 稀疏化:逐层对比整个模型
通常,梯度稀疏化可以应用于不同的粒度,例如整个模型、逐层等。大多数现有稀疏化方法的理论分析假设梯度的稀疏化应用于整个模型的梯度。重要的是,一般来说,逐层稀疏化与整个模型稀疏化不同(尽管对于某些量化方法结果是相同的)。我们在以前的研究中确定了两个问题。首先,我们评估了使用稀疏化比率为 50% 的 Top k 方法不同层的丢弃率,突出显示当使用整个模型稀疏化时,不同层的丢弃率相似,即它们都在约 50% 左右,如图 3a 所示。然而,不同层的重要性不同。我们比较了针对预训练的 DNN 模型,在不同层删除不同百分比参数时的精度降级,如图 1a 所示,并观察到不同层之间的精度降级不同。因此,对所有层使用相同的梯度压缩率是一种低效的方法。第二,在使用整个模型稀疏化时,几乎所有 DNN 模型的偏差都已被删除(如图 3a 所示),这减慢了收敛速度。我们比较了在删除所有偏差和在正常训练中使用所有参数时的精度曲线,如图 3b 所示,并观察到在 DNN 训练中删除偏差时精度下降高达 12.25%。
(a) 对于总体丢弃比率为50%,不同层的丢弃率比较; (b) 在使用整个模型和丢弃所有偏置项进行训练时,验证准确性比较。
偏差的机会:DNN 模型中的偏差数量远少于其他参数。它占总体模型参数的一小部分(通常少于 1%)。因此,在训练期间可以传输所有偏差而无需对其进行压缩以加速收敛。
2.4.2 机会:模型可解释性和 SHAP
受 SHAP 方法 [12] 对模型可解释性的启发,该方法旨在为特定预测为每个特征(参数)分配重要值,我们使用类似的方法评估 MobileNet 每个层的参数的重要性,如图 2a 所示。根据图 2a,我们观察到在每个层删除一定百分比参数时,精度降级差异很大,这意味着不同层之间的重要性不同。我们进一步分析了训练过程中参数的重要性,并发现每层的参数 L2 范数与层的重要性呈正相关。基于这一观察,我们评估了 MobileNet 每层的参数 L2 范数,如图 2b 所示,并发现它与通过删除预训练模型一定百分比参数来评估的精度降级呈正相关。这一观察也得到了知识蒸馏和模型压缩用于有效推理的支持。因此,我们根据参数的 L2 范数在训练过程中计算每层的丢弃率。
(a) 对于第4至第8层的精度降级比较;(b) 第4至第8层参数的L2范数。
2.4.3 双向压缩挑战
在训练过程中,服务器和工作节点之间的训练信息传输是双向的,包括数据的拉取和推送。因此,在拉取和推送过程中传输的数据都希望进行压缩,以实现最佳的通信性能。然而,稀疏化和量化都是计算密集型任务。当使用双向压缩方法时,服务器和工作节点都需要处理压缩和解压缩过程,这给服务器带来了强大的计算开销[13],[14],[15]。因此,为了减轻服务器的计算开销,我们选择将部分参数撤回到工作节点,而不进行压缩。我们在图4b中比较了半参数更新方法和普通的随机梯度下降法(SGD),观察到半更新策略可以达到与普通SGD相同的收敛精度。
(a)普通SGD和指数平滑预测(ESP)方法的比较;(b)普通SGD和一半参数更新方法的比较。
2.4.4 指数平滑预测方法(ESP)
上述策略可能导致优先级较低的层未能及时更新,从而减慢了收敛速度。为了实现一个稳健的更新策略,我们提供了一种指数平滑预测方法,用于校正每个层的下降率。选择这种方法的原因是DNN训练是一个连续的时间优化过程。因此,历史数据可以在一定程度上用于预测未来。我们评估了预测梯度与真实梯度之间的差异,如图1b所示。我们观察到差异小于0.0012,这意味着当我们使用预测值来补偿真实值时,误差率在可接受的范围内。此外,在图4a中比较了使用普通SGD和ESP进行DNN训练的性能,它们通过ESP估计的预测梯度更新参数,并观察到它们的训练性能相似。这表明我们可以在服务器上运行一个预测程序,为训练过程中丢弃的梯度提供一个估计值。
2.4.5 梯度概率分布的量化
以前的研究要么通过假设梯度服从均匀分布[18],[29],要么根据整个模型的概率分布对梯度进行量化[3],[4],这会产生较大的梯度误差并减慢收敛速度。不同层之间的梯度遵循不同的概率分布。基于整个模型对梯度进行量化可能会产生较大的梯度误差。为了减小梯度误差,我们基于各层的概率分布逐层量化梯度。我们发现不同层之间的梯度大致遵循变化的正态分布。因此,我们使用正态分布的3σ规则逐层量化梯度,以最小化梯度误差并加速训练过程。
3 系统概述
MIPD通过采用参数服务器架构实现了异步参数更新策略。在训练过程中,服务器和工作节点维护各自的模型参数。工作节点从服务器拉取选定的全局参数(例如一半的参数)到本地级别,并使用拉取的全局参数更新本地参数。随后,工作节点生成梯度并使用计算得到的梯度更新本地参数。然后,工作节点使用第4节介绍的方法选择重要的梯度,并使用第5节介绍的方法量化重要的梯度。最后,工作节点将量化的梯度推送给服务器。服务器解压缩接收到的梯度,以更新全局参数。我们的框架主要由三个模块组成,包括工作节点上的参数拉取和推送模块,以及服务器上的梯度解压缩和补偿模块。详细信息请参见算法1,符号请参见表2。
工作者驱动的参数拉取模块:我们为工作者设计了一个轻量级的、逐层的参数拉取接口,允许工作者有选择地从服务器拉取参数。由于参数更新是一个CPU密集型任务,该接口被设计成从部分层向工作者拉取参数,以减少服务器的CPU开销,从而提高训练性能。确定每个训练步骤中更新哪些层的工作由工作者完成,因此与基于层的普通SGD相比,服务器没有额外的开销。
梯度稀疏化和量化模块:我们设计了一个参数推送模块,包括逐层梯度丢弃率定义部分和基于概率的梯度量化部分。逐层丢弃率定义部分包括两种算法:基于模型可解释性的算法和基于指数平滑的算法,用于在推送阶段为每个层定义梯度的丢弃率。基于概率的梯度量化部分用于量化选定的梯度并将其推送到服务器,以减少传输数据的开销。
参数更新模块:我们在服务器上设计了一个参数更新模块,用于解压工作者接收的梯度。这个解压算法可以最小化梯度的近似误差,因为我们根据聚类方法设计了它。梯度补偿策略也包括在这部分中,以减少梯度稀疏化产生的梯度误差。
4 层次逐层丢弃策略
4.1 根据模型可解释性定义丢弃率
利用梯度稀疏化方法进行通信减少的关键标准是 - 哪些梯度是不重要的,在训练过程中应该被丢弃?
特别地,DNN 训练类似于黑匣子,我们从训练过程中获取的信息是有限的,并且单一标量损失和准确度是对这个高维动态过程最常见的观点[22]。因此,在训练中识别重要的梯度是困难的。一般而言,梯度的大小可以指示其重要性,因为较大的梯度对降低损失的贡献更大。然而,梯度只能指示当前训练阶段对降低损失的贡献,而忽略了神经网络结构。从梯度中提取的信息无法表明参数的重要性。由于参数和梯度总是成对出现,我们的工作侧重于根据整个神经网络结构概述参数对 DNN 模型预测准确性的影响,从而确定用于更新全局参数的重要梯度。
4.1.1 层次重要性定义
每个层中参数的重要性定义为在将其丢弃时准确度的降级情况。我们比较了在不同层中丢弃一定百分比的参数时,预训练的 DNN 模型的准确度降级,并评估了不同层的 L2-范数。我们发现参数的 L2-范数与参数的层次重要性呈正相关。因此,我们通过参数的 L2-范数来定义每个层中参数的重要性。
4.1.2 通过模型可解释性计算丢弃率
由于我们发现参数的 L2-范数与参数的层次重要性呈正相关,具有较大 L2-范数值的参数相关梯度也需要快速更新。因此,这些梯度需要按照较高优先级发送到服务器,以加速训练的收敛。因此,我们计算层 i 参数的 L2-范数为 。由于具有较大 L2-范数值的参数层比具有较小值的层更重要,因此具有较大 L2-范数的层被分配较大的权重。每个层的权重计算为该层的 L2-范数值占所有层 L2-范数之和的百分比。我们计算层 i 的权重为
。对这些具有较大权重的层分配较小的丢弃率。因此,每个层的丢弃率计算为该参数的 L2-范数在所有层 L2-范数之和中的反比。因此,对于层 i,根据模型可解释性计算的丢弃率定义如下方程(1)所示。
4.2 通过指数平滑定义丢弃率
在上述部分中,根据其相应参数的重要性,逐层丢弃梯度。这可能导致一些不重要参数训练不足,从而减缓收敛速度。因此,为了增加我们方法的健壮性,我们提出了一个基于指数平滑预测的算法,该算法校正每个层的丢弃率,并补偿被丢弃的梯度。
4.2.1 ESP 方法
指数平滑方法经常用于时间序列预测模型,以预测给定实体 i 在时间 t 处的目标值 的未来值。每个实体代表时间信息的逻辑分组 - 例如气候学中来自个别天气站的测量值,或医学中不同患者的生命体征 - 并且可以同时观测到[25]。令
为时间 t 处的观测序列。那么时间 T 处的点预测表示估计未来值
给定 t 时的信息: ∀t ≤ T,其中 h 表示预测时段[24]。在最简单的情况下,一步预测模型采用如下方程(2)的形式:
其中 被定义为模型的预测,
为目标的观测值,
为在回顾窗口 k 内的输入数据。s_i 为与实体相关的静态元数据(例如初始化的
)。
为指数平滑预测函数。
我们采用指数平滑方法的加权平均形式,以预测未来值。因此,T+1 时刻的预测值可由 T 时刻的观测值和预测值表示为如下方程(3):
其中 0 ≤ α ≤ 1 为平滑系数。预测过程从某一特定时间开始,定义起始时间的值为 y_0,我们可以获得以下方程(4)。
4.2.2 通过 ESP 计算丢弃率
根据上述 ESP 方法的分析,可以使用上一次迭代中计算的梯度的预测值和真实值(方程(3))来预测梯度,即如下方程(5)所示。
根据梯度的预测值和真实值之间的差异,我们为每个层定义丢弃率。根据上述差异的 L2-范数计算层 i 的权重为 。我们为那些具有大权重的层分配较小的丢弃率,而为那些具有较小权重的层分配较大的丢弃率。这是因为当某一层的梯度预测值与真实值之间的差异较小时,我们可以使用预测值来补偿全局参数的梯度,并将误差率控制在可接受范围内。每个层的丢弃率通过其差异在所有层中的反比计算。对于层 i,根据方程(6)定义了其丢弃率。
4.2.3全局梯度补偿
由于根据上述章节(4.1和4.2)介绍的丢弃策略,每一层的非零梯度部分会被丢弃,为了减少通信开销,梯度的不足导致了服务器上梯度聚合时的误差。因此,为了减少这种误差,我们提出了全局梯度补偿策略作为梯度稀疏化框架的一部分。指数平滑预测方法用于在服务器上预测梯度。预测公式如方程(5)所示。我们使用由服务器利用指数平滑预测方法计算的预测值填充丢弃的梯度,从而减少由梯度丢弃策略产生的梯度误差。
4.3 梯度丢弃策略
根据基于模型可解释性和指数平滑预测算法的丢弃率定义,可以自适应地为每一层计算最终的丢弃率,使用以下方程(7):
这里是第
层的最终丢弃率;
和
分别是基于模型可解释性和指数平滑预测算法定义的丢弃率;
是平滑系数。平滑系数
可以根据应用需求自适应定义。随着
的增加,最终的丢弃率倾向于信任模型可解释性定义的丢弃策略。
最后,在将整体稀疏化率定义为s%时,我们得到了对于第层需要丢弃的梯度数量
为
。这里
是打算丢弃的第
层的梯度数量;N是整个模型的总梯度数量;s%是用户定义的丢弃率;
是第
层的最终丢弃率。在训练过程中为每一层定义了丢弃率之后,我们使用Top-k方法来丢弃不重要的梯度。Top-k方法适用于参数计算的梯度,除了偏置(在第2.4.1节介绍)。
5 逐层梯度近似
为了进一步减少基于丢弃策略的分布式深度神经网络训练的通信开销,选定的梯度根据其概率分布进行压缩。基于数据压缩的观点,我们致力于找到一个能够将高精度数据映射到低精度版本的映射规则。为了实现这一目标:首先,我们需要找到数据的分布;其次,我们需要探索一种近似方法来计算原始数据的近似值;最后,我们需要定义一条规则,将高精度数据映射到低精度数据。
5.1 概率分布分析和梯度近似
我们通过对 MobileNet 进行评估,分析了每层梯度的分布,并在图 5a 和图 5b 中绘制出来。为了使观察更具有说服力,我们还可视化了 ResNet101 和 ResNet152 的梯度分布,并在图 5c 和图 5d 中展示。我们发现每层梯度近似地遵循高斯分布(图 5a),不同层具有不同的均值和方差(图 5b)。因此,我们基于它们的概率分布对梯度进行逐层压缩。
图5.(a)一个层的梯度分布;(b)不同层的梯度分布;(c)和(d)ResNet101和ResNet152的梯度分布。
对于梯度的近似,我们的研究旨在探索用低精度数据表示原始梯度。由于每层梯度近似地遵循正态分布,我们将梯度的分布范围划分为 n 个间隔。然后,我们使用 n 个低精度数据表示原始梯度。每个低精度数据表示一个间隔。我们根据梯度的概率分布将分布范围划分,并允许每个间隔包含相似数量的梯度。
以标准正态分布为例,如图 6 所示,我们分析了正态分布的特征,并提供了将 n 的采样间隔划分为基线。使用正态分布的 规则将每层梯度划分为若干组(间隔)。
规则表明,68%、95%和99.7%的数据分别落在距离平均值的第一、二和三个标准差内[23]。为了使每个间隔包含相似数量的梯度,我们将 3-s 间隔划分如下:
和
划分为 68% × n 个间隔;
和
划分为 28% × n 个间隔;
和
划分为 4% × n 个间隔。其中,n 表示总间隔数,是一个用户定义的参数,表示压缩或近似率。以上划分间隔的动机是,数据密度分布在均值周围更高,在离均值越远的地方越低。
当将标准正态分布扩展到一般正态分布时,上述 3-s 间隔可以重新定义为 。对于上述 3-s 间隔中任意区间 [g1, g2],我们可以计算区间 [g1, g2] 中的梯度的平均值,并将此平均值分配为代表落在该区间内的原始梯度值的代理。为了减少计算大量数据的平均值的计算开销,我们根据正态分布的密度函数推导出平均值,如下所示:
正态分布的概率密度函数定义如下:,其中μ为均值,σ为标准差。对于某一特定层中的任意区间[g1, g2],我们将
作为该区间的均值。接下来,我们可以计算
值,如下所示的方程(8)。为了简化符号,我们设e(g1)=
,e(g2)=
。详细推导见附录A3,可在计算机学会数字图书馆http://doi.ieeecomputersociety.org/10.1109/TPDS.2022.3154387找到。
根据以上分析,我们将分配为代理,以近似区间[gi, gi+1]中的原始梯度。因此,代理系列
将与压缩梯度一起发送到服务器。
5.2 梯度编码和解码
由于梯度分布被划分为 n 个区间,我们可以使用低精度数据来表示原始梯度。数据的精度取决于区间数 n。低精度数据可以定义为 m + 1 位,用于表示原始梯度,其中,1 位用于指示正负。因此,我们可以得到 m 的值为
。
最后,我们基于上述分析提供了梯度的编码策略。对于特定的梯度,1) 首先,我们需要将其与 和
进行比较;如果梯度大于
或小于
,则将其发送到服务器,因为具有较大幅度的梯度是显著的;2) 其次,我们需要确定梯度的位置,找到梯度属于哪个区间,并将其分配给一个具有 m + 1 位的低精度数据,以便将其发送到服务器;3) 如果梯度涉及 DNN 模型的偏置,它将直接发送到服务器而无需压缩。详细的编码和解码过程在算法 2 中显示。
对于梯度的解码,服务器按层接收压缩的梯度 和代理系列
。每个压缩梯度
被替换为代理,该代理定义为梯度在其所属区间内gi的均值。
5.2.1 梯度偏差分析
由于我们使用具有函数值 的 g 作为代理来近似某个区间 [g1, g2] 内的梯度,我们可以估计梯度的误差界限。对于某个区间 [g1, g2],根据方程 (8),梯度 gi 的误差率受到限制在区间内 (9)。
因此,最大的误差界限出现在最大的区间中。由于随着 |g| 的增加,区间大小也增加,最大误差出现在大约为 的区间附近。在区间
或
内有
个区间。因此,最大的区间大小为
,并且最接近
的区间为
。通过将这一区间映射到方程 (9) 中,可以计算出误差界限的大小,如方程 (10) 所示。
6 评估和结果分析
6.1 我们框架的实现
我们在 Tensorflow 上实现了我们的 MIPD。类似于 Google 团队和其他研究人员提出的分布式优化器的变体,MIPD 将 Tensorflow 中的分布式优化器类进行封装,并设计了一个新的分布式优化器,通过重写用于更新参数的 apply_gradient() 函数来实现。
6.2 评估方法
测试平台。我们建立了一个由 9 台 GPU 服务器组成的集群(8 台用于工作服务器,1 台用于服务器),每台服务器配备 Intel Xeon Silver 4210 处理器,256GB 内存,8 个 Quadro RTX6000 GPU,任意两台服务器之间使用 CX-5 单端口 NICs 的 100 Gbps 网络带宽连接。每个工作服务器分配一个专用 GPU 卡。
基准:DNN 模型和数据集。我们选择了六个 DNN 模型:AlexNet、MobileNet、ResNet50、ResNet101、ResNet152 和 VGG16,以及三个数据集:Cifar10、Cifar100 和 TinyImagenet,作为我们的评估基准。关于这些 DNN 模型的信息在表 3 中展示。
基线:稀疏化模型。我们将我们的稀疏化框架与其他六种最先进的稀疏化模型进行比较:(i) TernGrad SGD,使用三元梯度加速分布式 DNN 训练;(ii) A2SGD,通过两级梯度平均(A2SGD)提供 O(1) 通信策略,将所有梯度合并到每个工作服务器的仅两个本地平均值中,然后计算两个全局平均值以更新模型;(iii) Top-K SGD,旨在减少通信流量,只在训练过程中传输张量的少量元素(例如,仅传输前 k 个最大元素);(iv) QSGD,基于码本的随机压缩方案,允许用户平滑地权衡通信带宽和收敛时间;(v) Sketch,使用 count-sketch 选择近似梯度向量的“重要元素”来近似 Top-k 成分;以及 (vi) Vanilla SGD,采用异步参数更新策略。
6.3 训练性能比较和分析
6.3.1速度提升与准确性
我们基于图 7a-c、g-i 中的每个 DNN 模型比较不同种类的梯度稀疏化和量化方法。受到截断均值的启发[31],我们根据验证准确度的趋势为每个 DNN 模型定义训练的停止条件,例如当目标(最高)准确度第三次达到时。我们观察到我们的方法在分布式 DNN 训练中实现的令人满意的加速效果,根据本图中的评估结果,我们看到 MIPD 框架相对于其他方法在六个基准模型上的表现提高了18:8%至36:2%。
在图 7a-c、g-i 中,我们注意到我们的框架还提高了大多数 DNN 模型的收敛准确性,相对于其他最先进的梯度压缩方法,在相同的超参数设置下可高达5%。与更小的 DNN 模型(例如 MobileNet)相比,我们的框架可以实现更高的大型 DNN 模型(例如 AlexNet、VGG16)的加速。这是合理的,因为我们的稀疏化框架每次训练步骤只更新一半的参数,并且可以将通信开销减少 50%至87:5%。因此,我们的框架对于大型 DNN 模型效果更好,因为与小型模型相比,大型 DNN 模型的通信开销较小。因此,减少通信开销可以为这些大型 DNN 模型带来更大的加速。我们基于指数平滑方法的全局梯度补偿策略可以减少参数更新的梯度误差,进一步保证 DNN 训练以实现更高的验证准确度。
6.3.2压缩率与性能
除了识别显著梯度外,我们的工作提出在每次迭代中更新一半的参数,以进一步减少通信开销和服务器的 CPU 负担,从而提高训练性能。
上述六种稀疏化和量化方法(在第 6.2 节介绍)的稀疏率,包括梯度拉取/推送数据类型、数据大小、参数读/写数据大小和总体稀疏率,如表 4 所示。我们以 VGG16 为例说明不同方法的稀疏率。VGG16 的原始梯度大小(float32)为 4.1 Gb。其他 DNN 模型与 VGG16 类似。在我们的实验中,服务器和工作者之间交换的梯度从原始的 float32 压缩到 int8。此外,我们建议每次训练步骤更新一半的参数,甚至舍弃其中的 50%,以进一步减少通信开销。我们假设 DNN 模型的梯度大小为 S。因此,每个工作者的拉取数据大小为 50%*S。推送数据大小为 (舍弃 50% 并将数据精度从 float32 压缩到 int8)。在我们的实验中,整个模型的总舍弃率为 50%,在训练过程中保持恒定。这种舍弃率可以根据不同应用的要求进行调整。需要更新的参数大小为 50% * S。我们的框架的总体稀疏率为 71.8%。结果表明,我们的研究可以保证更好的训练性能和准确性,具有更高的压缩比。
6.3.3错误率与性能
我们的框架的关键思想与聚类分析类似;我们将梯度划分为每层的 I 个区间。每个子集包括 个最接近梯度的梯度。这可以确保在使用均值表示真实值时,所有子集都具有最小误差。我们框架每层的误差可以估计为
,其中
是层
的每个区间的方差。整体错误可以估计为
。
根据统计分析,我们可以得出 ,如附录 B1 中所述,可在在线补充资料中找到。Top - k 方法的错误率高度依赖于 k 的定义。因此,Top - k 与其他方法之间的错误率比较需要参考 k 的值。减少梯度误差可以加速 DNN 训练的收敛。
6.3.4不同层级的舍弃率
每层的舍弃率由模型可解释性和指数平滑预测方法定义。使用平滑系数 来控制这两种舍弃策略的百分比。在我们的实验中,我们建议
为 0.5,可以根据需求进行调整。不同 DNN 的不同层的舍弃率如图 7d-f、j-l 所示,我们观察到不同层具有不同的舍弃率。与单调标准相比,我们的策略可以识别对 DNN 模型收敛产生更多贡献的重要层,并为这些层更新更多参数。从图 7d-f、j-l 中,我们还观察到深度神经网络(如 ResNets)不同层的重要性彼此相似。相比之下,对于参数较多的浅层神经网络(如 AlexNet、VGG16),不同层的重要性差异很大。
6.3.5 系统性能分析
根据上述部分的分析,我们指出服务器的CPU性能和内存带宽以及网络经常充当分布式DNN训练的瓶颈,对于今天用于DNN训练的常见服务器,CPU的峰值性能通常受到内存带宽的限制。因此,在具有高速网络的集群上训练DNN时,通过压缩传输数据获得的性能改进通常有限。仅仅压缩传输数据可以减少数据传输时间。服务器上的梯度聚合和参数更新是消耗资源的任务。因此,通过减少数据传输时间获得的性能改进是有限的。因此,除了在训练过程中压缩传输数据以减少通信开销之外,我们的工作还尝试减少服务器上的参数更新开销。在我们的评估基准中,我们使用int8数据类型来编码梯度。与原始float32相比,传输数据已经压缩了4倍。为了减少服务器的参数更新开销,我们的框架还提出每个训练步骤更新50%的参数。每个训练步骤在服务器和工作节点之间传输的整体数据大小如表5所示。在这个表中,我们观察到我们的工作可以将每个训练步骤的挂钟时间大大减少高达70.4%(VGG16),并且还有一些额外的计算时间(例如,对于VGG16为0.05秒),同时保证训练收敛和准确性。
6.3.6 服务器的CPU和GPU使用情况
我们的工作建议在每个训练步骤中更新一半的参数,以减少服务器CPU的计算开销。我们比较了服务器在不同稀疏化方法下的CPU和GPU使用情况,如图8e-h和i-l所示。我们发现,与其他稀疏化方法相比,我们的框架平均释放了服务器的CPU负担2:2%至43:6%,在四个基准测试中,GPU使用情况并没有太大增加(在图8i-l中)。我们的研究还将服务器上的GPU使用情况降低了高达4:14%至24:9%。我们的框架和其他稀疏化方法的GPU使用情况高于原始的随机梯度下降(ASP)。这是因为稀疏化方法需要解压梯度,以更新参数。我们还列出了不同稀疏化方法在工作节点上的GPU使用情况,如图8m-p所示,并注意到与其他方法相比,Sketch需要更多的计算资源。
6.3.7 网络使用情况
我们比较了不同稀疏化方法的网络使用情况,如图8a-d所示。我们观察到,与原始的随机梯度下降(ASP)相比,稀疏化方法大大减少了网络使用情况。通常,服务器上的网络使用情况包括两部分:输入和输出使用情况。为了减少服务器的CPU/内存开销,我们的研究建议在每次迭代中更新一半的参数。因此,与其他方法相比,我们的框架可以理论上将网络的输出使用情况减少一半。我们在图8a-d中展示了输入使用情况。在这幅图中,我们注意到我们的框架将网络使用情况(输入)在四个基准模型中减少了1:7%至32:7%。我们还观察到,与不同基准测试相比,我们的框架可以将网络使用情况减少到20 Gbps以下。
6.3.8 MIPD的详细性能分析
我们的框架主要由三个优化模块组成:半更新、梯度丢弃和补偿以及梯度量化。为了阐明每个部分的贡献,我们基于四组进行了不同实验:A) 原始SGD,B) 每次训练步骤更新一半的参数(半更新),C) 半更新与梯度丢弃和补偿策略,D) 半更新与梯度丢弃/补偿和梯度量化,基于ResNet152/TinyImagenet。上述四组的评估结果以及CPU/网络使用情况显示在图9中。我们看到,我们的框架比原始SGD提高了44.68%,上述四部分([A, B, C, D])的性能改进矩阵为19.46%、33.81%、44.68%。半更新策略获得了19.46%的改进,丢弃/补偿策略和梯度量化进一步获得了14.53%和10.87%的改进。这是合理的,因为半更新策略双向减少了网络和参数更新开销,而丢弃/补偿和量化策略仅在梯度推送阶段减少了网络开销。这些结果进一步证明了我们的分析,即服务器的计算资源(CPU、内存)和网络带宽极大地影响了训练性能。
6.3.9 可伸缩性
我们还进行了关于收敛时间加速度与目标准确性(例如MobileNet/TinyImagenet的89%)的可伸缩性研究,基于MobileNet和ResNet101,分别使用1、2、4、6、8、16、32个工作节点。如图10所示,我们看到与基于参数服务器架构的异步原始SGD(asp)相比,我们的框架在可伸缩性方面表现更好。实现在Tensorflow_v2.4之上的all-reduce架构与NCCL通信库相比,对于收敛时间的可伸缩性表现不佳。我们还注意到,所有方法在MobileNet上显示出比ResNet101更好的可伸缩性。这是因为小型DNN模型更容易扩展。
7 相关工作
梯度稀疏化。已经有几项研究提出通过梯度稀疏化来减少通信开销。Sparsification [19]、[20]、[21] 是一种流行的梯度压缩方法,其中每个节点按幅度对梯度进行排序,并仅传输一个子集(如 Top k)的分量,其余在本地累积。这些方法可以实现每步高达三个数量级的高压缩率[19]。
梯度量化。量化方法将梯度映射到节省资源的参数空间,构成另一种高效的梯度压缩技术。Terngrad 的研究工作[18]通过使用三个阈值将梯度映射为[-1,0,1]。QSGD[4]通过随机量化梯度,并将梯度映射到一个比 Terngrad[18] 更大的均匀离散集合,基于整个模型的梯度。这些方法可以实现更高的压缩率,但会导致实际梯度与量化梯度之间的误差较大。
环形全局归约。Ring All Reduce[30]是一种高效的通信减少方法,不同于参数服务器架构。这是一种同步参数更新策略,被证明在小规模深度神经网络训练中有效。然而,随着规模的增加,由于长时间的参数更新延迟,性能会显著下降。
8 结论
本文为分布式深度神经网络训练系统提供了一种高效的梯度稀疏化框架,减少了对多种不同类型的深度神经网络模型和数据集的收敛时间,同时保持了准确性。主要包括四个部分:1) 基于工作节点驱动的双向稀疏化算法,可以减少从服务器拉取的数据大小;2) 基于模型可解释性的逐层丢弃率定义;3) 基于指数平滑预测的丢弃率定义,可以根据预测值为丢弃的梯度提供补偿;以及4) 基于概率分布的数据近似算法,可以进一步压缩从工作节点传输到服务器的数据。结果表明,我们提出的稀疏化框架可以为分布式深度神经网络训练系统提供快速稳定的收敛保证。