Faster Asynchronous SGD

本文提出FasterASGD算法,通过改进陈旧梯度度量加速异步SGD收敛,同时在分布式训练中降低带宽需求。FASGD利用梯度统计移动平均量化陈旧性,相较于现有方法在性能和可扩展性上有所提升。此外,带宽感知FASGD (B-FASGD)通过智能调整通信频率,减少了5倍总带宽使用,而对收敛影响轻微。
摘要由CSDN通过智能技术生成

Faster Asynchronous SGD

更快的异步SGD

摘要

异步分布随机梯度下降方法由于陈旧的梯度而难以收敛。如果此后已在服务器上更新了用于计算该梯度的参数,则客户端发送给参数服务器的梯度更新将失效。已经提出了解决该问题的方法,该方法根据经过的更新次数来量化陈旧性。在这项工作中,我们提出了一种新颖的方法,可以根据梯度统计的移动平均值来量化陈旧性。我们证明,在收敛速度和对许多客户端的可伸缩性方面,该方法优于以前的方法。我们还将讨论在分布式训练环境中如何使用此方法的扩展来显著降低带宽成本。特别是,我们的方法允许将总带宽使用量减少5倍,而对成本收敛的影响很小。我们还将描述(并链接到)一个软件库,该软件库已用于在一台机器上确定性地模拟这些算法。

1 INTRODUCTION

可以使用分布式随机梯度下降(SGD)在多台机器上同时训练神经网络。如Dean等人所述,这可以在商用CPU集群上完成。 (2012年)和Chilimbi等人。 (2014),或在Seide等人的机器的异类混合物中使用。 并且Wu等 (2015),无论哪种情况,都将在每台单独的计算机上创建网络的副本。这些副本计算机称为客户端。一台计算机保存模型参数的规范快照,而该计算机称为服务器。客户端随机抽取一小批训练数据,并对其模型副本执行反向传播,以保持梯度估计。然后,此估计值将发送回服务器以应用于全局参数。如果服务器在将所有客户端更新应用到其参数之前等待收集所有客户端更新,则可以说SGD是同步的。如果服务器在收到更新时应用更新(如Bengio等人(2003年首次引入)),我们可以说SGD是异步的。每种方法各有利弊。同步SGD的速度较慢,因为客户端花了一些时间等待,但是它没有汇聚问题。异步SGD消除了等待,但是由于陈旧的渐变,可能无法收敛。因此,当客户端数量很多时,有效处理陈旧的梯度对于实现异步分布式训练算法的良好性能至关重要。

在Chan&Lane(2014)中,他们提出了陈旧渐变的指数惩罚。 这可能适用于少量客户,但是当陈旧性值较大时,它将使学习率降低太多。

在张等 (2015年),他们提出了一种了解陈旧性的异步SGD。 在参数服务器上下文中的异步梯度更新的上下文中,他们说,如果自那时以来,用于计算该梯度的权重已更新k次,则从工人发送到参数服务器的梯度将以k步为单位。

然后,他们描述了根据陈旧性度量来调节学习率的策略。 这可以通过在应用梯度更新之前用陈旧性度量简单除以梯度更新来完成。 我们称该策略为感知陈旧的异步SGD(SASGD)。

SASGD在收敛性方面优于ASGD,但通过在计算陈旧性时将所有梯度都视为相等,可以将性能留在桌面上。 在本文中,我们通过将学习率作为梯度统计的移动平均值的函数进行调制来利用这种松弛。 正如我们将要展示的那样,这个想法产生了更好的收敛性能。 我们称这种新算法为Faster ASGD(简称FASGD)。 我们将类似的想法应用于减少分布式训练环境中带宽使用的问题,并在那里也获得了良好的结果。 我们将第二种算法称为“带宽感知更快的ASGD”(简称B-FASGD)。

本文的其余部分组织如下:首先讨论背景和术语。我们继续介绍FASGD和B-FASGD算法。然后介绍我们的实验架构,最后给出实验结果。

2 THE FASGD ALGORITHM

在继续讨论FASGD及其变体之前,我们首先介绍现有的可识别过时的算法。

2.1 BACKGROUND

我们采用Zhang et al.(2015)的符号来描述异步训练会话,并做了一些细微的修改:

λ:客户端数量。

µ:所有学习者用来产生随机梯度估计的minibatch size

α:master学习率。个体的学习速度是通过修改它来实现的。

T:标量时间戳,用来跟踪对主参数的更新次数。

时间戳从0开始,每次权重更新都加1(不管客户端的数量或计算更新所涉及的minibatch的大小)。

梯度的时间戳是指用于计算梯度的参数的时间戳。

  • :随机梯度下降的step-staleness来自客户端l的带有时间戳参数。客户端将带有时间戳j的梯度传给时间戳为i的参数服务器,其中i>=j。我们计算梯度的step-staleness 作为i−j。step-staleness总是非负的定义。

由于异步SGD有很多可能的实现,我们正式指定了本文使用的算法:

异步SGD协议:在这个协议中,所有λ客户端异步并行计算梯度。当一个客户端l计算的梯度 ,它等待获取参数服务器上的锁(一次只有一个客户端可以与服务器通信)。当客户端获得锁时,在锁被释放之前,以下事情会自动发生:

在Zhang等人(2015)中,他们提出在每个梯度的基础上调制学习速率。因此,它们的梯度更新策略如下:

其中α(τi,k)是 step-staleness相关的学习率,k是客户标识符。

他们表明,这种修改可以收敛较大的λ值。这是有意义的,因为λ值越大,平均step-staleness就越高。

2.2 IMPROVEMENTS

本文的一个主张是,上一节定义的step-staleness可以作为过时程度的度量得到实质性的改进。在接下来的内容中,我们将介绍一种我们认为更好的度量方法。

考虑一个具有梯度θi的服务器,一个客户端l对参数θj进行训练,其中j<=i。假设问题客户端随后发送一个梯度估计数给服务器,其间没有参数更新。

其中,是客户l计算的随机梯度,如果客户端l用θi而不是θj,那么θi是客户端l用相同的minibatch计算出的随机梯度。

为什么这是一个更好的措施,我们可能不会马上明白,但我们将在下面证明这一点。

基本思想如下:考虑客户端l在参数θi-2上进行训练,而服务器具有参数θi。 如果客户端l是下一个将随机梯度发送到服务器的客户端,则该梯度将具有步骤陈旧性。现在,在这种情况下,主节点θi上的参数副本可以表示为,其中g1和g2是通过将某些学习率乘以某些客户端返回的随机梯度的平均值(通过minibatch)而计算出的更新。 在异步环境中,g1和g2可能是客户端生成的过时的参数。

但是,并非所有的对g1,g2都会导致相同数量的B-Staleness。 如果g1和g2在很大程度上相互抵消,则Γ将小于g1和g2在大多数情况下具有相同符号的情况。 如果Hessian在θi处具有较大的值,则Γ将高于Hessian具有较小值时的Γ。 在我们的同步协议中考虑这些问题似乎是明智的。

我们关心过时性,因为使用过时参数计算的随机梯度将是参数空间中当前点处真实梯度的偏差估计。 特别是,对于任何陈旧的梯度,我们可以将其与真实梯度的差异分解为由于使用SGD而不是批处理GD而产生的差异,以及差异(一种偏差方差分解的种类异步SGD。)。 由于我们无法控制第一个分量(除非更改µ,否则)可以合理地说,出于我们的目的,我们只关心B-Staleness。

公式3中定义的B-Staleness可以(使用泰勒级数展开)近似表示,即我们在参数空间中移动的距离乘以相对于参数空间变化的梯度的变化率。这个近似很难精确计算,因为它涉及到更高阶的导数,但在我们可以近似它的范围内,我们将使用一个比SASGD更有严格信息的度量,因此应该能够提高收敛性。

从Graves(2013)的RMSProp版本(在Tieleman&Hinton(2012)中引入)的启发中,我们可以执行以下操作:保持每个参数的标准偏差的全局移动平均值。 在更新时,根据此移动平均值和逐步陈旧度调整每个参数的学习率。 更正式地,我们提出以下协议,我们称为FASGD:

FASGD:在这个协议中,每个学习者l从参数服务器提取权重,计算梯度,并将梯度推到参数服务器,就像在前面定义的ASGD协议中一样。在ASGD中,参数服务器在从任何λ学习者接收到一个梯度后更新权重。我们保持梯度标准差的移动平均如下:

其中γ和β是超参数,并且用于数值稳定性。 ni是将所有参数串联成一个向量。 bi和vi的形状相同,并且所有算术(包括平方)都是元素形式的。

FASGD权重更新规则由下面给出:

其中k是客户端标识符。

在移动平均窗口和λ之间似乎应该有一个更原则性的关系,但是如“实验结果”部分所示,我们能够通过这种启发式方法获得良好的性能结果。

从直觉的角度来看,很高兴理解为什么将学习率除以标准差对我们有帮助。 对此进行考虑的一种方法如下:如果Hessian具有较大的值,则我们期望从梯度到梯度会有很大的变化,因此我们应该看到较高的梯度标准偏差。 我们还期望在这种情况下具有更高的B-Saleness,因此除以梯度标准偏差的移动平均值似乎可能有助于收敛。

我们还可以考虑梯度相互抵消的可能性。 如果渐变彼此抵消,则它们必须已更改符号。 在符号变化的地方,可能会有更高的梯度标准偏差(或者梯度开始时很小)。 因此,除以标准偏差应该考虑抵消作用。

总体而言,由于以下两个原因,FASGD应该比SASGD导致更好的收敛:首先,当B-Saleness小于step-saleness估计时,它将使我们能够保持较高的学习率。 其次,当B-Saleness高于step-saleness的估计时,它将防止我们超调。

2.3 BANDWIDTH AWARE FASGD

Dean等人(2012年)建议通过限制每个模型副本仅在每个步骤中请求更新参数并仅在每个步骤中发送更新的梯度值(其中可能不等于)来减少分布式训练算法的带宽消耗。 这种方法在一定程度上可行,但是有两个明显的缺点。 首先,带宽消耗的分布会有些高峰。 从吞吐量的角度来看,这是次优的。 其次,可实现的带宽减少量将取决于B-Saleness,但是此方法在训练开始时就固定了一定数量并坚持使用。

我们尝试如下解决这两个问题。 首先,我们决定是否在任何给定时间推送或获取都是概率选择。 也就是说,当客户必须决定要推送还是提取时,它会生成一个伪随机数,并将该数与其他数量进行比较。 如果伪随机数大于该数量,则数据将被丢弃-否则将被发送。 其次,我们通过已经为FASGD算法计算出的梯度标准偏差的移动平均值来调制决定在给定机会下推或提取的可能性。

更正式地说,客户端有机会传输一个梯度或接收一个参数更新,当且仅当

其中r∈[0,1]是一个随机数,是为数值稳定而添加的一个小常数,c是一个超参数,v是由FASGD计算的其标准偏差的移动平均值的所有参数的平均值 服务器。 在实践中,我们将有单独的超参数用于推入和提取。 我们将上述算法(结合FASGD策略)称为B-FASGD策略。

请注意,如果v很大,方程式9的右侧将接近1,因此几乎可以保证传输。 如果v接近0(始终为非负数),则右侧将很小。 因此,右侧位于(0,1),并且与梯度标准偏差成反比。 这意味着当我们期望B-Staleness高时,我们将更频繁地发送信号,从而减少步骤Staleness。 当我们期望B-Staleness较低时,我们将跳过更多更新,因为错过的每一步都对应于较少的累积B-Staleness。

值得一提的是,删除参数与删除渐变更新不同。 当客户端放弃参数更新时,它仅继续使用其已有的参数计算梯度。 当客户决定删除渐变更新时,不清楚应该怎么做。 我们选择从该客户端重新应用最新的渐变,但这需要在服务器上维护渐变缓存,这可能对于较大的λ值或大型模型来说是禁止的。 以某种方式在客户端上平均未发送的梯度,直到传输时间会更好。 无论如何,事实证明(请参见“实验结果”部分),下降梯度远不如下降参数有效,因此该决定在实践中可能无关紧要。

3 EXPERIMENTAL SETUP

在本节中,我们将描述FRED ----- 一个用于在单个节点上确定地模拟分布式训练算法的Python库。FRED的源代码在https://github.com/DoctorTeeth/fasgd。稍后,我们将描述如何使用FRED为FASGD生成实验结果。

