CN112463189B - 基于通信操作稀疏化的分布式深度学习多步延迟更新方法 - Google Patents
基于通信操作稀疏化的分布式深度学习多步延迟更新方法 Download PDFInfo
- Publication number
- CN112463189B CN112463189B CN202011312697.8A CN202011312697A CN112463189B CN 112463189 B CN112463189 B CN 112463189B CN 202011312697 A CN202011312697 A CN 202011312697A CN 112463189 B CN112463189 B CN 112463189B
- Authority
- CN
- China
- Prior art keywords
- training
- local
- parameter
- updating
- global
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/65—Updates
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/045—Combinations of networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/06—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
- G06N3/063—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Health & Medical Sciences (AREA)
- Life Sciences & Earth Sciences (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- General Physics & Mathematics (AREA)
- General Health & Medical Sciences (AREA)
- Molecular Biology (AREA)
- Computing Systems (AREA)
- Evolutionary Computation (AREA)
- Data Mining & Analysis (AREA)
- Mathematical Physics (AREA)
- Computational Linguistics (AREA)
- Artificial Intelligence (AREA)
- Neurology (AREA)
- Computer Security & Cryptography (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明公开了一种基于通信操作稀疏化的分布式深度学习多步延迟更新方法,其具体步骤包括:热身训练,在进行多步延迟迭代训练前利用同步随机梯度下降方法对深度学习模型进行一定迭代次数的训练;切换阶段,其目的是为了将同步随机梯度下降更新方法切换为多步延迟训练模式;本地参数更新操作采用基于全局梯度的本地更新方法,目的是为了缓解权重延迟,保证模型的收敛精度;多步延迟训练,其具体包括全局参数更新、本地参数更新和通信操作稀疏化三个步骤。本发明通过采用通信操作稀疏化,减缓了网络拥塞,消除了同步开销,很大程度降低了分布式训练过程中的通信开销,优化了训练过程的通信开销。
Description
技术领域
本发明涉及人工智能技术领域,尤其涉及一种分布式深度学习的训练更新方法。
背景技术
深度学习最近在计算机视觉、自然语言处理、自动驾驶、智能医疗等各个领域都取得了很大的成功。深度学习的兴起主要源于两个条件,一是通用和定制化硬件加速器(GPU,NPU,TPU等)的出现,该类硬件加速器在计算能力方面带来了巨大的进步,二是如ImageNet和CIFAR这样的通用训练数据集的开源。然而,随着深度神经网络和数据集规模的快速增长,用于训练的机器的计算能力成为瓶颈,需要几天或几周才能完成一个大型神经网络模型的训练,在这种情况下,分布式训练成为普遍的做法,它极大地提高了训练效率,提升了神经网络模型的研发速度。
随机梯度下降(SGD)是广泛用于分布式训练的优化方法。同步SGD(SSGD)和异步SGD(ASGD)是在分布式深度学习训练过程中最常用的两种更新方法。SSGD方法可以保证模型良好的收敛精度,但训练过程中的同步栅栏严重限制了分布式训练的速度。在同步栅栏机制下提升SSGD方法的关键环节就是降低通信过程中通信流量,一方面可以显著地减少通信开销,另一方面可以减缓通信过程中的网络拥塞情况,而后者可以很大程度降低同步栅栏机制引入的同步开销。因此,梯度压缩技术在通信优化领域引起了研究者们极大的关注,开展了一系列的优化工作。除去对通信开销的优化,梯度压缩技术也可以和系统层的很多优化方法结合使用,实现进一步的优化。但是,在应用梯度压缩技术的过程中,程序员往往需要引入一些额外的优化措施来避免梯度的下降,如动量校正(Momentum Correction)、梯度裁剪(Gradient Clipping)和动量因子掩盖(Momentum Factor Masking)等技术。此外,不同的梯度压缩技术在使用过程中还需要注意一些额外的训练细节,如深度梯度压缩技术(Deep Gradient Compression,DGC)在训练刚开始时,需要通过调整s变量的值来控制梯度的稀疏化效果,因为在模型稳定前进行较大程度的稀疏化处理会影响最终的收敛精度,需要通过逐渐减小s的值来实现更大程度的梯度稀疏化。对一个网络模型进行分布式训练过程中,显然无法直接将梯度量化技术应用到每一层网络的参数中。这些梯度压缩技术的复杂性很大程度限制了它们的广泛应用,因此需要设计一个更加简便的降低通信开销的方法,在降低通信开销和提升系统资源利用率的同时,不会给用户带来额外复杂的操作。
为了消除SSGD方法中的同步开销以加快分布式训练的速度。考虑到权重延迟问题对模型训练精度的影响,优化ASGD方法的关键就是保证模型的收敛精度,研究者们基于异步更新机制提出了不同的优化措施,虽然提高了模型最终的收敛精度,但额外引入的限制或操作一定程度降低了分布式训练速度,使得训练速度不可能超过原始的ASGD方法。因此,需要通过通信开销优化,设计一个训练速度优于ASGD方法,同时保证收敛精度的方法。基于SSGD和ASGD方法的特征,将它们各自的优势进行结合很可能可以实现通信开销的显著下降,通过结合SSGD和ASGD方法的优势,可设计一种更加通用的优化措施来优化通信开销,在保证收敛精度的同时无需额外引入复杂的操作。
发明内容
为了消除SSGD方法中的同步开销以加快分布式训练的速度,同时减少权重延迟问题对模型训练精度的影响,本发明公开了一种基于通信操作稀疏化的分布式深度学习多步延迟更新方法(SSD-SGD),其具体步骤包括:
S1,热身训练,在进行多步延迟迭代训练前利用同步随机梯度下降方法对深度学习模型进行一定迭代次数的训练,其目的是在应用进行多步延迟操作前,使网络模型的权重和梯度趋于稳定状态。
S2,切换阶段,该阶段包括2次迭代训练,分别用于完成对取回的全局权重的备份和第1次本地参数更新操作,其目的是为了将同步随机梯度下降更新方法切换为多步延迟训练模式。本地参数更新操作采用基于全局梯度的本地更新方法(GLU),目的是为了缓解权重延迟,保证模型的收敛精度。在k步延迟阶段,本地计算节点每k次迭代只从参数服务器中取回一次全局权重,但每次迭代都会基于指定的更新方法进行本地权重更新操作。
S3,多步延迟训练,其具体包括全局参数更新、本地参数更新和通信操作稀疏化;
S31,全局参数更新操作在参数服务器端执行,每一次迭代训练对应于一次全局参数更新操作,用于对参数服务器端的全局参数进行更新。
S32,本地参数更新操作在计算节点端执行,在每次迭代训练中,所有计算节点以异步的方式利用基于全局梯度的本地更新方法进行本地更新操作。
S33,通信操作稀疏化是周期性进行参数的取回操作,在每次迭代训练中,计算节点都将训练得到的梯度发送给参数服务器节点,而不进行权重的取回操作,直接利用本地梯度和本地权重,基于全局梯度的本地更新方法进行本地更新操作,更新后的权重直接用于下一次迭代训练,在经过指定次数的迭代后,执行全局权重的取回操作。
SSD-SGD方法多步延迟训练阶段中,设定权重取回的周期为k次迭代训练,则在之前的k-1次迭代训练中,只执行梯度的发送操作和本地更新操作,而不执行权重的取回操作。梯度的发送操作和本地更新操作是并行执行的。在第n+k-1次迭代中,n为自然数,指某次迭代训练序号,每个计算节点同时执行梯度的发送操作和权重的取回操作,第n+k-1次迭代中取回的权重在第n+k次迭代中进行更新,并用于第n+k+1次迭代。
基于参数服务器架构的MXNet框架对该方法进行实现,训练过程包括参数服务器的训练流程和计算节点的训练流程;对于参数服务器的训练流程,首先接收计算节点发送的梯度并保存;其次,当接收到同一个参数对应的梯度数量等于计算节点数时,进行参数的同步更新操作;最后,当接收到来自计算节点的参数取回请求后,将更新后的参数值返回给计算节点。
对于计算节点的训练流程,在热身训练时,每个计算节点将取回的全局参数广播给不同的硬件设备进行梯度的计算,之后将梯度发送给参数服务器进行全局参数更新,并在取回更新的全局参数后开始下一轮迭代训练。在切换阶段的第一次迭代中,计算节点对取回的全局参数进行备份并保存到独立的变量中,接着开始下一轮迭代训练,在该轮迭代训练中,本地计算节点会进行第一次本地更新操作,这也是多步延迟阶段的第一次迭代训练。在应用多步延迟训练机制后,计算节点在每次迭代中进行本地更新操作和梯度发送操作,这两个操作并行化执行,参数取回操作周期性执行,执行频率取决于设定的延迟步数。当计算节点无需执行取回操作时,更新后的本地参数直接广播给不同的硬件设备以快速开始后续的训练任务。
对于基于全局梯度的本地更新方法,其具体步骤包括:首先,计算节点利用上一次取回的全局参数pre_weight与本地参数w’t,i,其中t为训练时刻,i为计算节点序号,进行全局梯度gradsync的计算;其次,如果执行了参数的取回操作,则此时本地参数w’t,i的值等于从参数服务器中更新后的全局参数wt,并且在完成全局梯度的计算后,将本地参数w’t,i中的值保存到pre_weight变量中;最后,计算节点利用全局梯度gradsync和本地梯度grad’t,i对本地参数w’t,i进行更新。
SSD-SGD方法通过MXNet框架来实现,对于计算节点端,SSD-SGD方法需要对从参数服务器中取回的权重进行备份,将备份的值(pre_weight)保存在CPU端的内存中。计算节点需要利用最新计算得到的梯度对本地权重进行更新。为了进行本地更新操作,需要定义本地更新函数,在启动训练任务时增加了optimizer-local选项,用于指定本地更新操作采用的方法,基于全局梯度的本地更新方法的使用是通过该选项指定的;在实现基于全局梯度的本地更新方法时,需要在MXNet框架的optimizer.py文件中对该方法进行定义,optimizer.py文件是用于对所有更新方法进行定义的文件。为了获得更好的训练性能,基于C++语言对基于全局梯度的本地更新方法中的计算操作进行定义和实现。
本发明的有益效果为:
本发明通过采用通信操作稀疏化,获得了以下两个优势:第一,通过删除若干次迭代中的权重取回操作,减缓了网络拥塞,很大程度降低了分布式训练过程中的通信开销;第二,删除权重取回操作打破了单次迭代过程中的同步栅栏机制,消除了同步开销,进一步优化了通信开销。利用CIFAR-10和ImageNet数据集对SSD-SGD方法进行了评估,实验结果证明SSD-SGD方法可以获得和SSGD方法相似甚至更好的模型收敛精度,同时比ASGD方法更快的训练速度,最多提升了110%。还评估了GLU本地更新方法的效果,相比于SGD和DC-ASGD更新方法,GLU方法引入了更少的计算开销,同时起到了更好的延迟信息弥补作用。
附图说明
图1为SSD-SGD方法的训练机制示意图;
图2为SSGD和SSD-SGD方法的多步延迟操作训练流程的示意图;
图3为不同热身迭代次数下ResNet-20模型(CIFAR-10)的收敛精度曲线;
图4为不同本地更新方法下ResNet-50(32)模型的收敛精度曲线和每个计算节点的平均训练速度;
图5为ResNet-50网络模型在单节点批大小为128时,不同延迟步数和参数服务器节点数下的训练速度;
图6为ResNet-50网络模型在单节点批大小为256时,不同延迟步数和参数服务器节点数下的训练速度。
具体实施方式
为了更好的了解本发明内容,这里给出一个实施例。
本发明公开了一种基于通信操作稀疏化的分布式深度学习多步延迟更新方法(SSD-SGD),其具体步骤包括:
S1,热身训练,在进行多步延迟迭代训练前利用同步随机梯度下降方法对深度学习模型进行一定迭代次数的训练,其目的是在应用进行多步延迟操作前,使网络模型的权重和梯度趋于稳定状态。
S2,切换阶段,该阶段只包括2次迭代训练,分别用于完成对取回的全局权重的备份和第1次本地参数更新操作,其目的是为了将同步随机梯度下降更新方法切换为多步延迟训练模式。本地参数更新操作采用基于全局梯度的本地更新方法(GLU),目的是为了缓解权重延迟,保证模型的收敛精度。在k步延迟阶段,本地计算节点每k次迭代只从参数服务器中取回一次全局权重,但每次迭代都会基于指定的更新方法进行本地权重更新操作。本地更新操作的核心就是本地更新方法,为了减少对计算资源的占用,方法中应当不包含复杂的计算操作,而为了保证更新的效果,方法应当能够利用全局的权重或梯度信息,因此采用GLU方法进行本地更新操作。
S3,多步延迟训练,其具体包括全局参数更新、本地参数更新和通信操作稀疏化,多步延迟训练的目的是利用延迟步数中的计算开销对通信开销进行掩盖,从而实现计算性能大幅度的提升。
S31,全局参数更新操作在参数服务器端执行,每一次迭代训练对应于一次全局参数更新操作,用于对参数服务器端的全局参数进行更新。
S32,本地参数更新操作在计算节点端执行,在每次迭代训练中,所有计算节点以异步的方式利用基于全局梯度的本地更新方法进行本地更新操作。
S33,通信操作稀疏化是周期性进行参数的取回操作,在每次迭代训练中,计算节点都将训练得到的梯度发送给参数服务器节点,而不进行权重的取回操作,直接利用本地梯度和本地权重,基于全局梯度的本地更新方法进行本地更新操作,更新后的权重直接用于下一次迭代训练,在经过指定次数的迭代后,执行全局权重的取回操作。
图1为SSD-SGD方法多步延迟训练机制示意图,在训练过程中,设定权重取回的周期为k次迭代训练,则在之前的k-1次迭代训练(图1中第n次迭代到第n+k-2次迭代,此处n为自然数,代指某次迭代训练序号)中,只执行梯度的发送操作和本地更新操作,而不执行权重的取回操作。梯度的发送操作和本地更新操作是并行执行的,因为二者对梯度只存在读依赖。虽然大部分本地更新操作开销可以被梯度发送的通信开销掩盖,但本地更新操作也需要占用一定的计算资源,从而对迭代的训练速度造成轻微影响。在第n+k-1次迭代中,n为自然数,指某次迭代训练序号,每个计算节点同时执行梯度的发送操作和权重的取回操作,第n+k-1次迭代中取回的权重在第n+k次迭代中进行更新,并用于第n+k+1次迭代,因而第n+k-1次迭代中的权重取回操作并没有产生同步开销,计算节点无需等待权重的取回便可快速开始第n+k次迭代的计算过程。此外,针对本地更新操作采用基于全局梯度的本地更新方法,通过消除复杂的计算操作来减少对计算资源的占用。
基于参数服务器架构的MXNet框架进行SSD-SGD方法的实现,训练过程中包括参数服务器和计算节点的更新流程。参数服务器的流程相比于SSGD方法并没有发生变化,接收不同计算节点发送来的梯度并基于同步更新规则进行权重的更新,在接收到计算节点发来的参数取回请求后将更新后的权重发送给计算节点,不同之处在于来自计算节点的取回请求更少了。
对于参数服务器的训练流程,首先接收计算节点发送的梯度并保存;其次,当接收到同一个参数对应的梯度数量等于计算节点数时,进行参数的同步更新操作;最后,当接收到来自计算节点的参数取回请求后,将更新后的参数值返回给计算节点。
对于计算节点的训练流程,在热身训练时,每个计算节点将取回的全局参数广播给不同的硬件设备进行梯度的计算,之后将梯度发送给参数服务器进行全局参数更新,并在取回更新的全局参数后开始下一轮迭代训练。
在切换阶段的第一次迭代中,计算节点对取回的全局参数进行备份并保存到独立的变量中,接着开始下一轮迭代训练,在该轮迭代训练中,本地计算节点会进行第一次本地更新操作,这也是多步延迟阶段的第一次迭代训练。
在应用多步延迟训练机制后,计算节点在每次迭代中进行本地更新操作和梯度发送操作,这两个操作并行化执行,因为对梯度只有读数据依赖,因此绝大部分本地更新操作开销可以被掩盖。与梯度发送操作不同,参数取回操作周期性执行,执行频率取决于设定的延迟步数,这也是对分布式训练过程中的通信开销进行掩盖的关键。当计算节点无需执行取回操作时,更新后的本地参数直接广播给不同的硬件设备以快速开始后续的训练任务。
对于基于全局梯度的本地更新方法,其具体步骤包括:首先,计算节点利用上一次取回的全局参数pre_weight与本地参数w’t,i,其中t为训练时刻,i为计算节点序号,进行全局梯度gradsync的计算;其次,如果执行了参数的取回操作,则此时本地参数w’t,i的值等于从参数服务器中更新后的全局参数wt,并且在完成全局梯度的计算后,将本地参数w’t,i中的值保存到pre_weight变量中;最后,计算节点利用全局梯度gradsync和本地梯度grad’t,i对本地参数w’t,i进行更新。
MXNet框架中已实现了SSGD方法的训练机制,与SSGD方法相比,SSD-SGD方法的实现无需对参数服务器端进行任何修改,因为两种方法在参数服务器端的执行机制是相同的,唯一不同的是SSD-SGD方法下,来自计算节点端的取回请求更少。SSD-SGD方法通过MXNet框架来实现,对于计算节点端,SSD-SGD方法需要对从参数服务器中取回的权重进行备份,将备份的值(pre_weight)保存在CPU端的内存中,从而避免对GPU内存的占用。SSD-SGD方法为了进行本地更新操作,会产生额外的计算资源需求,为此设计了GLU方法,在执行本地更新操作时只会引入少量的计算开销。此外,还需要进行本地更新函数的定义和调整分布式训练过程中计算和通信操作的执行顺序。
SSD-SGD方法中的权重延迟问题源于多步延迟训练机制,计算节点需要利用最新计算得到的梯度对本地权重进行更新,以避免权重延迟问题对模型的收敛精度造成影响。为了进行本地更新操作,需要定义本地更新函数,在启动训练任务时增加了optimizer-local选项,用于指定本地更新操作采用的方法,基于全局梯度的本地更新方法的使用是通过该选项指定的;在实现基于全局梯度的本地更新方法时,需要在MXNet框架的optimizer.py文件中对该方法进行定义,optimizer.py文件是用于对所有更新方法进行定义的文件。为了获得更好的训练性能,基于C++语言对基于全局梯度的本地更新方法中的计算操作进行定义和实现。
在热身训练阶段,集群基于SSGD方法进行模型训练,图2中的(a)子图给出了SSGD方法下训练操作的执行流程,这也是MXNet框架中默认的执行流程,read或write后的数字代表相应操作的执行顺序。comm_buf是梯度发送和参数取回操作共享的操作变量,这也使得两个操作之间存在数据依赖关系,key是参数对应的索引值。聚合后的梯度(gradkey)先通过write-1操作保存到comm_buf中,然后发送操作通过read-2操作读取comm_buf中的值并发送给参数服务器。取回操作需要等发送操作完全结束之后才能开始执行,从参数服务器中取回的权重会通过write-3操作保存到comm_buf中。最后comm_buf中的值会被广播到节点中的不同硬件设备以开始下一次迭代的训练。
图2中的(b)子图给出了SSD-SGD方法在多步延迟操作的具体执行步骤。对于多步延迟操作,其在执行过程中,取回的全局参数会先保存到共享变量comm_buf中,然后通过CopyTo()函数复制到comm_back变量中,CopyTo()函数用于实现CPU和GPU内存之间的数据拷贝,而comm_back变量用于保存计算节点的本地参数值,若执行了参数取回操作,则保存的值为全局参数值;pre_weight变量保存的是上一次从参数服务区中取回的全局参数值,用于全局梯度gradsync的计算,并且每隔设定的延迟步数,pre_weight变量会被comm_back中的值覆盖一次。节点中聚合后的本地梯度gradkey会保存到comm_buf或grad_buf中以用于发送操作,comm_buf为梯度发送和参数取回操作的共享变量,grad_buf用于保存gradkey的值,但用于只有发送而没有取回操作的迭代中,同时gradkey还将用于本地更新操作。最终,更新后的comm_back变量中的值会进行广播以开始下一轮迭代训练。
对SSD-SGD方法的性能进行了评估。首先从实验的角度对热身训练阶段的时长敏感性进行了分析。之后比较了不同延迟步数下不同网络模型分别在SSGD和SSD-SGD方法下的收敛精度。接着评估GLU方法在维护模型收敛精度和降低计算量方面的有效性。最后,评估了在不同配置和工作负载下方法带来的性能优化效果。测试平台为基于V100的计算集群,集群中有4个计算节点,每个节点包括40个CPU核,256GB的内存,4个V100 Tesla GPU,节点间通过56Gbps的IB网络进行互连。测试程序和数据集:在实验中采用了ResNet-20,ResNet-50,VGG-11和AlexNet网络模型作为测试程序,并采用CIFAR10和ImageNetILSVRC2012数据集用于模型的训练。利用SSGD方法下的性能作为比较基准,同时也提供了线性加速比下的训练速度作为理想优化效果,后者的计算是利用单机多卡下的训练速度乘以分布式训练过程中所用的节点数,训练速度的单位为images/sec。这里提到的训练速度均是基于4轮完整训练后的平均值,所提到的测试精度均为TOP-1精度。
对于超参数配置,用于本地更新操作的GLU方法也需要进行超参数的设置,需要设置loc_lr,α和β三个超参数。基于网格搜索方法对合适的超参进行了搜索,实验所用的4节点集群在α=2.0,β=0.5,loc_lr设置为全局学习率lr的4倍时取得了最佳的训练效果。若非特别指出,默认不对学习率应用热身阶段。
基于分析可知,在应用多步延迟机制前执行热身训练过程是有必要的。在该部分实验中,采用了ResNet-20网络模型和CIFAR-10数据集,延迟步数设置为1,并在训练过程中对数据集进行了增强处理,本地更新方法采用GLU方法。图3为不同热身迭代次数下ResNet-20模型(CIFAR-10)的收敛精度曲线,1S-100表示在延迟步数为1时热身训练阶段的时长为100次迭代训练,同时也给出了SSGD方法下相应的测试精度。从图3中可以得到以下结论:(1)当热身训练阶段时长为100次迭代时,SSD-SGD方法下模型的收敛精度明显低于SSGD方法。(2)当热身训练阶段时长为200次迭代时,SSD-SGD方法下模型的收敛精度略微低于SSGD方法,但相比于1S-100已经有了明显提升,从而说明了热身训练阶段的必要性,也说明了过短的热身训练阶段会导致模型的收敛精度降低。(3)当热身训练阶段的时长为300次甚至更高次数的迭代时,SSD-SGD方法下模型的收敛精度甚至超过了SSGD方法,并且迭代次数为500时,模型的收敛精度最高。实验结果充分证明了SSD-SGD方法中引入热身训练阶段的必要性,在后续的实验过程中,统一将热身训练阶段的时长设置为500次迭代训练。虽然更长的热身训练阶段可能得到更高的收敛精度,但同时也会限制性能的优化效果,因为更长的热身训练阶段意味着用SSGD方法训练的时间也越久。
设计GLU方法的目的是为了本地更新操作能实现更好的信息延迟弥补,同时极少本地更新操作引入的计算量,避免过多占用计算资源而影响训练速度。对GLU方法是否到达上述目的进行了有效性评估。图4给出了在应用三种不同的本地更新方法(SGD,DC-ASGD-a,GLU)时,ResNet-50(ImageNet)模型在SSD-SGD方法下的收敛精度曲线和训练速度对比图,训练速度为分布式训练模型下每个计算节点的平均训练速度。实验中采用了4个参数服务器节点和4个计算节点,单节点批大小为128,SGD,DC-ASGD-a和GLU方法对应的本地学习率分别为0.1,0.4和1.6,参数服务器中的全局学习率为0.4,延迟步数为5。
基于图4中的两个子图,可以得出下述结论:(1)利用GLU方法进行本地更新操作时可以获得最高的模型收敛精度(73.745%)和训练速度(786.86images/sec),充分证明了GLU方法的有效性。一方面,GLU方法利用了全局梯度信息(gradsync)进行本地更新操作;另一方面,GLU方法中并没有引入复杂的计算操作,只有矩阵的加减以及矩阵和标量的乘法,而没有矩阵间的乘法以及对矩阵的开方操作。(2)SGD方法用于本地更新操作时的训练速度(769.65images/sec)和GLU方法下的训练速度相近,但模型的收敛精度低了相比于GLU和DC-ASGD-a方法分别低了0.519%(73.226%vs73.745%)和0.143%(73.226%vs73.269%)。这是因为SGD方法在进行本地更新操作时没有利用相关的全局信息,仅用最新计算得到的梯度进行本地权重更新,导致模型的收敛精度有所下降。(3)DC-ASGD-a方法用于本地更新时模型的收敛精度低于GLU方法(73.369%vs 73.745%)。这源于两个方面的原因,一是DC-ASGD-a方法主要用于在参数服务器端进行权重的延迟弥补,而在SSD-SGD方法中将其应用于本地计算节点中;二是超参数配置虽然也是针对单GPU批大小为32,但每个GPU都当作一个独立的计算节点,而的实验中单计算节点有4个GPU卡,只是将本地学习率由0.1线性增大为0.4,相应的超参数配置可能不是最佳的。(4)DC-ASGD-a方法用于本地更新操作时的训练速度最慢(561.53images/sec),这是因为DC-ASGD-a方法中引入了复杂的计算操作,虽然本地更新操作的计算开销可以很大程度通过梯度发送开销进行掩盖,但对计算资源的过多占用还是影响了分布式训练的性能,这也是选择设计GLU方法,而并非为DC-ASGD-a方法搜索最佳超参数配置的原因。
图5为ResNet-50网络模型在单节点批大小为128时,不同延迟步数和参数服务器节点数下的训练速度;图6为ResNet-50网络模型在单节点批大小为256时,不同延迟步数和参数服务器节点数下的训练速度,两图中的训练速度为分布式训练过程中所有节点的训练速度之和,计算节点数为4,参数服务器的节点数配置为1到4,4S和4W分别表示实验中采用4个参数服务器节点和4个计算节点,图中的百分数表示相应的训练加速百分比,节点间通过56Gbps的IB网络进行互连。
在批大小不变的情况下,单节点的计算开销几乎不发生变化,通过调整参数服务器的节点数来改变训练过程中的通信开销,从而评估不同通信开销下SSD-SGD方法的优化效果。从图5和图6中可以得到以下结论:(1)当单节点批大小为128时,在不同的延迟步数下,相比于SSGD方法,SSD-SGD方法可以取得8%-78%的训练加速效果,并且训练加速比并没有随着参数服务器的节点数减少而出现明显的波动。理论上参数服务器节点数的减少会加重网络拥塞情况,增大通信开销,而SSD-SGD方法在通信开销较大时优化效果会更好。之所以优化效果不好,因为此时实现性能进一步优化的瓶颈在于参数服务器而不是通信开销,节点数的下降使得每个参数服务器需要在单位时间内处理更多的发送和取回操作请求,从而限制了训练的加速效果,在参数服务器节点数为1时,训练速度甚至没有达到线性情况下的一半(1613.00images/sec vs 3657.22images/sec)。(2)当单节点批大小为256时,在不同的延迟步数下,相比于SSGD方法,SSD-SGD方法可以取得3%-110%的训练加速效果,并且训练加速比随着参数服务器节点数的减少而增大。这是因为当批大小加倍之后,计算节点的计算开销也相应增大,参数服务器节点单位时间内需要处理的发送和取回通信请求相应地减少,从而很程度消除了性能提升过程中参数服务器端的瓶颈问题。和单节点批大小为128相比,在单节点批大小增大到256后,1S-4W配置下的训练加速效果出现了显著的提升。(3)在单节点批大小为128时,需要5个延迟步数才能取得和线性扩展下接近的训练速度,而单节点批大小为256时,只需2个延迟步数就可获得和线性扩展下相似的训练速度,二者分别对应72%和10%的训练加速比。批大小为256时的加速比更低是因为此时SSGD方法下的训练速度也比较快,因为增大批大小后,单位时间里的通信操作减少了,从而降低了分布式的通信负载,同时计算资源的利用率也得到提高,最终导致更快的训练速度。(4)单节点批大小为128和256时的线性扩展速度是相近的(3657.22images/sec vs3682.12images/sec)。为此,评估了单节点批大小不同时单计算节点(4GPUs)的训练速度(32:605.21images/sec,64:901.32images/sec,128:914.31images/sec,256:920.53images/sec,512:921.42images/sec),当单节点批大小增大到128后,再增大批大小时,训练速度就不再发生明显的变化,稳定在920images/sec左右。认为是GPU有限的计算能力导致了这一现象,当单节点批大小为128时,基本可以占满GPU计算资源,更大的批大小虽然提交了更多的计算任务,但任务只是处于排队状态,而没有被真正执行,因此计算速度并没有获得提升。
以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。
Claims (6)
1.一种基于通信操作稀疏化的分布式深度学习多步延迟更新方法,其特征在于,其具体步骤包括:
S1,热身训练,在进行多步延迟迭代训练前利用同步随机梯度下降方法对深度学习模型进行一定迭代次数的训练,其目的是在应用进行多步延迟操作前,使网络模型的权重和梯度趋于稳定状态;
S2,切换阶段,该阶段包括2次迭代训练,分别用于完成对取回的全局权重的备份和第1次本地参数更新操作,其目的是为了将同步随机梯度下降更新方法切换为多步延迟训练模式;本地参数更新操作采用基于全局梯度的本地更新方法,目的是为了缓解权重延迟,保证模型的收敛精度;在k步延迟阶段,本地计算节点每k次迭代只从参数服务器中取回一次全局权重,但每次迭代都会基于指定的更新方法进行本地权重更新操作;
所述基于全局梯度的本地更新方法,其具体步骤包括:首先,计算节点利用上一次取回的全局参数pre_weight与本地参数w′t,i,其中t为训练时刻,i为计算节点序号,进行全局梯度gradsync的计算;其次,如果执行了参数的取回操作,则此时本地参数w′t,i的值等于从参数服务器中更新后的全局参数wt,并且在完成全局梯度的计算后,将本地参数w′t,i中的值保存到pre_weight变量中;最后,计算节点利用全局梯度gradsync和本地梯度grad′t,i对本地参数w′t,i进行更新;
S3,多步延迟训练,其具体包括全局参数更新、本地参数更新和通信操作稀疏化三个步骤;
所述步骤S3,具体包括:
S31,全局参数更新操作在参数服务器端执行,每一次迭代训练对应于一次全局参数更新操作,用于对参数服务器端的全局参数进行更新;
S32,本地参数更新操作在计算节点端执行,在每次迭代训练中,所有计算节点以异步的方式利用基于全局梯度的本地更新方法进行本地更新操作;
S33,通信操作稀疏化是周期性进行参数的取回操作,在每次迭代训练中,计算节点都将训练得到的梯度发送给参数服务器节点,而不进行权重的取回操作,直接利用本地梯度和本地权重,基于全局梯度的本地更新方法进行本地更新操作,更新后的权重直接用于下一次迭代训练,在经过指定次数的迭代后,执行全局权重的取回操作。
2.一种如权利要求1所述的基于通信操作稀疏化的分布式深度学习多步延迟更新方法,其特征在于,所述的多步延迟训练阶段中,设定权重取回的周期为k次迭代训练,则在之前的k-1次迭代训练中,只执行梯度的发送操作和本地更新操作,而不执行权重的取回操作;梯度的发送操作和本地更新操作是并行执行的;在第n+k-1次迭代中,n为自然数,指某次迭代训练序号,每个计算节点同时执行梯度的发送操作和权重的取回操作,第n+k-1次迭代中取回的权重在第n+k次迭代中进行更新,并用于第n+k+1次迭代。
3.一种如权利要求1所述的基于通信操作稀疏化的分布式深度学习多步延迟更新方法,其特征在于,基于参数服务器架构的MXNet框架对该方法进行实现,训练过程包括参数服务器的训练流程和计算节点的训练流程。
4.一种如权利要求3所述的基于通信操作稀疏化的分布式深度学习多步延迟更新方法,其特征在于,所述的参数服务器的训练流程,首先接收计算节点发送的梯度并保存;其次,当接收到同一个参数对应的梯度数量等于计算节点数时,进行参数的同步更新操作;最后,当接收到来自计算节点的参数取回请求后,将更新后的参数值返回给计算节点。
5.一种如权利要求3所述的基于通信操作稀疏化的分布式深度学习多步延迟更新方法,其特征在于,所述的计算节点的训练流程,在热身训练时,每个计算节点将取回的全局参数广播给不同的硬件设备进行梯度的计算,之后将梯度发送给参数服务器进行全局参数更新,并在取回更新的全局参数后开始下一轮迭代训练;在切换阶段的第一次迭代中,计算节点对取回的全局参数进行备份并保存到独立的变量中,接着开始下一轮迭代训练,在该轮迭代训练中,本地计算节点会进行第一次本地更新操作,这也是多步延迟阶段的第一次迭代训练;在应用多步延迟训练机制后,计算节点在每次迭代中进行本地更新操作和梯度发送操作,这两个操作并行化执行,参数取回操作周期性执行,执行频率取决于设定的延迟步数;当计算节点无需执行取回操作时,更新后的本地参数直接广播给不同的硬件设备以快速开始后续的训练任务。
6.一种如权利要求1所述的基于通信操作稀疏化的分布式深度学习多步延迟更新方法,其特征在于,该方法通过MXNet框架来实现,对于计算节点端,SSD-SGD方法需要对从参数服务器中取回的权重进行备份,将备份的值保存在CPU端的内存中;计算节点需要利用最新计算得到的梯度对本地权重进行更新;为了进行本地更新操作,需要定义本地更新函数,在启动训练任务时增加了optimizer-local选项,用于指定本地更新操作采用的方法,基于全局梯度的本地更新方法的使用是通过该选项指定的;在实现基于全局梯度的本地更新方法时,需要在MXNet框架的optimizer.py文件中对该方法进行定义,optimizer.py文件是用于对所有更新方法进行定义的文件;为了获得更好的训练性能,基于C++语言对基于全局梯度的本地更新方法中的计算操作进行定义和实现。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011312697.8A CN112463189B (zh) | 2020-11-20 | 2020-11-20 | 基于通信操作稀疏化的分布式深度学习多步延迟更新方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011312697.8A CN112463189B (zh) | 2020-11-20 | 2020-11-20 | 基于通信操作稀疏化的分布式深度学习多步延迟更新方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112463189A CN112463189A (zh) | 2021-03-09 |
CN112463189B true CN112463189B (zh) | 2022-04-22 |
Family
ID=74799059
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011312697.8A Active CN112463189B (zh) | 2020-11-20 | 2020-11-20 | 基于通信操作稀疏化的分布式深度学习多步延迟更新方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112463189B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113515370B (zh) * | 2021-04-28 | 2024-03-12 | 之江实验室 | 一种面向大规模深度神经网络的分布式训练方法 |
CN113642736B (zh) * | 2021-07-29 | 2023-09-12 | 中国科学院计算技术研究所 | 基于冷热分离的梯度聚合方法与系统 |
CN114048197B (zh) * | 2022-01-13 | 2022-04-19 | 浙江大华技术股份有限公司 | 树形结构数据处理方法、电子设备及计算机可读存储装置 |
CN116542324B (zh) * | 2023-07-06 | 2023-10-10 | 之江实验室 | 一种面向智能计算的分布式异步规约方法和装置 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109472347A (zh) * | 2018-10-15 | 2019-03-15 | 中山大学 | 一种分布式深度学习的梯度压缩方法 |
JP2019080232A (ja) * | 2017-10-26 | 2019-05-23 | 株式会社Preferred Networks | 勾配圧縮装置、勾配圧縮方法及びプログラム |
CN109902818A (zh) * | 2019-01-15 | 2019-06-18 | 中国科学院信息工程研究所 | 一种面向深度学习训练任务的分布式加速方法及系统 |
CN109951438A (zh) * | 2019-01-15 | 2019-06-28 | 中国科学院信息工程研究所 | 一种分布式深度学习的通信优化方法及系统 |
CN110245743A (zh) * | 2019-05-23 | 2019-09-17 | 中山大学 | 一种异步分布式深度学习训练方法、装置及系统 |
CN111882060A (zh) * | 2020-07-20 | 2020-11-03 | 中国人民解放军国防科技大学 | 用于机器学习的单步延迟随机梯度下降训练方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP6227813B1 (ja) * | 2017-01-25 | 2017-11-08 | 株式会社Preferred Networks | 分散深層学習装置及び分散深層学習システム |
-
2020
- 2020-11-20 CN CN202011312697.8A patent/CN112463189B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2019080232A (ja) * | 2017-10-26 | 2019-05-23 | 株式会社Preferred Networks | 勾配圧縮装置、勾配圧縮方法及びプログラム |
CN109472347A (zh) * | 2018-10-15 | 2019-03-15 | 中山大学 | 一种分布式深度学习的梯度压缩方法 |
CN109902818A (zh) * | 2019-01-15 | 2019-06-18 | 中国科学院信息工程研究所 | 一种面向深度学习训练任务的分布式加速方法及系统 |
CN109951438A (zh) * | 2019-01-15 | 2019-06-28 | 中国科学院信息工程研究所 | 一种分布式深度学习的通信优化方法及系统 |
CN110245743A (zh) * | 2019-05-23 | 2019-09-17 | 中山大学 | 一种异步分布式深度学习训练方法、装置及系统 |
CN111882060A (zh) * | 2020-07-20 | 2020-11-03 | 中国人民解放军国防科技大学 | 用于机器学习的单步延迟随机梯度下降训练方法 |
Non-Patent Citations (3)
Title |
---|
SketchDLC: A Sketch on Distributed Deep Learning Communication via Trace Capturing;Yemao Xu,Dezun Dong;《ACM TRANSACTIONS ON ARCHITECTURE AND CODE OPTIMIZATION Volume 16》;20190418;第1-26页 * |
分布式深度学习系统网络通信优化技术;董德尊,欧阳硕;《中兴通讯技术》;第2-8页;20200925;第2-8页 * |
软件TLS系统的高效线程提交机制研究;徐叶茂;《中国优秀硕士学位论文全文数据库 》;20190131;I137-92 * |
Also Published As
Publication number | Publication date |
---|---|
CN112463189A (zh) | 2021-03-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112463189B (zh) | 基于通信操作稀疏化的分布式深度学习多步延迟更新方法 | |
Wang et al. | Distributed machine learning with a serverless architecture | |
CN113064879B (zh) | 数据库参数调整方法、装置及计算机可读存储介质 | |
US12008445B2 (en) | Black-box optimization using neural networks | |
Yu et al. | Gillis: Serving large neural networks in serverless functions with automatic model partitioning | |
US20200219028A1 (en) | Systems, methods, and media for distributing database queries across a metered virtual network | |
CN112906294A (zh) | 用于深度学习模型的量化方法和量化装置 | |
CN114329327B (zh) | 基于上下三角分解的稀疏矩阵并行求解方法及装置 | |
CN115994567B (zh) | 一种深度神经网络模型并行计算任务异步调度方法 | |
CN111882060A (zh) | 用于机器学习的单步延迟随机梯度下降训练方法 | |
Tanaka et al. | Automatic graph partitioning for very large-scale deep learning | |
CN112381218B (zh) | 一种用于分布式深度学习训练的本地更新方法 | |
CN110689136B (zh) | 一种深度学习模型获得方法、装置、设备及存储介质 | |
US20210390405A1 (en) | Microservice-based training systems in heterogeneous graphic processor unit (gpu) cluster and operating method thereof | |
CN116107754A (zh) | 一种面向深度神经网络的内存管理方法及系统 | |
CN118093203B (zh) | 数据搬运方法、分布式训练系统、电子设备和存储介质 | |
CN118194917B (zh) | 一种基于混合专家模型的语言模型改进结构的方法及系统 | |
US20220413906A1 (en) | Method, device, and program product for managing multiple computing tasks based on batch | |
Peng et al. | Lock-free parallelization for variance-reduced stochastic gradient descent on streaming data | |
CN111898752B (zh) | 执行lstm神经网络运算的装置和方法 | |
CN111629216B (zh) | 边缘网络环境下基于随机森林算法的vod业务缓存替换方法 | |
CN115374910B (zh) | 一种更新深度学习训练超参数的方法、装置及设备 | |
CN110196879B (zh) | 数据处理方法、装置、计算设备及存储介质 | |
Zhang et al. | PAME: precision-aware multi-exit DNN serving for reducing latencies of batched inferences | |
US20150033232A1 (en) | Automatic parallelism tuning for apply processes |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |