【译】Distributed Deep Learning - Part 1 - An Introduction

注意:同时,我发表了关于并行梯度下降的硕士论文 ,该论文提供了对下述概念的完整和更详细的描述。

在以下博文中,我们研究分布式深度学习的主题,或者更确切地说,如何使用数据并行方法来并行化梯度下降。 我们从阐述理论开始,同时向您提供我们应用的技术方面的一些直觉。 在这篇博文的最后,我们进行了一些实验来评估不同的优化方案在相同情况下的表现。 我们还介绍了dist-keras ,它是我们在Apache SparkKeras之上构建的分布式深度学习框架。 为此,我们提供了几个笔记本和示例 。 该框架主要用于测试我们的分布式优化方案,但是,它在CERN中也有几个实际应用,不仅是因为分布式学习,还有用于模型服务的目的。 例如,我们提供了几个示例 ,向您展示如何将此框架与Spark Streaming和Apache Kafka集成。 最后,这些系列将包含我的硕士论文研究的部分内容。 因此,他们将主要展示我的研究进展。 但是,有些人可能会发现我在这里提出的一些方法可以用于他们自己的工作。

介绍

无监督的特征学习和深度学习表明,能够训练大型模型以丰富数据量可以大幅度提高模型性能。 但是,请考虑使用数百万甚至数十亿个参数来训练深度网络的问题。 我们如何在不等待几天甚至几周的情况下实现这一目标? Dean等人。 [2]提出了一个不同的训练范例,它允许我们在多台物理机器上训练和服务一个模型。 作者提出了两种新的方法来完成这一任务,即模型并行数据并行 。 在接下来的博客文章中,我们将简要提及模型并行性,因为我们主要关注数据并行方法。

旁注:为了简化图形,并使其更直观,我们否定了渐变  \ nabla f ∇f不加a  - -在前面签字。 因此,除非另有说明,否则以下图中的所有渐变符号将被默认取消。 我其实忘了否定数字中的渐变,所以提到这是一个简单的解决方法。 但是,这将在主题论文的最终版本中得到纠正。

模型并行

模型并行中 ,单个模型分布在多台机器上。 在多台机器上分发深层网络的性能优势主要取决于模型的结构。 具有大量参数的模型通常可以获得更多的CPU内核和内存,因此,并行化大型模型会显着提高性能,从而缩短培训时间。

让我们从一个简单的例子开始,以便更清楚地说明这个概念。 假设有一个感知器,如图1所示。为了有效地对其进行并行化,我们可以将神经网络视为一个依赖图,其中目标是最小化同步机制的数量,假设我们拥有无限资源。 此外,只有当节点具有多于1个变量依赖性时,才需要同步机制。变量依赖性是可以随时间变化的依赖性。 例如,偏差是静态依赖性,因为偏差的值随时间保持不变。 在图1所示感知器的情况下,并行化非常简单。 应该实现的唯一同步机制在于输出神经元  y \ triangleq \ sigma(\ sum_i w_ix_i) y≜σ  Σi w ix i其中  \西格玛 σ是输出神经元的激活函数。

模型并行

图1:使用模型并行模式进行分区的感知器。 在这种方法中,每个输入节点都负责接受输入  X_I x i来自某个来源,并将输入与相关联的权重相乘  w_iW I。 乘法之后,结果被发送到负责计算的节点  ÿ y 。 当然,这个节点需要一个同步机制来确保结果是一致的。 同步机制通过等待y依赖的结果来实现这一点。

数据并行性

数据并行性是优化参数的固有不同方法。 总的想法是通过拥有减少训练时间  ñ n工人通过处理优化中央模型  ñ 并行处理数据集的不同分片(分区)。 在这个设置我们分发  ñ n个模型副本在n个处理节点上,即每个节点(或进程)都拥有一个模型副本。 然后,工作人员使用分配的数据分片训练他们的本地副本。 但是,可以通过这样的方式来协调工作人员,使他们一起优化单一目标。 有几种方法可以实现这一点,这些将在接下来的部分和博客文章中详细讨论。