FRED的工作方式是对分布式训练算法进行惯用描述,并在单个节点上确定地运行它。这是有用的原因如下:

首先,决定论有助于调试和实验。它允许我们检查应该按位等效的运行是否按位等效。例如,我们可以检查同步SGD与λ客户端和批大小µ是相同的算法香草SGD与批大小µ/λ。如果没有这个特性,我们对实现正确性的置信度就会大大降低。

其次,建立一个大的训练集群是一个考验。这很困难,也很昂贵,而且结构上的差异使它很难重现结果。此外,特定系统中涉及的quirks可能会模糊算法方面的考虑。使用模拟器可以测试所有拓扑的训练算法,因为您可以完全控制从不同客户端发送更新的顺序(可以是概率的)。

为了生成FRED运行,用户实现了一个具有特定接口的服务器类。实现的类控制如何以及何时将梯度应用到服务器参数。更具体地说,服务器类必须实现一个初始化函数和一个应用更新函数。

初始化函数创建各种数据结构来跟踪所发生的事情。例如,FASGD服务器需要数据结构来跟踪梯度统计信息。

apply-update函数采用3个参数:渐变更新,生成更新的客户端的客户端ID,以及客户端用于生成更新的参数的时间戳。 然后,以适当的方式将更新应用于参数。 例如,在同步SGD服务器中,应用更新功能通过以下Python代码实现:

指定这两个函数的行为将唯一地定义FRED服务器的行为。

然后,服务器连接到一个调度程序和一组客户端。调度程序将管理模拟哪个梯度更新来自什么客户端。此模拟将确定每个客户端被选中的概率以及该概率在该客户端被选中时如何变化的规则作为参数。dispatcher还将接受参数函数,分别决定是否获取和/或推送参数和梯度。

对于图书馆,我们至少做出了一项有根据的决定,值得进一步讨论。 客户端将渐变推送到服务器后,它将等待结果参数更新(或不更新),然后恢复其计算。 这在某些方面是好的,而在其他方面则是坏的。 如果应用更新的开销相对于计算梯度的开销较小,并且/或者如果我们非常关注陈旧性,那么我们也可以等待。 如果我们非常关心吞吐量,则可以使用最新计算的参数集。 我们可能决定使它可配置,或者想出一些更通用的框架,其中免费提供此特定决策的可配置性。

4 EXPERIMENTAL RESULTS

接下来,我们讨论使用FRED生成的实验结果。 我们将LeCun等人的MNIST任务中的FASGD与SASGD进行了比较。我们还将FASGD与B-FASGD进行比较。

4.1 FASGD

我们使用在MNIST任务上训练的2层MLP测试了FASGD协议。MLP有200个隐藏单位。这些使用了一个relu激活,而成本是负对数可能性,这是标准的。

结果如图1所示,并通过以下方式生成:我们考虑了µ和λ的4种组合:即µ = 1,λ= 128,µ = 4,λ= 32,µ = 8,λ= 16,和μ= 32,λ=4。按照Gupta等人的建议,将乘积μλ保持恒定,以便在所有4次运行中保持相对相似的收敛性能。 (2015)。我们从16种候选学习率中分别为FASGD和SASGD选择最佳学习率(在4种组合中)。如图中的标签所示,FASGD的费率为0.005,SASGD的费率为0.04。每个配置运行100,000次迭代,其中每个迭代对应于一个客户端,该客户端计算单个小批量的梯度估计。无论µ和λ如何,FASGD的性能都显着提高(收敛更快,成本更高)。相对于不同的随机初始化,该差异也是健壮的。为了公平起见,我们没有调整FASGD超参数。如果我们这样做,我们预计FASGD的表现将比SASGD更大。

µ中的一些值可能看起来很小,但选择它们是为了与Zhang et al.(2015)的实验进行比较。此外,Lavin & Gray(2015)的研究表明,至少对于卷积网络来说,在小批处理规模介于1到64之间时,可以实现良好的吞吐量。还值得一提的是,下一个实验显示,在µ= 128时,FASGD的性能优于SASGD,这是一个完全标准的小批大小。

