面向大规模GPU集群的分布式局部随机梯度下降方法

文档序号:31708752发布日期:2022-10-01 13:41阅读:199来源:国知局
面向大规模GPU集群的分布式局部随机梯度下降方法
面向大规模gpu集群的分布式局部随机梯度下降方法
技术领域
1.本发明涉及分布式计算与存储领域,尤其涉及一种面向大规模gpu集群的分布式局部随机梯度下降方法。


背景技术:

2.随着深层神经网络模型变得更加复杂,其计算工作量也随之增加,这就排除了利用单个节点在合理时间内训练成熟模型的可能性。在这种情况下,分布式训练成为深度学习模型训练的必要条件。目前,对深度学习模型的分布式训练主要分为数据并行和模型并行两种方式。庞大的数据集和模型被分发给多个计算节点以完成相应的培训任务。因此,这些计算节点必须定期通信,以保持参数的同步性和新鲜度。然而,网络技术的发展速度远远落后于计算硬件。例如,自2012年以来,网络带宽从10gbps增加到100gbps,但nvidia gpu的计算能力在过去10年中增加了30倍。计算能力和带宽的不平衡使得计算节点之间的通信成为性能瓶颈,限制了分布式系统的可扩展性。例如,当在一个由1gbps以太网连接的nvidia p100 gpu集群上使用16节点训练resnet-50时,通信成本是计算成本的九倍以上。当计算节点数量增加时,通信成本往往会急剧增加。为了应对通信挑战,人们提出了各种方法,这些方法主要采用两种策略:掩盖通信开销和降低通信频率。
3.为了掩盖通信开销,利用流水线将下一层反向传播计算与通信并行执行。此外,通信优先级调度机制能让计算节点在计算和通信之间实现更高的并行效率。然而,这些方法在大规模训练中稍显不足,原因是大规模训练中的通信开销太大,通信开销无法完全被计算所隐藏。为了解决这个问题,人们提出了梯度压缩技术,通过只发送部分梯度或以低比特形式表达数据来减少通信流量。这些方法有效地降低了通信压力,但降低了收敛精度,并引入了额外的计算开销。
4.为了减少通信频率,主要思路是增加批量大小以减少培训的迭代次数。当批量大小与计算节点数量呈线性增加时,使用大批量sgd方法可实现线性加速,然而大批量sgd会导致泛化性能大幅下降。基于这些发现,越来越多的研究开始关注用较灵活的本地sgd代替大批量sgd。在本地sgd中,计算节点计算梯度并在本地更新其权重,并每k次迭代一次进行通信,以平均本地权重。k-avg和周期模型平均算法证明了局部更新可以保证收敛,并具有良好的实用性能,它们提高了整体通信效率,缓解了快速计算节点在每次迭代中等待慢速计算节点引发的参数同步时间过长的问题。然而,局部参数相比于全局最优解残差过大时,需要频繁的参数通信以确保收敛。此外,计算节点需要等到权重平均完成后才能开始新的局部计算,这仍然会极大地影响训练效果。因此,本地sgd需要找到合适的通信频率,以在精度和速度之间实现平衡。
5.在降低通信频率,同时完全掩盖通信开销的方法方面,已经存在一些研究,但它们的效果仍然不令人满意。od-sgd使用局部权重而不是全局权重来计算梯度,以消除相邻迭代之间的依赖性,但是其需要频繁通信。一次平均法和stl-sgd提出了一种新的本地sgd方案:随着学习速率的降低或迭代次数的增加,令训练的通信频率逐渐降低,但是它们仍需要
较长的预热期才能获得稳定的局部权重。dasgd方法在参数同步后使用旧的局部权重开始下一次迭代,以掩盖通信开销。然而,当需要多个局部计算迭代来掩盖通信时,就有必要考虑陈旧的权重更新是否对训练的正确性有意义或产生误导。综上所述,在深度学习模型的分布式训练方面,有三个问题需要解决:首先,用来掩盖通信开销的操作应该有助于训练,用无效操作填充气泡是没有意义的。其次,本地更新应该引入尽可能少的残差。最后,应该做到不需要很长时间预热就能达到所需的精度。