尽管如此,优化这一目标的一种常用方法是采用集中式参数服务器 。 参数服务器负责模型更新的汇总,以及来自不同工作人员的参数请求。 分布式学习过程首先将数据集划分为几部分  ñ n 碎片 。 每个单独的分片将被分配给特定的工作人员。 接下来,工人将从其碎片中采样小批量以训练本地模型副本。 在每个小批量(或多个小批量)之后,工作人员将与参数服务器通信一个变量。 这个变量在大多数情况下是渐变的  \ nabla f_i(x) ∇f i x  。 最后,参数服务器将通过应用知道如何处理这个变量的特定更新过程来整合这个变量。 这个过程会重复进行,直到所有工人都从他们的碎片中抽取所有的小批次。 图2总结了这一高级描述。

数据并行性

图2:数据并行方法的示意图。 在这种方法我们产卵  ñ n个工作人员(不一定在不同的机器上),并将数据集的数据分片(分区)分配给每个工作人员。 使用这个数据碎片,一名工人  一世 将遍历所有小批量生成一个渐变,  \ nabla f_i(x) ∇f i x 为每个小批量  X x 。 下一个,  \ nabla f_i(x) ∇f i x 被发送给参数服务器,参数服务器将使用更新机制合并渐变。

途径

在本节中,我们讨论几种平行梯度下降(GD)的方法。 这不是一个直观的任务,因为梯度下降是一种固有的顺序算法,其中每个数据点(实例)都提供了一个最小的方向。 但是,在使用非常大的数据集的同时训练具有大量参数的模型将导致较高的训练时间。 如果人们希望缩短培训时间,那么明显的选择是购买更好的,或更确切地说,更适合的硬件(例如GPU)。 但是,这并非总是可行的。 出于这个原因,已经做了几次并行化梯度下降的尝试。 在下面的小节中,我们将研究一些常用的并行化梯度下降方法,并提供这些技术工作的一些直觉,以及如何使用它们。

同步数据并行方法

解决数据并行性有两种截然不同的方法。 就个人而言,最直观的概念是同步数据并行性 。 在同步数据并行中,如图3所示,所有工作人员基于相同的中心变量计算其梯度。 这意味着每当工作人员计算出当前批次的梯度时,它将向参数服务器提交一个参数(即模型的梯度或参数化)。 但是,在将这些信息纳入中心变量之前,参数服务器会存储所有信息,直到所有工作人员完成工作。 之后,参数服务器将应用特定的更新机制(取决于算法)以将提交合并到参数服务器中。 实质上,可以将同步数据并行化看作是并行化小批量计算的一种方式。

同步数据并行

图3:在同步数据并行设置中,有一个  ñ n个工作人员(不一定在不同的机器上)。 在训练过程开始时,每个工人都会获取最新的中心变量。 接下来,每个工人都将开始他们的训练程序。 在计算梯度后,工作人员将计算出的信息(梯度或参数化,取决于算法)提交给参数服务器。 但是,由于未建模的系统行为,一些工作人员可能会导致严重的延迟,从而导致其他工作人员无任务,同时仍占用相同的内存资源。

然而,由于工人的未建模系统行为,工人可能会在一定的延迟下实施其结果。 取决于系统负载,这种延迟可能非常重要。 因此,这种数据并行方法就是一个古老的说法: “同步数据并行方法只是与集群中最弱的工作者一样强大 :-)” 。

模型平均

实质上,这是引言中提到的一种数据并行方法。 但是,与更传统的数据并行方法相反,没有参数服务器。 在模型平均中,每个员工在培训期间开始时都会获得模型的副本。 然而,如图4所示,人们可以使用不同的权重初始化技术来覆盖更多的参数空间,如图4所示。尽管如此,不建议这样做,因为这会为每个工人带来非常不同的解决方案。 因此,浪费最初的迭代收敛于所有工人“同意”的“良好解决方案”。 然而,这个问题与这里讨论的大多数分布式优化算法有关,并将在以下博客文章中更详细地讨论。

在每个工人用模型副本初始化之后,所有工作人员彼此独立地开始训练过程。 这意味着在培训过程中,工人之间不会进行沟通。 因此,消除了参数服务器方法中存在的通信开销。 在一个时代结束后,即数据集的完整迭代结束后,这些模型将在单个工作人员上进行汇总和平均。 然后将得到的平均模型分发给所有工人,训练过程重复,直到平均模型收敛。