我们还测试了FASGD和SASGD之间的差异如何随λ的变化而变化。 结果如图2所示。我们尝试了λ值250、500、1000和10,000。 µ = 128,并且与第一个实验的学习率相同。 我们使用了前面介绍的ASGD策略。 在所有情况下,FASGD均胜过SASGD,但相对性能随λ的增加而增加。 由于总的陈旧度随着λ的增加而增加,这为我们的假设提供了证据,即当陈旧度较高时,FASGD会提供更多帮助。 这些结果还表明,FASGD可以通过帮助我们增加λ来提高分布式训练环境中的速度。

图1:FASGD(蓝色)和SASGD(绿色)的MNIST验证成本。 对于所有测试的µ和λ组合,FASGD的性能均优于SASGD。 从左到右,从上到下,批次大小分别为1、4、8和32。µ和λ的乘积保持恒定为128。

4.2 BANDWIDTH AWARE FASGD

我们使用了以前的模型,也在MNIST上。然而,在本节中,我们感兴趣的是在多大程度上可以减少带宽使用,同时仍然可以获得良好的收敛性能。

我们使用前面定义的标准FASGD模型作为基线的B-FASGD协议-我们在图3中显示了结果。

如上所述,我们将带宽使用分为从服务器到客户端的参数副本和从客户端到服务器的梯度副本(分别为获取和推送)。我们发现,可以在不严重影响性能的情况下显著减少fetch的使用,而减少push的使用则会迅速导致训练的分歧。

具体来说,实验表明,在读取通信中减少10倍是可能的(对应于总带宽使用减少5倍),但是尝试减少少量的推送通信是不太成功的。这可能是我们放弃梯度更新的简单方法的产物,而一些更复杂的方法会做得更好。

值得特别注意的一点是,副本图与潜在副本图具有负的“二阶导数”。这表明,通过梯度统计来调节带宽使用是有意义的。如果系统在训练的早期受到带宽的限制,它不需要在训练的后期受到限制。它还提出了一个有趣的实际应用——随着训练的进行,可以动态地提供更多的客户端,保持带宽使用的稳定。

5 FUTURE WORK

我们很高兴能进一步扩展这项工作。

图2:用不同λ值测试FASGD(蓝色)和SASGD(绿色)的MNIST验证成本。从左到右,从上到下,使用的λ值是250,500,1000,10000。

我们希望通过在每个张量的基础上同步参数来扩展B-FASGD。因为我们动态地选择何时使用每个参数的移动平均线进行同步,所以我们可以选择更频繁地更新参数,当它们的移动平均线表明更有可能过时时,反之亦然。

确定带宽预算并使用梯度统计信息根据过时的可能性动态地将该预算的部分分配到不同的张量可能会很有趣。

我们还想探究为什么收敛性能对推送速率的变化比抓取速率的变化敏感得多。

最后,最好在Lian等人的文章中给出形式的收敛保证。 (2015)。 我们还想更正式地描述带宽使用和收敛之间的权衡,以及调制精度和计算成本之间的权衡。 这最后两个使我们成为值得更多考虑的基本问题。 这项工作与分布式系统中的正式工作之间可能存在一些相互作用。

6 CONCLUSION

综上所述,本工作的主要技术贡献如下:

我们介绍了一种用于异步梯度下降的新算法(FASGD),它比当前的技术水平收敛更快,成本更低。

我们证明了这些想法的扩展可以用于在分布式环境中显著降低带宽成本。

我们提供了一个开源框架,用于在一台机器上以确定的方式评估分布式训练算法。

图3:各种c值的B-FASGD的收敛和带宽使用(推和取)。第一行显示了调制kfetch的结果。下面一行显示了调制just kpush的结果。

我们希望这项工作将在所有情况下认真加速大型深层神经网络的分布式训练,但是我们希望在陈旧性分布表现不佳的情况下,它尤其重要。 例如,当训练集群庞大且异构时,我们预计FASGD将比SASGD表现更好。 如Bengio等人所述,FASGD还可用于条件网络的分布式训练。 (2015)。 如果对于给定的输入仅更新某些张量,则通过网络有选择地发送每个张量更新可能是有益的。

感谢:我们感谢Theano的开发者(Bergstra et al.(2010))。我们还要感谢Yoshua Bengio提供有帮助的讨论和反馈。

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值