技术实现要素:

6.针对大规模gpu集群的分布式训练中通信优化中面临的通信开销过大和本地更新导致的长预热和精度下降问题,本发明公开了一种面向大规模gpu集群的分布式局部随机梯度下降方法,其利用参数服务器和计算节点来实现,计算节点用于进行本地梯度以及本地权重的计算,参数服务器用于接收并聚合所有的计算节点发送的梯度信息并进行全局权重更新,参数服务器与计算节点之间的数据交互采用一个参数服务器与多个计算节点相通信的模式,本方法的具体步骤包括:
7.s1,在计算节点设置本地权重更新器,本地权重更新器用于利用本地权重进行本地梯度计算。
8.s2,在每次迭代中,计算节点利用本地权重,计算每次迭代训练的本地梯度,第j个计算节点在第i次迭代训练中的本地梯度值grad
i,j
的计算公式为:
[0009][0010]
其中,表示第j个计算节点在第i次迭代训练使用的本地权重,grad_cal为用于本地梯度计算的函数;对于本地梯度值grad
i,j
的计算,利用本地权重和输入到第j个计算节点的样本特征xj来计算得到第j个计算节点的预测结果y
j’,由预测结果y
j’和第j个计算节点的标签yj计算出损失值loss,再对损失值loss求导,即得到第j个计算节点的在第i次迭代训练时的本地梯度值grad
i,j