模型平均

图4:在这个环境中,我们有4个独立的工人,每个工人都有一个随机初始化模型。 为了简化情况,让我们假设我们可以直接从中获得梯度  E(\ THETA)E  θ  ,这是我们的损失函数。 在模型平均中,每个工人只将梯度下降应用于其自己的模型,而不与其他工人通信。 在一个时代结束后,如中心图所示,对这些模型进行平均以产生一个中心模型 。 在接下来的时代,中央模型将被用作所有工人的出发点。

EASGD

EASGD或弹性平均SGD,由Zhang等人介绍。 [3] ,是一种分布式优化方案,旨在减少与参数服务器的通信开销。 这与DOWNPOUR等方法形成对比,大多数情况下需要小的通信窗口才能正确收敛。 小通信窗口的问题是需要停止学习过程,以便使模型与参数服务器同步,并因此限制培训过程的吞吐量。 当然,模型中的参数数量也是一个重要因素。 例如,可以想象,如果每发生5次与参数服务器的最小同步时间,则具有100 MB值的参数的模型可能会严重影响训练性能。 此外,作者指出,由于分布式性质,工人对附近参数空间的探索实际上改善了模型在顺序梯度下降方面的统计性能。 然而,目前,我们没有任何证据支持这一说法,也没有否认。 我们所观察到的是,单个时代之后模型的统计性能通常(明显)低于亚当(顺序训练)和ADAG(分布式训练)的单个时代。 但是,如果我们让EASGD达到相同的wallclock培训时间,那么我们仍然会有相同或稍差的模型性能。 所以有证据表明这种说法并不完全正确,至少在EASGD的情况下。 但是,这需要更多的调查。

作者通过在工人参数和中心变量之间施加“弹性力”来解决沟通约束。 此外,由于与参数服务器的通信的弹性和减少,允许工作人员探索周围的参数空间。 如上所述,作者声称允许更多的探索可以有利于模型的统计性能。 但是,我们认为,如同模型平均一样,如果工作人员处于中心变量的附近,这只会工作得很好,我们将在实验部分凭经验显示这一点。 但是,与模型平均值相比,工作人员与中心变量不同步。 这引出了一个问题,EASGD如何确保工人保持在中心变量的“邻居”? 因为在模型平均中,太多的参数空间探索实际上会恶化中心变量的性能,并且可能会阻止收敛,因为工作人员会覆盖参数空间固有的不同空间,如图4所示。但是,如果弹性参数太高,根本不会进行探索。

 \ theta ^ i_ {t + 1} = \ theta ^ i_t - \ eta \ nabla f(\ theta ^ i_t) - \ eta \ rho(\ theta ^ i_t - \ theta ^ c_t)   θt + 1i= θti- η∇f  θti - ηρ  θti- θtc(1)
 \ theta ^ c_ {t + 1} =(1-n \ eta \ rho)\ theta ^ c_t + \ eta \ rho(\ frac {1} {n} \ sum_ {i = 0} ^ {n} \ theta ^ I_T)       ñ    1    Σi = 0nθt i(2)

为了充分理解EASGD方程的含义,如方程1和方程2所示,我们将读者引用到图5,该图显示了弹性力背后的直觉。 有两个向量,渐变  \ nabla f ∇f和弹性差  \ eta \ rho(\ theta ^ i_t - \ theta ^ c_t) ηρ  θti- θtc其中  \ ETA η是学习率和  \ RHO ρ是弹性参数,作者说什么时候  \ RHO ρ很小,您可以更多地探索参数空间。 这可以从图5中观察到  \ RHO ρ很小,矢量  \ eta \ rho(\ theta ^ i_t - \ theta ^ c_t)ηρ  θti- θtc也将很小(除非工人和中心变量之间的距离很大)。 因此,中心变量和工作人员之间的吸引力很小,因此可以更多地探索参数空间。

