摘要
在不利用分布式系统的情况下,训练现实世界的深度神经网络(DNN)可能需要一个世纪(即数周或数月)。即使是分布式培训也要花费大量时间,其中很大一部分时间都花在了通过网络传达权重和梯度上。最新的分布式培训算法使用工作人员聚合器节点的层次结构。聚合器反复从其分配的工作组中接收梯度更新,然后将更新后的权重发送回去。本文着手通过在网络接口卡(NIC)中嵌入数据压缩加速器来减少这种可观的通信成本。为了最大程度地利用网络加速优势,提出的解决方案名为INCEPTIONN(用于交换和处理神经网络训练信息的网络内计算),通过利用以下三个观察点,独特地结合了硬件和算法创新。
(1)与重量相比,梯度对精度损失的容忍度要高得多,因此,它们更适合于主动压缩,而无需使用复杂的机制来避免损失。
(2)现有的训练算法仅在通信的一条路径中通信梯度,这减少了网络内压缩加速的机会。
(3)由于聚集器需要压缩/解压缩分配给其的工作组中的多个流,因此它们可能成为压缩的瓶颈。
为此,我们首先针对浮点梯度提出了一种轻量级且硬件友好的有损压缩算法,该算法利用其独特的价值特征。这种压缩不仅可以在不损失精度的情况下显着减少梯度通信,而且还具有较低的复杂度,可以直接实现为NIC中的硬件模块。为了最大化压缩的机会并避免聚合器出现瓶颈,我们还提出了一种无聚合器的训练算法,该算法在组中通信的两条腿上交换梯度,而工人以分布式方式集体执行聚合。在不更改训练数学的情况下,该算法利用了聚合运算符的关联属性,并使我们的网络内加速器能够 (1)对所有通信应用压缩,并且(2)防止聚合器节点成为瓶颈。我们的实验表明,INCEPTIONN可以将通信时间减少70.9%至80.7%,并且在常规训练系统上可提供2.2〜3.1倍的加速,同时达到相同的准确性。
说明
加速器进一步缩短了计算时间,使通信成本更加明显。如图1(a)所示,最新的分布式培训系统被构造为工作人员聚合器节点的层次结构。在每次迭代中,聚合器节点从其子节点收集梯度更新,向上传递累积梯度,然后将更新后的权重向下发送回。实际DNN的这些梯度和权重通常为数百兆字节,给网络带来了很大的通信负担。本文着手通过将数据压缩加速器嵌入到网络接口卡(NIC)中来降低这种通信成本。由于硬件的复杂性,仅使用通用压缩技术并开发用于压缩的网络加速器将提供有限的收益和延迟开销。因此,我们改为提出一种称为INCEPTIONN1的硬件算法共同设计的解决方案,该解决方案提供了新颖的梯度压缩技术,其网络内加速器体系结构和以梯度为中心的分布式训练算法,以最大程度地发挥网络内加速的优势。
INCEPTIONN首先提供了一种针对浮点梯度值的轻量级且硬件友好的有损压缩算法。这种压缩利用了梯度的独特值特征:它们的值大多落在-1.0和1.0之间的范围内,并且分布峰值紧紧围绕零以低方差分布。鉴于此观察,我们将重点放在-1.0到1.0之间范围内的浮点值压缩上,以便在提供高压缩比的同时最大程度地降低精度损失。此外,在开发压缩算法的同时意识到实现的复杂性,从而可以在NIC中直接实现硬件。为了将网络加速器与现有网络软件堆栈无缝集成,我们还提供了一组INCEPTIONN API,这些API将加速器与传统TCP / IP网络堆栈和Open-MPI框架进行接口连接。
传统的分布式训练算法无法充分利用权重,因为它们仅在通信的一条路段通过梯度。而且,聚合器将需要承担压缩/解压缩多个流的负担。为了应对这些挑战,INCEPTIONN附带了以梯度为中心的无聚集器的训练算法。聚集算子(通常是总和)是关联的,因此,渐变可以由一组工作人员逐渐聚集。是将部分集合体以一种循环的方式从一个工人传递给另一名工人,同时他们将自己的贡献添加到部分集合体中。与传统算法相比,该算法消除了对组中指定的聚合器节点的需求。该算法使分布式节点仅能传递梯度,并平均分担聚合负载,这为压缩梯度和改善节点之间的负载平衡提供了更多机会。图1(b)直观地说明了我们的算法的分组视图,该算法仅替换了常规工作聚合器层次结构的叶组。图1(c)描绘了当我们的算法替换所有层次结构时的视图。这些节点形成一个工作组,这是分布式训练算法的构建块,如图1中的所有三个组织所示。
神经网络分布式训练
现代数据集D不适合单台计算机或其GPU(例如,诸如ImageNet [19]之类的流行数据集的大小大于200GB。为了应对这一挑战,随机梯度下降技术成为一种流行的技术。具体来说,我们从D中随机抽取一个子集,通常称为小批量B。我们不对整个数据集D上的梯度g进行评估,而是使用给定B中的样本来近似g,即,我们假设g≈∂ℓB∂ℓ为了在群集上并行化此训练过程,可以将D划分为部分数据集Di,这些数据集被分配给相应的工作节点i。然后,每个工作人员都可以从自己的Di中提取小批量Bi,以计算局部梯度gi =∂ℓBi∂w,并将gi发送到聚合器节点以更新权重,如下所示:
然后,聚合器节点可以将更新后的权重w(t + 1)发送回所有工作节点。这种数学公式避免了移动训练数据,仅传达了权重和梯度。尽管权重和梯度比训练数据小得多,但它们仍然是数百兆字节,需要经常进行通信。
但是,即使采用分层方法,每个聚合器节点也应与一组工作节点通信并聚合局部梯度,这成为通信和计算的瓶颈。图3报告了在具有10Gb以太网连接的五节点群集上训练最新的DNN模型时交换的权重/梯度大小和通信时间的比例。例如,对于每个迭代,AlexNet要求为每个梯度和权重进行233 MB的数据交换。由于数据交换的规模很大,因此AlexNet的培训时间有75%用于通信。我们的评估还包括一些最近的DNN(例如ResNet-50:98 MB),其大小小于AlexNet。然而,随着任务的复杂性超过简单的对象识别,DNN的大小和复杂性有望增加。随着专用加速器提供更高的性能并减少计算时间和/或使用更多的节点进行训练,通信/计算比甚至变得更大。
压缩梯度
A 训练对梯度损失的鲁棒性
训练对梯度损失的鲁棒性分布式训练中的权重(w)和梯度(g)通常是32位浮点值,而在推理阶段它们是16或32位定点值 。众所周知,用无损压缩算法无法很好地压缩浮点值。例如,使用Google最先进的无损压缩算法Snappy,不仅压缩率低至约1.5,而且由于计算量大,训练阶段花费的总时间增加了2倍压缩。因此,我们采用更具侵略性的有损压缩,利用DNN训练的容差在算法级别上使值不精确。有损压缩比无损压缩提供了更高的压缩率,因此具有更大的性能优势,但它将影响训练后的DNN的预测(或推断)准确性。为了进一步对此进行研究,我们使用一种简单的有损压缩技术进行了一项实验:截断g和w值的一些最低有效位(LSB)。图4显示了有损压缩对经过训练的AlexNet和手写数字分类(HDC)网络的预测准确性的影响。该结果表明,g的截断对预测器准确性的影响远小于w,对w的积极截断对复杂的DNN(如AlexNet)的准确性产生不利影响。这种现象似乎很直观,因为w的精度损失是在迭代过程中累积的,而g的精度损失则不是。
B 梯度中动态范围的紧密度
梯度中动态范围的紧密度在设计有损压缩算法时,我们利用了梯度值的固有数值特性,即,这些值大多落在-1.0和1.0之间的范围内,并且分布峰值紧密地围绕零且方差很小。我们演示了这些特性,并在AlexNet的训练过程中分析了三个不同阶段的梯度分布。如图5所示,在三个训练阶段中,所有梯度值都在-1和1之间,并且大多数值都接近于0。对于其他DNN模型,我们也发现了类似的分布。鉴于此,我们将重点放在-1.0到1.0范围内的浮点值压缩上,以使算法将精度损失降至最低。在传统的分布式训练中,梯度仅在一个方向上传递,而更新的权重则在另一个方向上传递。因此,在深入研究压缩技术及其硬件的细节之前,我们首先讨论用于在各个方向传递梯度的训练算法。
梯度中心分布式培训
图6(a)描述了INCEPTIONN训练算法的工人组组织。在此算法中,工作组中没有指定的聚合器节点。相反,每个工作节点都维护自己的模型w(即模型副本),并且在每次迭代后仅与两个相邻节点交换和聚集梯度g的子集。图6(b)使用一个示例逐步说明了算法的过程。最初,每个工作节点都以相同的w0开头,并且INCEPTIONN将梯度向量平均划分为四个块,四个工作节点分别为blk [0],blk [1],blk [2]和blk [3]。
每次训练迭代时,每个节点都会基于当前w加载并计算数据的小批量,然后生成要交换的局部g。INCEPTIONN分两阶段交换和聚合g。
worker [0]将blk [0]发送到其下一个节点worker [1]。一旦接收到blk [0],worker [1]就对接收到的blk [0]和它自己的blk [0](worker [1])执行求和。这同时发生在所有四个工作人员上(“步骤1”)。重复该步骤两次(“步骤2”-“步骤3”),直到worker [0],worker [1],worker [2]和worker [3]完全聚合了blk [1],blk [2 ],blk [3]和blk [0]分别来自所有其他3个工作器。
发送blk [0]到worker [0]。现在,worker [0]具有blk [0]和blk [1]。这同时发生在所有四个工作人员上,每个工作人员都有两个完全聚合的块(“步骤4”)。重复执行此步骤两次(“步骤5”-“步骤6”),直到每个工人都从所有四个工人中完全收集到g。算法1正式描述了INCEPTIONN训练算法,以将其推广到任意数量的工人。
压缩梯度(没咋看懂)
压缩
算法2详细说明了将32位浮点梯度值(f)压缩为压缩位向量(v)和2位标记(指示使用的压缩机制)的过程。请注意,此算法是基于标准IEEE 754浮点表示法描述的,该表示法将32位值分为1个符号位,8个指数位和23个尾数位。根据f落入的范围,该算法选择四种不同的压缩机制之一。如果f大于1.0(即e≥127),则不压缩它并保留原始的32位(NO COMPRESS)。如果f小于错误界限,则我们不会保留f中的任何位(0BIT COMPRESS)。当梯度值在此范围内(误差范围<f <1.0)时,由于我们需要保留精度,因此应该采取较不积极的方法。最简单的方法是截断尾数中的一些LSB位。但是,这种方法不仅限制了最大可获得的压缩率,因为我们需要为符号和指数位保留至少9个MSB位,而且随着截尾尾数位数的增加,精度也会受到显着影响。相反,我们的方法是始终将e设置为127,并且在压缩的位向量中不包括指数位。将e标准化为127本质上是将2(127)乘以输入值。因此,我们需要记住被乘数,以便可以对其进行解压缩。为了对该信息进行编码,我们在m的MSB处串联一个1位的“ 1”,并将其右移127še位。
减压
算法3描述了采用压缩位向量v和2位标签t的解压缩算法。当t为NO COMPRESS或0BIT COMPRESS时,解压缩的输出分别为32位v或零。如果t为8BIT COMPRESS或16BIT COMPRESS,则应从v重构32位IEEE 754浮点值。首先,通过取v的第一位来获得符号位s。然后找到与MSB的距离到v中的第一个“ 1”,这是在压缩过程中用于将指数设置为127的乘数。一旦获得距离,就可以通过从127中减去距离来计算e。下一步是通过将v向左移动距离并用零填充LSB以在压缩过程中填充截断的位来获得m。由于现在有了s,e和m,我们可以将它们连接在一起作为一个32位IEEE 754浮点值,并将其作为解压缩输出返回。
梯度交换网络内加速器
应用压缩算法后,我们可以显着减少INCEPTIONN中节点之间交换的数据量,但我们的最终目标是减少总训练时间。
在软件中直接运行这些压缩算法,虽然减少了通信时间,但会给计算资源带来沉重负担,从而严重增加了计算时间。具体而言,由于GPU无法提供有效的位操作(例如,从浮点数中打包一些位),因此此类压缩算法需要在CPU上运行。先前的工作[30]显示,与Snappy 相比,GPU在较低的压缩率下只能提供约50%的吞吐量。图7显示,即使使用最快的无损(Snappy)和有损(SZ [32])压缩算法,训练时间也会增加2-4倍。即使是简单的有损截断操作也会显着增加计算时间,因为简单地打包/解包大量g值也会显着增加CPU的负担。反过来,这也就抵消了减少通信时间的好处,如图7所示,仅略微减少了总训练时间。因此,为了减少通信和计算时间,我们需要INCEPTIONN的基于硬件的压缩。
加速器架构以及与NIC
为了在现实环境中评估我们的系统,我们在Xilinx VC709评估板上实现了加速器,该评估板可提供10Gbps网络连接以及可编程逻辑。我们将加速器插入板卡随附的NIC参考设计中。对于输出流量,如参考设计中所述,数据包DMA通过PCIe链路从主机系统收集网络数据。然后,这些数据包通过压缩引擎,该引擎将生成的压缩数据存储在10G以太网MAC使用的虚拟FIFO中。这些MAC驱动板上的以太网PHY,并通过网络发送或接收数据。对于输入流量,以太网MAC将来自PHY的接收数据存储在虚拟FIFO中。一旦完整的数据包存储在FIFO中,解压缩引擎便开始处理并将其传递给数据包DMA,以传输至CPU。两种引擎都使用标准的256位AXI流总线与其他模块进行交互。尽管压缩和解压缩算法的硬件加速非常简单,但它们在NIC中的集成却带来了一些挑战。
压缩引擎
为了不干扰不应压缩的常规数据包,压缩引擎首先需要确定哪些数据包将用于有损压缩。然后,它需要提取其有效负载,对其进行压缩,然后将其重新附加到数据包。压缩引擎以256位的突发脉冲处理数据包,这是AXI接口可以在一个周期内传送的位数。我们的引擎以这种突发粒度处理数据包,以避免减少NIC的处理带宽。通过将标头中的服务类型(ToS)字段设置为特殊值,我们的软件API将数据包标记为可压缩。由于ToS字段始终加载在第一个突发中,因此压缩引擎在第一个突发中执行序列匹配并标识可压缩数据包。如果ToS值不匹配,则绕过压缩。压缩引擎也不会压缩标题,并且压缩会在有效载荷的第一个突发到达时立即开始。有效负载突发馈送到配备了八个压缩块(CB)的压缩单元,每个压缩块执行算法2中所述的压缩。
我们使用一个简单的二进制移位树来生成对齐的位向量,其可能的大小为0到256。八个CB的2位标签被简单地连接为16位向量。最后,将对齐的位向量和标记位向量串联在一起作为压缩单元的最终输出,该压缩单元的大小至少为16位,最高可以达到272位。对于每个突发,压缩单元产生一个可变大小(16 – 272)的位向量。因此,我们需要对齐这些位向量,以便可以通过AXI接口传输256位突发。对齐单元累积一系列压缩的位向量,并在收集到256位时输出突发。
解压缩引擎
与压缩引擎类似,解压缩引擎以突发粒度处理数据包,并通过第一个突发中的ToS字段的序列匹配来识别接收到的数据包是否被压缩。如果数据包被标识为不可压缩或突发是报头,则将绕过解压缩。可压缩数据包的有效载荷突发被送入解压缩硬件,其结构如图10所示。由于包含8个FP编号的压缩突发可以在解压缩引擎上与两个连续的突发重叠,因此只能读取单个突发。不足以进行分解。因此,解压缩引擎具有一个突发缓冲区,该缓冲区最多可维持两个突发(即512位)。当突发缓冲区获得两个突发时,它将16位标签馈送到标签解码器,以计算八个压缩位向量的大小。给定大小,从缓冲的512位中获得八个压缩位向量。由于每个压缩位向量具有32、16、8或0位的可变大小,因此八个压缩位向量的可能大小为0和256。这八个压缩位向量(0 – 256)和标记位向量(16)被送入解压缩单元中的八个解压缩块(DB),后者执行算法3中所述的解压缩算法。然后,解压缩单元简单地将八个DB的输出连接起来,并通过AXI接口进行传输。
梯度有损压缩的API
我们通过利用IP标头中的ToS字段来识别TCP / IP数据包的上下文[36]。 ToS是TCP / IP数据包标头中的8位字段,用于区分不同的TCP / IP流优先级。我们标记需要压缩/解压缩的数据包,保留的ToSvalue为0x28。对于每个套接字连接,我们可以调用setsockopt函数来设置ToS字段或即时更新它。图11展示了我们如何标记需要在OpenMPI框架中进行压缩/解压缩的TCP / IP数据包。它显示了一个场景,其中我们在服务器上共同运行DNN培训应用程序和其他一些网络应用程序。为了正确标记需要压缩/解压缩的TCP / IP数据包,我们引入了MPI集体通信组件,它是专用的MPI集体通信API集。我们使用默认的MPI集合通讯API无需压缩即可实现第V节中所述的INCEPTIONN算法。 MPI集体通信组件将变量向下传播到OpenMPI网络API,并设置用于通信的相应TCP套接字的ToS选项。我们不会修改Linux内核网络堆栈,并且ToS设置为0x28的数据包会像常规TCP数据包一样到达NIC。在NIC内部,一个简单的比较器检查每个传入数据包的ToS字段。如果ToS字段设置为0x28,则将数据包发送到压缩引擎,否则我们不对传出数据包执行压缩。在接收器节点NIC上,我们有用于输入数据包的相同比较器。如果ToS字段设置为0x28,则对数据包执行解压缩。否则,接收到的数据包是常规的以太网数据包,并直接发送到处理器进行接收。
评估
A 利用INCEPTION的性能提升
作为参考设计,我们在一个由四个工作人员和一个聚合器组成的群集中实现常规的“工人-聚合器”训练算法。表II详细列出了群集上AlexNet,HDC,ResNet-50和VGG-16的培训时间。我们报告了100次迭代训练的绝对时间和标准化时间。不论我们考虑哪种DNN模型,表II均显示
(1)不到30%的挂钟时间用于本地计算,包括向前/向后传播和更新步骤,(2)超过70%时间用于沟通,这清楚地表明沟通是瓶颈。
该结果表明,即使在没有压缩的小型集群中,INCEPTIONN的训练算法也比基于工人聚合器的AlexNet,HDC,ResNet-50和VGG算法的总训练时间缩短了52%,38%,49%和31% -16。与参考设计相比,这是由于通信时间减少了55%,39%,58%和36%。从直观上讲,INCEPTIONN的通信效率更高,因为它不仅消除了瓶颈链接,而且实现了并发节点之间所有链接的利用率。此外,这种平衡的梯度交换还有助于减少计算时间,因为所有节点均以分布式方式进行梯度求和,而基于工作器聚合器的算法会给指定的聚合器节点增加负担,以执行从中收集的梯度的聚合此外,图12比较了参考设计和INCEPTIONN系统的训练时间,它们都装有我们的梯度压缩(WA + C,INC + C)。从结果可以看出,尽管只有一个通信方向适用于压缩,但是基于常规工作集聚器的方法仍可以从压缩中受益,与基线(WA)相比,通信时间减少了约30.8%。另一方面,我们的以梯度为中心的INCEPTIONN算法提供了最大化的压缩机会,因此具有硬件压缩(INC + C)的INCEPTIONN的通信时间比传统的工人聚集器基准(WA)和INCEPTIONN基准降低了约80.7%和约53.9% (INC)。因此,完整的INCEPTIONN系统(INC + C)证明了在相同时期内训练的四个模型的训练时间提速是传统方法(WA)的2.2〜3.1倍。
B INCEPTIONN压缩对最终精度的影响
为了了解我们的有损压缩对准确性(以及长期培训)的影响,我们采用了传统的工人聚集系统(WA)和INCEPTIONN系统(INC + C),并对模型进行训练,直到两个系统收敛到相同水平的准确性。图13展示了历时总数和INCEPTIONN系统在传统训练系统上达到相同精度水平的最终加速。据此,我们观察到仅需要少量的几个纪元(1或2个)即可达到最终精度,因此INCEPTIONN系统仍可将速度提高2.2倍(VGG-16)至3.1倍(AlexNet)。
C 对INCEPTION压缩算法的评估
单纯的浮点值截断仅提供了低的恒定压缩率(即最多4倍),同时遭受了相当大的精度损失(即,训练有素的ResNet-50的预测精度下降了62.4%) 。这是由于这样的事实,即由幼稚的截断引入的压缩错误不受控制并且是开放式的。而且,截尾的可能性受到尾数长度的限制。丢弃更多的比特将扰动指数(例如,图14中的“ 24b-T”),这导致训练的DNN的准确性的显着损失。通常,截断方法仅适用于HDC等较简单的DNN,不适用于AlexNet,VGG-16或ResNet-50等复杂DNN。相比之下,我们的有损压缩显示出更高的压缩率(即14.9x)甚至比截断情况更好地保留了训练质量,即使对于那些复杂的DNN。图14显示了由我们的算法很好地控制了由压缩引起的误差,并且通过放松给定的误差范围可以提高平均压缩率。
D INCEPTION可扩展性
比较了INCEPTIONN基线(INC)和worker-aggregator基线方法(WA)之间的梯度交换时间,两者在不同数量的worker节点上都没有压缩。如图15所示,梯度交换时间几乎随WA集群中工作节点的数量线性增加;但是,它在INCEPTIONN集群中几乎保持不变,尤其是在训练较大模型(例如,网络带宽成为瓶颈)的AlexNet,VGG-16和ResNet-50时。这种现象似乎很直观,因为在WA集群中,通信负载和求和负载都使聚合器节点拥塞,而INCEPTIONN方法通过在工作节点之间平均分配这两个负载来平衡这两个负载。
相关工作
- 利用专用加速器进行机器学习的工作量很大。大多数工作都集中在推理阶段,而INCEPTIONN专门旨在加快训练阶段。利用专用加速器进行机器学习的工作量很大。大多数工作都集中在推理阶段,而INCEPTIONN专门旨在加快训练阶段。
- 分布式训练算法。 这些方法假设
(1)权重确实稀疏
(2)框架使用集中式节点更新和维护权重。
相反,我们的工作是一个以梯度为中心的框架,该框架仅在计算节点之间交换梯度值以更新每个权重,这利用了我们的观察结果,即梯度值比权重值更能容忍更具侵略性的有损压缩。因此,我们的框架可以有效地支持密集的权重,而不会显着降低训练过程的准确性。 - 渐变减少技术。已经提出了一系列工作,提出了减少梯度的技术。梯度量化技术提供了算法解决方案,可在保持训练能力的同时降低梯度精度。 Deep Gradient Compression 是一种补充方法,它通过在每次迭代中跳过梯度的通信来减少通信量。仅当本地累积的梯度超过某个阈值时,它才会传递梯度。这些工作不会改变分布式培训的工作人员—聚合人员的性质,也不会提出网络内压缩的加速。
总结
交流是分布式培训中的重要瓶颈。社区已通过提供算法创新并采用更高速度的网络结构来积极应对这一挑战。但是,缺少一种解决方案可以结合考虑这些方面并提供适合于分布式培训的互连基础结构。 INCEPTIONN是朝这个方向迈出的第一步,它们共同设计硬件和算法,以
(1)提供用于梯度有损压缩的网络内加速器
(2)通过引入以梯度为中心的分布式训练来最大化其收益。我们的实验表明,INCEPTIONN可以将通信时间减少70.9%至80.7%,与传统训练系统相比,可以提高2.2〜3.1倍的速度,同时达到相同的准确性水平。