[0011]
s3,在本地权重更新器中建立梯度变量,第j个计算节点的本地权重更新器所建立的梯度变量为对于每个计算节点,利用每次迭代训练中所计算得到的本地梯度值grad
i,j
,与梯度变量相加,得到更新后的梯度变量,梯度变量的更新公式为:
[0012][0013]
s4,在每个计算节点执行k次迭代训练后的首次迭代训练中,所有的计算节点之间进行一次参数同步,将该执行参数同步的迭代训练命名为通信迭代,如果当前迭代训练是通信迭代,则执行步骤s5,否则执行步骤s6;
[0014]
s5,每个计算节点对其梯度变量执行平均操作,对于第j个计算节点的梯度变量其平均操作的计算公式为:
[0015][0016]
用平均操作后得到的梯度变量参与本地权重的更新过程,得到更新
后的本地权重更新过程的计算公式为:
[0017][0018]
其中η是超参数学习率,将所有计算节点的平均操作后得到的梯度变量发送给参数服务器,参数服务器收集到来自各个计算节点的梯度变量后,更新全局权重w
l
,更新全局权重的公式为:
[0019][0020]
其中η是超参数学习率,n为计算节点个数。
[0021]
s6,执行步骤s1和步骤s2,在每次通信迭代之后的第2次迭代训练,参数服务器将全局权重w
l
发送到所有工作节点,所有工作节点利用全局权重w
l
对其本地权重分别进行更新,更新公式为:
[0022][0023]
重复执行步骤s4若干次后,得到最终收敛的本地权重和全局权重。
[0024]
所述的收敛,对于本地权重而言,是指前后两次迭代训练得到的本地权重值之差小于某阈值,对于全局权重而言,是指前后两次迭代训练得到的全局权重值之差小于某阈值。
[0025]
所述的面向大规模gpu集群的分布式局部随机梯度下降方法,其在mxnet环境中,基于ps架构进行实施,其步骤包括,
[0026]
在计算节点布置本地更新器、计数器counta、用于装载本地权重的缓冲区loc_buf以及用于装载本地梯度的缓冲区comm_buf,其中counta用于控制计算节点通信的时机以及将全局权重w
l
拉取到计算节点作为本地权重的时机。在训练迭代阶段,计算节点利用缓冲区loc_buf中的本地权重计算本地梯度,再将计算得到的本地梯度存储到计算节点上的缓冲区comm_buf中,计算节点根据计数器counta的输出信号,在通信迭代时对梯度变量执行平均计算,将执行平均计算后的梯度变量用于更新本地权重,参数服务器获取所有计算节点的梯度变量后更新全局权重,得到更新后的全局权重,计算节点在获取更新后的全局权重后,将更新后的全局权重复制到缓冲区loc_buf中,并更新本地权重,计算节点在下一次迭代训练中,利用更新后的本地权重计算本地梯度。mxnet的依赖引擎可确保缓冲区loc_buf中的本地权重在参与本地梯度计算后才被下一时刻的全局权重副本覆盖。
[0027]
本发明的有益效果为:
[0028]
本方法采用了独特的梯度平均与本地更新相结合的训练机制。本方法中梯度平均机制,适用于所有的本地更新方法,是一种加速训练的主流技术,现有本地更新方法都可以用该方法来弥补精度损失,因此本方法具有适用范围广的优点。
附图说明
[0029]
图1为采用不同方法在4个计算节点上(每个节点配置4个v100 gpu)进行resnet-50模型训练的epoch-精度对比图;
[0030]
图2为采用不同方法在4个计算节点上(每个节点配置4个v100 gpu)进行
inception-bn模型训练的时间-精度对比图;
[0031]
图3为采用不同方法在4个计算节点上(每个节点配置4个v100 gpu)进行resnet-20模型训练的通信次数-精度对比图;
[0032]
图4为不同方法在v100集群采用4个计算节点进行训练的速度对比;
[0033]
图5为不同方法在v100集群采用8个计算节点进行训练的速度对比。
具体实施方式
[0034]
为了更好的了解本发明内容,这里给出一个实施例。
[0035]
本发明公开了一种面向大规模gpu集群的分布式局部随机梯度下降方法,其利用参数服务器和计算节点来实现,计算节点用于进行本地梯度以及本地权重的计算,参数服务器用于接收并聚合所有的计算节点发送的梯度信息并进行全局权重更新,参数服务器与计算节点之间的数据交互采用一个参数服务器与多个计算节点相通信的模式,本方法的具体步骤包括:
[0036]
s1,在计算节点设置本地权重更新器,本地权重更新器用于利用本地权重进行本地梯度计算。
[0037]
s2,在每次迭代中,计算节点利用本地权重,计算每次迭代训练的本地梯度,第j个计算节点在第i次迭代训练中的本地梯度值grad
i,j
的计算公式为:
[0038][0039]
其中,表示第j个计算节点在第i次迭代训练使用的本地权重,grad_cal为用于本地梯度计算的函数;对于本地梯度值grad
i,j
的计算,利用本地权重和输入到第j个计算节点的样本特征xj来计算得到第j个计算节点的预测结果y
j’,由预测结果y
j’和第j个计算节点的标签yj计算出损失值loss,再对损失值loss求导,即得到第j个计算节点的在第i次迭代训练时的本地梯度值grad
i,j
;所述的grad_cal,可以采用sgd算法、dcsgd算法、adam算法等实现;
[0040]
s3,在本地权重更新器中建立梯度变量,第j个计算节点的本地权重更新器所建立的梯度变量为对于每个计算节点,利用每次迭代训练中所计算得到的本地梯度值grad
i,j
,与梯度变量相加,得到更新后的梯度变量,梯度变量的更新公式为:
[0041][0042]
s4,在每个计算节点执行k次迭代训练后的首次迭代训练中,所有的计算节点之间进行一次参数同步,将该执行参数同步的迭代训练命名为通信迭代,如果当前迭代训练是通信迭代,则执行步骤s5,否则执行步骤s6;
[0043]
s5,每个计算节点对其梯度变量执行平均操作,对于第j个计算节点的梯度变量其平均操作的计算公式为:
[0044][0045]
用平均操作后得到的梯度变量参与本地权重的更新过程,得到更新后
的本地权重更新过程的计算公式为:
[0046][0047]
其中η是超参数学习率,将所有计算节点的平均操作后得到的梯度变量发送给参数服务器,参数服务器收集到来自各个计算节点的梯度变量后,更新全局权重w
l
,更新全局权重的公式为:
[0048][0049]
其中η是超参数学习率,n为计算节点个数。
[0050]
s6,执行步骤s1和步骤s2,在每次通信迭代之后的第2次迭代训练,参数服务器将全局权重w
l
发送到所有工作节点,所有工作节点利用全局权重w
l
对其本地权重分别进行更新,更新公式为:
[0051][0052]
重复执行步骤s4若干次后,得到最终收敛的本地权重和全局权重。
[0053]
步骤s4重复执行的次数由损失值确定。具体地,对损失值乘以某系数即可得到的步骤s4重复执行的次数。
[0054]
训练不同复杂程度的模型需要重复正式训练的次数不一,同时也受使用者对精度预期的限制,经实验,本专利方法的收敛性与s-sgd接近,因此训练周期数的设定可参考s-sgd的训练样例。
[0055]
本地梯度是指用于控制本地权重大小变化的参数,全局梯度是指对所有计算节点的梯度参数进行累加并平均后的梯度,本地权重是指各个计算节点用于进行对样本进行预测计算的参数,全局权重是指参数服务器生成并发送给所有计算节点的用于同步本地权重的参数。
[0056]
所述的面向大规模gpu集群的分布式局部随机梯度下降方法,其在mxnet环境中,基于ps架构进行实施,其步骤包括,
[0057]
在计算节点布置本地更新器、计数器counta、用于装载本地权重的缓冲区loc_buf以及用于装载本地梯度的缓冲区comm_buf,其中counta用于控制计算节点通信的时机以及将全局权重w
l
拉取到计算节点作为本地权重的时机。在训练迭代阶段,计算节点利用缓冲区loc_buf中的本地权重计算本地梯度,再将计算得到的本地梯度存储到计算节点上的缓冲区comm_buf中,计算节点根据计数器counta的输出信号,在通信迭代时对梯度变量执行平均计算,将执行平均计算后的梯度变量用于更新本地权重,参数服务器获取所有计算节点的梯度变量后更新全局权重,得到更新后的全局权重,计算节点在获取更新后的全局权重后,将更新后的全局权重复制到缓冲区loc_buf中,并更新本地权重,计算节点在下一次迭代训练中,利用更新后的本地权重计算本地梯度。mxnet的依赖引擎可确保缓冲区loc_buf中的本地权重在参与本地梯度计算后才被下一时刻的全局权重副本覆盖。
[0058]
本发明方法可在现有的主流分布式学习框架上实施,为了更好的了解本发明内容,这里给出在mxnet上布置基于ps架构的本发明方法简称dsl-sgd。
[0059]
本发明公开了所述的面向大规模gpu集群的分布式局部随机梯度下降方法,其在
mxnet环境中,基于ps架构进行实施,其步骤包括,
[0060]
s1,在训练启动模块加入本地更新器的接口,本地更新器包括本地学习率、本地学习率变化算法和本地更新算法的参数信息,训练启动模块用于每次迭代训练的启动,本地更新器用于实现本地更新算法,本地更新算法用于实现对权重参数的更新;
[0061]
s2,model模块接收训练启动模块的参数信息,同时将本地更新器的参数信息传递给kvstore模块,model模块用于搭建要训练的深度学习模型,kvstore模块用于实现计算节点和参数服务器之间的参数通信;
[0062]
s3,对api执行模块加入本地更新算法的执行函数和参数接收函数,api执行模块用于对迭代训练时的计算操作和通信操作进行调度,
[0063]
s4,对kvstore模块加入api执行模块和model模块的接口,再加入缓冲区loc_buf、计数器counta、梯度累计函数、梯度平均函数、梯度推送控制函数和权重拉取控制函数。梯度推送控制函数用于将计算节点的梯度参数信息发送给参数服务器,权重拉取控制函数用于将参数服务器上的全局权重信息发送给计算节点。
[0064]
所添加的功能函数具体工作逻辑如下:在每次迭代训练中,计算节点使用缓冲区loc_buf中的本地权重计算本地梯度grad
i,j
,kvstore模块的梯度累计函数将计算得的本地梯度grad
i,j
累加到计算节点的缓冲区comm_buf中,之后根据计数器counta的内容判断是否应该执行梯度推送操作,如果应该执行,则先调用梯度平均函数对缓冲区comm_buf中的数据执行平均操作,之后启动本地更新器用计算后的梯度变量更新本地权重同时,把梯度变量从计算节点推送到参数服务器,参数服务器聚合了所有的节点的之后,开始更新全局权重w
l
;如果计数器判断需要执行权重拉取操作,则把全局权重w
l
从参数服务器拉取到计算节点的缓冲区loc_buf中,将全局权重w
l
作为新的本地权重,mxnet的依赖引擎确保缓冲区loc_buf中的本地权重在参与本地梯度计算后才被全局权重w
l
覆盖,所以并不会出现访存错误和计算错误;如果计数器判断不需要执行所述的梯度推送操作和权重拉取操作,则继续使用原有的本地权重进行本地梯度计算。由于在拉取w
l
之前,计算节点仍会利用现有的本地权重进行梯度计算,所以本发明采用的计算/通信机制能确保下一次迭代中的计算不会因通信而延迟,从而消除通信瓶颈带来的影响。
[0065]
本发明的目的的是为了解决本地更新类算法难以兼顾高速度与高精度两项有点这一难题,通过对通信开销进行掩盖,提高计算与通信的重叠性以提高训练效率,并且梯度累计这一技巧能帮助参数的更新迅速而平稳。这里对dsl-sgd方法是否到达上述目的进行了有效性评估。图1为采用不同方法在4个计算节点上(每个节点配置4个v100 gpu)进行resnet-50模型训练的epoch-精度对比图;图2为采用不同方法在4个计算节点上(每个节点配置4个v100 gpu)进行inception-bn模型训练的时间-精度对比图;图3为采用不同方法在4个计算节点上(每个节点配置4个v100 gpu)进行resnet-20模型训练的通信次数-精度对比图;图4为不同方法在v100集群采用4个计算节点进行训练的速度对比;图5为不同方法在v100集群采用8个计算节点进行训练的速度对比。
[0066]
图1到图3给出了dsl-sgd(本发明方法)、s-sgd(传统高精度同步更新算法)、
local-sgd(目前最先进的一种本地更新算法)、od-sgd(一种本地更新算法,本专利借鉴了它的本地更新机制思想)几种方法的收敛精度与训练epoch数量、时间、通信次数等变量的关系的曲线对比图。实验中采用了4个参数参数服务器和4个计算节点,单节点批大小为128,所有算法的全局学习率(lr)为0.1,dsl-sgd和od-sgd以及local-sgd的本地lr为0.4。此外,dsl-sgd和local-sgd的通信步长k大小为5。基于图1到图3,可以得出下述结论:(1)local-sgd的测试准确率略低于其他三种方法,而dsl-sgd没有这一问题,其收敛性能非常接近s-sgd,甚至高于od-sgd。(2)dsl-sgd具有速度更快,对通信次数需求更低的特点,这能极大程度消除分布式通信瓶颈问题。
[0067]
图4到图5给出了上述方法在v100集群上使用1gbps带宽进行训练的平均节点速度对比。dsl-sgd和local-sgd的通信步长k大小为10,每个柱状图的顶端、中点、末端分别对应使用批大小为512、256、和128时各个算法的速度情况,其余参数设置同上述介绍。基于图4到图5,可以得出下述结论:(1)使用4节点训练不同模型时dsl-sgd的速度下限总是比较高,这能反映出dsl-sgd在网络较差的环境中也能具有比其他算法更好的性能表现(2)使用更多节点训练时,dsl-sgd的平均节点速度受到影响较小,这说明dsl-sgd具有近似线性的可扩展性(3)即使和目前最先进的本地更新算法相比,dsl-sgd仍能具有更高的速度优势,这说明在dsl-sgd中采用的通信掩盖策略是十分有效的。
[0068]
以上所述仅为本技术的实施例而已,并不用于限制本技术。对于本领域技术人员来说,本技术可以有各种更改和变化。凡在本技术的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本技术的权利要求范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1