类似地,想象你正在与你的狗散步,而狗则负责让你回家(引导你至少)。 如果你让你的狗离你太远(因为你的皮带很灵活(很小)  \ RHO ρ ))。在最极端的情况下,狗没有你就会回家,因为你的皮带太灵活了。 结果,狗不能把你拉回家。 在这一点上你认为,也许我应该买更多的狗? 以为他们会一起帮助你。 然而,由于这些生物的性质,你很快意识到,不是回家,他们都去不同的地方(参与空间中的多名工人有不同的投入,例如,一只狗看到一棵特定的树,而另一只狗看到布什等)。 根据这个经验,你注意到问题是皮带,它太灵活了,因为狗都在这个地方。 因此,您购买一条不太灵活的皮带,结果狗狗会更靠近你,并最终“拉”到一起,让你更快回家。

EASGD

图5:工人变量  w ^ w正在探索参数空间以进行优化  C C。 但是,勘探量与弹性系数成正比  \ RHO ρ和差别  (\ theta ^ w_t - \ theta ^ C_t)  θtw- θtC 。 一般来说,当  \ RHO ρ很小,您可以进行更多探索。 需要指出的是,如同模型平均一样,过多的探索实际上会降低模型的统计性能(如图4的第一个子图所示),因为工作人员不同意采用一个好的解决方案。 尤其是当考虑到中心变量使用工作变量的平均值更新时,如公式2所示。

现在,根据公式1和上面的直觉,我们可以预计对于某些工人更新  一世 在通信窗口内,累积梯度大于或等于弹性力。 因此,这可以防止工人进一步探索(如预期的那样)。 然而,一个重要的副作用是以下梯度计算被浪费了,因为它们被弹性差异所抵消,如图5所示。使用上面的类比,这等同于不管狗有多难试图拉,你只是不要让它走得更远。 因此,狗的努力被浪费了。 这个条件由公式3描述。

 - \ sum_i - \ eta \ nabla f(x_ {t + i}; \ theta_ {t + i})\ geq - \ eta \ rho(\ theta_ {t + i + 1} - \ theta_t ^ C)    x t + i; θt + i  - ηρ  θt + i + 1- θtC(3)

在等式3描述的条件之后防止计算浪费的简单技术是在计算每个小批量之后简单地检查该条件。 当这个条件满足时,那么这个术语  \ sum_i - \ eta \ nabla f(x_ {t + i}; \ theta_ {t + i})Σi - η∇f  x t + i; θt + i与参数服务器通信。 因此,我们不会浪费任何计算,而且,我们丢失了一个超参数,因为通信窗口现在由超参数控制(间接)  \ RHO ρ ,其控制弹性力。 实质上,ADAG的核心思想(将在本文稍后部分提及)也可以应用于此方案,以进一步提高梯度更新的质量,并使优化方案对其他超参数的敏感度较低,例如,并行工作者的数量。

异步数据并行方法

为了克服在同步数据并行中由加载的工作人员引起的显着延迟,并且由此进一步减少训练时间,让我们简单地移除同步约束。 但是,这带来了其他一些影响,其中一些影响并不明显。 概念上最简单的是参数过时 。 参数过时只是其他工作人员在最后一次拉(中央变量同步)和当前工人的最后一次提交(参数更新)之间执行的提交数。 直观地说,这意味着工人正在使用基于该模型的先前参数化的梯度更新“更新”的模型。 这如图6所示。

异步数据并行

图6:在异步数据并行性中,由于在同步数据并行性中删除了同步机制,训练时间甚至进一步减少(平均)。 但是,这引起了一些效果,如参数过时异步引起的动量 。

注意:除非您确实需要,否则不需要阅读以下段落。 然而,外延的一点是: 增加并行工作人员的行为就像增加更多动力一样 。

另一种不那么直观的副作用是异步引起的动量 [1] 。 粗略地说,这意味着在问题中增加更多的工作人员也会为优化过程增加更多的隐含动力 。 这种隐含的动力是不同步所需的排队模型的结果。 请注意,一些方法,如Hogwild! 不需要锁定机制,因为它们假定稀疏梯度更新。 但是,分布式SGD也适用于密集渐变更新。 我们还确认了作者的陈述,即在使用不会过时和不同步的算法时,将更多异步工作人员添加到问题中实际上会降低模型的统计性能。 此外,他们声明异步算法的行为大致由方程4描述。这意味着异步产生的隐式动量是  (1 - \ frac {1} {n})   ñ  1   。

 E [\ theta_ {t + 1} - \ theta_t] =(1 - \ frac {1} {n})E [\ theta_t - \ theta_ {t-1}] - \ frac {1} {n} \ eta E \ nabla f_i(\ theta_t)   [    ñ    1        ñ    1    ηE∇f i θt(4)

但个人而言,我认为这不是完整的故事。 我同意很好的正式排队模型,并且一般而言,异步工作者数量的增加会降低模型的统计性能(我们在实验中也会观察到这一点)。 然而,我认为效果相当于动量,但不一定被定义为这样(ADAG,我们没有观察到这种效应,至少在30个并行过程中)。 我们将在以下博客文章中更深入地探讨这个主题,因为这仍然是一个需要我更多研究的主题。

异步EASGD

异步EASGD的更新方案非常相似,但是,有一些重要的细节。 在下面的段落中,我们将调用向量  - \ eta \ rho(\ theta ^ i_t - \ theta ^ c_t) - ηρ  θti- θtc 弹性差 ,从而遵循纸的符号。 请记住,在同步版本中,此向量实际上用于强制执行勘探策略。 这意味着,在方程式1中,这个向量的任务是不让工作人员远离中心变量。 重复与狗的比喻,想象一下带有弹性皮带的狗。 狗离开你越远(中心变量),力就会越强。 结果,在某些时候,狗施加的力将等于弹性皮带沿相反方向施加的力。 此时,狗不能再进一步移动。 这正是将弹性差异应用于工人时发生的情况,如图5所示。

在异步版本中,弹性差异具有相同的功能。 但是,它也将用于更新中心变量。 如上段所述,弹性差异实际上用于限制勘探。 但是,如果我们否定弹性差异,那是  + \ eta \ rho(\ theta ^ i_t - \ theta ^ c_t) + ηρ  θti- θtc ,那么可以使用弹性差异来优化中心变量(反转图5中的箭头),同时仍然遵守通信约束EASGD正在努力解决。

瓢泼大雨

在DOWNPOUR中,只要工作人员计算出梯度(或梯度序列),梯度就会与参数服务器通信。 当参数服务器从工作人员那里接收到梯度更新时,它会将更新结合到中心变量中,如图7所示。与EASGD相反,DOWNPOUR不承担任何通信限制。 更重要的是,如果与参数服务器的频繁通信没有发生(为了减少工人差异),DOWNPOUR将不会收敛(这也与异步引起的动量问题有关,参见图8)。 这是因为上面讨论的问题相同。 如果我们允许工人探索“太多”的参数空间,那么工作人员就不会一起为中心变量找到一个好的解决方案。 此外,DOWNPOUR没有任何内在机制保留在中心变量的附近。 因此,如果您要增加通讯窗口,则会按比例增加发送给参数服务器的梯度长度,因此,为了保持参数中工作人员的差异,更加积极地更新中心变量空间“小”。

倾盆大雨动画

图7:具有相同学习率的20名平行工人(蓝色)的DOWNPOUR的动画,试图优化与常规顺序梯度下降(绿色)相比的单个目标(中心变量,红色)。 如上所述,通过这个动画我们可以观察到平行工人异步引起的动量。

倾盆大雨含有太多隐含的动力

图8:具有40名并行工人的DOWNPOUR动画。 在这种情况下,由工人数量产生的隐式动量会导致算法发散。

ADAG

我们注意到一个大的沟通窗口与模型性能的下降相关。 使用一些模拟(如DOWNPOUR,如上所示),我们注意到,当使用通信窗口对累积梯度进行归一化时,可以减轻这种影响。 这有几个积极的影响,例如,你并不关注并行工作者的数量,因此,你不会失去并行化梯度下降(收敛速度)的好处。 这有一个副作用,即工人对中心变量的变化也将保持较小,从而为中心目标做出积极贡献! 此外,由于规范化,您对超参数化不太敏感,尤其是在沟通窗口方面。 但是,也就是说,大型通信窗口通常也会降低模型的性能,因为您可以让工作人员使用数据分片中的样本探索更多的参数空间。 在我们的第一个原型中,我们调整了DOWNPOUR来适应这个想法。 我们观察到以下结果。 首先,我们观察到模型性能的显着提高,甚至与诸如Adam的顺序优化方案相比。 其次,与DOWNPOUR相比,我们可以以3倍增加通信窗口。因此,可以更有效地利用CPU资源,并进一步缩短总体培训时间。 最后,对累积梯度进行归一化可以使我们增加通信窗口。 因此,我们能够匹配EASGD的训练时间,并且达到大致相同(有时更好,有时更差)。

 \ Large \ frac {\ sum_ {i = 0} ^ {\ tau} - \ eta \ nabla f(x_ {t + i}; \ theta_ {t + i})} {\ tau}    τ     x t + i; θt + i  (5)

总之,ADAG的核心思想或异步分布式自适应梯度可应用于任何分布式优化方案。 使用我们的观察和直觉(特别是关于由于不同步引起的隐式动量 ),我们可以计算出猜测,归一化累积梯度的思想可以应用于任何分布式优化方案。 但是,我们需要进行多次实验才能验证这一说法。 ADAG将在以下博客文章中详细讨论。

实验

在下面的实验中,我们针对彼此设置了不同的优化方案,即(顺序)Adam,(分布式)DOWNPOUR,异步EASGD和ADAG,并使用MNIST数据集对它们进行评估(样本如图10所示)。 我们将在实验中使用以下参数:

  • 具有1 000 000个可训练参数的多层感知器(〜4MB模型)(完整模型概述如下)
  • 4个样品小批量
  • 1个时代
  • 平行因子:1
  • 亚当作为工作优化者
  • 沟通窗口:
    • DOWNPOUR:5
    • ADAG:5
    • 异步EASGD:32
  • 20名平行工作者:
    • 10个带10 Gbps网卡的计算节点
    • 每个计算节点有2个进程(32个核心)
MNIST归一化

图10: MNIST数据集是手写数字的集合。 此数据集通常用作优化算法的“单元测试”。 每个样本由784个像素组成,值介于0和255之间。我们使用基于Apache Spark构建的框架规范化这些框架,从而从并行化中获益。

在下面的实验中,我们评估了中心变量的精确度,以及训练时间(wallclock)与并行工作者数量的比较。 虽然这是一个相对较小的数据集,但它为我们提供了有关优化方案的扩展能力的一些指示。 在以下博文中,我们还将重点关注大规模深度学习,也就是说,我们将处理非常大的数据集并在数据并行设置中训练模型。

瓢泼大雨

倾盆大雨实验MNIST

图11:本实验的一个关键观察结果是,当DOWNPOUR达到临界数量的隐式动量时,它实际上是发散的 ,如图8所示。我们在其他几个数据集中也做了这个观察。 然而,作者在[1]中表现不断下降的表现没有被观察到。 相反,我们的模型表现突然下降。 这与[1]中提出的主张相矛盾。 根据他们的理论,我们不应该看到模型性能突然下降,而是稳步下降。 因此,我们认为他们的声明“存在对不同步的限制”也是错误的。 虽然,他们的直觉是正确的! 此外,在左边,我们看到算法的缩放。 我们实际上预计缩放应该更好,但是,这可能是因为分区不平衡(我们正在用其他分区来修正此问题)和相对较小的数据集。

异步EASGD

异步EASGD实验MNIST

图12:如上所述,EASGD是一个设计时考虑到通信约束的算法,这是一个现实的约束。 因此,作者引入了一种弹性力 ,使得工作人员可以探索与中心变量相关的相邻参数空间的某个区域。因此,在DOWNPOUR中观察到的模型性能不会立即下降,而是稳步下降。这种下降(相对于模型性能的数量),是由于与工人相比,过时的数量增加(因为中心变量将因排队模型而覆盖更多的距离)。因此,工人可以贡献的积极信息与弹性差异成正比,并且当并行工作者数量更高时(由于参数过时),这种弹性差异会更小。但是,由于EASGD与工作人员数量的比例非常好,我们只需简单匹配ADAG或DOWNPOUR的培训时间。但是,即使我们要与培训时间相匹配,与ADAG相比,EASGD通常会导致较低的准确性。这是现象还有待进一步研究,因为它实际上并没有完全理解为什么这会发生。此外,与ADAG相比,它还消耗更多的CPU,只要我们能够匹配ADAG的模型性能(ADAG花费大量的时间等待网络操作)。

ADAG

ADAG实验MNIST

图13:如果我们假设没有沟通限制,那么我们如何解决DOWNPOUR的问题?平均梯度将起作用,但它不是非常令人期望的,因为梯度将像是一个顺序优化算法一样起作用。那么,如果我们就通讯窗口进行标准化呢?由于这实际上是引起参数过时的参数,从图12可以看出(下降的模型性能)。我们可以在这里做一个有趣的观察,就是没有模型性能的下降(与DOWNPOUR和EASGD相比)。我们认为这是因为以下原因之一; 一方面,我们将工人的方差保持得很小(有限的探索),并用通信窗口(这是隐含动量的主要因素)对工人的累积梯度进行归一化。

通信窗口对精度和训练时间的影响

在下面的一组实验中,我们将研究通信窗口对准确性和训练时间的影响。通信窗口是定义与参数服务器通信的频率的超参数。35的通信窗口意味着工作人员将累积35个小批量更新,并最终与参数服务器同步。在实验中,所有优化方案使用相同的超参数,其中测试之间的唯一变量是通信窗口。和以前一样,我们将使用MNIST作为数据集,一个4号的小批量,Adam作为工人优化器。

通信窗口对精度的影响

图14:正如所料,DOWNPOUR无法处理大型通信窗口。另一方面,EASGD无法处理小型沟通窗口!如上所述,这是因为弹性力(由于工人的数量)比探索参数空间要强。因此,导致EASGD不会收敛。另一方面ADAGA能够处理不同的通信窗口,但是,观察到模型性能略有下降。预计这是由于工人对参数空间的探索增加。

沟通窗口对培训时间的影响

图15:同样,当通信窗口增加时,所有优化方案的训练时间显着减少。然而,我们认为我们可以通过在每个工作人员中分配一个线程来进一步减少培训时间,这个线程负责将参数发送给参数服务器。但是,这是一个尚未探索的想法。总之,我们建议在培训时间和准确性之间进行权衡,就ADAG而言,我们推荐10-15的通信窗口,因为此超参数化可实现类似的模型性能。但是,将其应用于不同的数据集时。我们建议您为自己测试这些设置,因为它们可能有所不同。

概要

在这项工作中,我们向读者介绍了分布式深度学习的问题,以及在应用它时需要考虑的一些方面,例如隐式动量我们还提出了一些能够显着改善现有分布式优化方案的技术。此外,我们引入了我们的框架,dist-keras,并将不同的分布式优化方案应用于MNIST数据集。最后,我们还提供了几个生产就绪的例子和笔记本

致谢

这项工作是CERN IT技术学生合同的一部分。我要感谢IT-DB集团的Zbigniew Baranowski和Luca Canali,维也纳大学的Volodimir Begy以及EP-UCM小组的Jean-Roch Vlimant,Maurizio Pierini和Federico Presutti(CalTech),他们的合作在这项工作上。

参考

  1. Mitliagkas,I.,Zhang,C.,Hadjis,S.,&Ré,C.(2016)。异步产生动力,带有深度学习应用程序。arXiv预印本arXiv:1605.09774。
  2. Dean,J.,Corrado,G.,Monga,R.,Chen,K.,Devin,M.,Mao,M.,...&Ng,AY(2012)。大规模分布式深度网络。在神经信息处理系统的进展(第1223-1231页)中。
  3. Zhang,S.,Choromanska,AE,&LeCun,Y.(2015)。通过弹性平均SGD进行深度学习。神经信息处理系统进展(pp。685-693)。

  1. MNIST数据库,手写数字。

http://joerihermans.com/ramblings/distributed-deep-learning-part-1-an-introduction/

猜你喜欢

转载自blog.csdn.net/omnispace/article/details/80634553