一种适用于分布式机器学习的参数同步优化方法及其系统的制作方法

文档序号:8395772阅读:1143来源:国知局
一种适用于分布式机器学习的参数同步优化方法及其系统的制作方法
【技术领域】
[0001]本发明属于分布式计算和机器学习交叉技术领域,具体涉及一种适用于分布式机器学习的参数同步优化方法及其系统。
【背景技术】
[0002]随着大数据时代的到来,机器学习算法尤其是适用于大规模数据的深度学习算法正得到越来越广泛的关注和应用,包括语音识别、图像识别以及自然语言处理等。然而,随着输入训练数据(机器学习中用于求解神经网络模型的一类数据)和神经网络模型的增大,单节点进行机器学习训练存在内存限制以及数周甚至数月的训练耗时等问题,分布式机器学习应运而生。分布式机器学习在工业界和学术界都收到普遍的关注,如:G00gle利用DistBelief分布式系统训练出了猫脸识别模型,UC Berkeley AMP实验室开源了一个可适用于机器学习算法的类Hadoop MapReduce的分布式计算系统Spark。机器学习分布式化的主要目的在于:1.解决单个计算节点内存不足,以保证能够处理TB级及以上的数据量;2.利用并行加速算法模型训练,将原有数月的训练时间缩短为周或者数天。
[0003]典型的机器学习分布式系统为参数服务器系统(本文中所述参数指的是机器学习中用于建立神经网络模型的矩阵变量),该系统包括一个(或多个)主节点作为参数服务器节点,多个从节点作为工作节点。参数服务器节点负责维护和更新全局共享参数;工作节点保存一部分输入训练数据,利用该训练数据计算新的模型参数,并且及时和参数服务器同步最新参数。分布式机器学习常用算法--并行Stochastic Gradient Descent (随机梯度下降,简称SGD)算法的一个完整训练步包括4个子步骤:
[0004]1.工作节点从参数服务器节点拉取最新参数副本。
[0005]2.工作节点从本地训练数据中取出一批(batch,表示一个完整实体的用于训练的输入数据矩阵称为一组,一批可能是一组或者多组)新的数据,进行计算,得到新的参数梯度(本文所述参数梯度指的是用于更新参数矩阵的差值)。
[0006]3.工作节点将新计算的参数梯度推送给参数服务器。
[0007]4.参数服务器利用参数梯度计算更新参数。
[0008]上述中的步骤2和步骤4,是为得到最终模型参数的两个关键步骤,步骤I和步骤3可以根据需求不在完整训练步中出现。虽然参数服务器系统能够利用分布式训练的方式减少训练时间(训练时间包括基本的模型参数计算、更新的时间和参数同步时间两个部分),但是如上训练的步骤I即拉取最新参数和步骤3即推送参数梯度(这两个步骤统称为参数同步动作)是整个分布式训练中的瓶颈:对于需要进行分布式训练的大规模算法模型,其需要进行同步的参数矩阵和参数梯度矩阵的大小正比于该算法的神经网络大小(甚至可能接近内存大小),因此进行参数同步的时间,受制于网络带宽、服务器内存、CPU使用等诸多条件,成为分布式训练中的巨大瓶颈。
[0009]对于参数同步瓶颈问题,现有的解决方案是降低参数同步的频率,即延长两次参数同步动作之间的时间间隔(省略某几个完整训练步中的步骤I和步骤3)。但若两次参数同步动作之间的时间间隔过长,会导致因服务器和各个工作节点长时间不能得到对方最新的参数信息而损失部分更新数据,最终使得训练准确率下降。据此现今开发者都是利用经验手动设置一个较为合理的时间间隔值,但这种选用一个固定且合理的时间间隔值的方式依然存在参数同步瓶颈问题:由于各工作节点同步时间间隔固定且相等,参数同步请求会在近乎相同的时间点到达参数服务器而呈现请求突发现象,而参数服务器资源有限,来自不同工作节点的参数同步请求必须通过排队的方式依次获得服务器资源以进行参数同步,随着队列的增长,排队时间不容小觑,每个参数请求需要耗费数倍于其与参数服务器实际进行同步的时间。因此,如何合理地选取和控制参数同步时间间隔,以解决分布式机器学习训练中参数同步瓶颈的问题,同时保证训练准确率,是分布式机器学习训练中亟需解决的冋题。

【发明内容】

[0010]针对现有技术的上述缺陷或改进需求,本发明提供了适用于分布式机器学习算法场景的参数同步优化的方法及其系统。通过监控参数服务器资源占用情况,为不同工作节点选取不同的同步时间间隔来避免请求突发情况,同时保证选取的时间间隔能够同时满足降低通信频率和确保训练准确率,以上方法和系统可有效解决现有分布式机器学习系统中参数同步瓶颈的问题。
[0011]为了实现上述目的,按照本发明的一个方面,提供了一种适用于分布式机器学习的参数同步优化系统,用于在分布式机器学习算法场景中进行参数同步控制,具体包括位于参数服务器端的资源监控和分配模块、参数维护模块,位于各工作节点端的服务器资源请求模块、参数同步时间间隔控制模块、未同步时间累计模块、参数计算模块和参数同步模块。其中工作节点端,未同步时间累计模块与工作节点内其他各模块相连,另外服务器资源请求模块和参数计算模块还各自与参数同步时间间隔控制模块和参数同步模块相连,同时服务器端资源监控和分配模块与工作节点端服务器资源请求模块相连,服务器端参数维护模块与工作节点端参数同步模块相连。
[0012]所述参数服务器端的资源监控和分配模块,用于负责监控参数服务器的资源使用情况,在接收到来自某工作节点的资源请求后,分析当前资源利用情况,若资源可用则分配服务器资源给相应工作节点的服务器资源请求模块,否则向该工作节点回复资源不可用;
[0013]所述参数服务器端的参数维护模块,用于负责在服务器端维护算法模型参数,响应来自工作节点的参数更新请求:若请求目标为更新服务器参数,则该模块根据得到的参数梯度计算并更新当前参数;若请求目标为获得服务器参数,则参数服务器端的参数维护模块拷贝当前服务器参数并返回给相应工作节点的参数同步模块;
[0014]所述位于各工作节点端的服务器资源请求模块,用于在收到未同步时间累计模块的“达到参数同步时间点”通知时,向资源监控和分配模块请求分配资源,若得到许可则交付参数同步模块进行参数同步,否则将任务交给参数同步时间间隔控制模块进一步进行时间间隔控制;
[0015]所述位于各工作节点端的参数同步时间间隔控制模块,用于负责在接收到参数同步模块的通知或接收到来自服务器资源请求模块的通知时,设置合理的参数同步间隔时间,降低对服务器资源的竞争以减轻瓶颈;
[0016]所述位于各工作节点端的未同步时间累计模块,用于负责记录上一次设置参数同步间隔到现在为止的时间,一旦该时间达到参数同步时间间隔控制模块规定的参数同步时间间隔后,则通知服务器资源请求模块申请同步资源;在资源申请失败时,如果当前累计未同步时间达到同步时间间隔上限值时,则通知参数同步模块进行强制同步,其中所述当前累计未同步时间为上一次成功同步后到当前的时间。
[0017]所述位于各工作节点端的参数计算模块,用于负责根据训练数据在工作节点进行本地参数计算的工作;
[0018]所述位于各工作节点端的参数同步模块,用于负责在获得参数服务器的资源许可之后或者接收到未同步时间累计模块的强制同步命令后,和参数服务器之间进行参数同步。
[0019]上述中的未同步时间和同步时间间隔的时间计量单位为并行随机梯度下降算法的一个完整训练步,即每经过一个完整的训练步,时间计量加1,同步时间间隔即是“经过多少个完整的训练步,再开始进行参数同步”。
[0020]在本发明方法和系统中所述的服务器资源包括服务器传输带宽、内存、CPUo
[0021]相应地,本发明还提供了一种适用于分布式机器学习的参数同步优化方法,用于在分布式机器学习算法场景中进行参数同步控制,包括系统初始化步骤和并行训练步骤,其中:
[0022](I)系统初始化步骤:初始化服务器和工作节点的模型参数、训练数据集、配置信息,具体包括下述子步骤:
[0023](1.1)向参数服务器输入训练数据,并由参数服务器将训练数据分成多个训练子集;根据用户定义将同步时间间隔上限值maxjnterval初始化为一常量值,该值小于分配给每个工作节点的输入训练数据的总批数;将不同子集和max_interval发送给各个工作节点,转子步骤(1.2);
[0024](1.2)参数服务器根据用户定义的神经网络模型结构随机初始化神经网络模型参数Θ,转子步骤(1.3);
[0025](1.3)各个工作节点从参数服务器处拉取初始化模型参数Θ作为本地初始化参数,转子步骤(1.4);
[0026](1.4)各个工作节点将各自的拉取参数计时器pullCounter、推送参数梯度计时器pushCounter、累计未推送时间间隔accrued_push_interval、累计未拉取时间间隔accrued_pull_interval和当前累计未同步参数梯度值ΣΔ Θ均初始化为0,同时初始化拉取时间间隔pull_interval和推送时间间隔push_interval,其中拉取时间间隔pull_interval和推送时间间隔push_interval均由工作节点随机生成,其值介于I和max_interval之间(包含边界值);进入步骤(2);
[0027](2)并行训练步骤:利用模型参数和各个工作节点的输入训练子集进行训练,并按计算好的时间间隔及时与参数服务器进行同步直至训练结束,具体包括下述子步骤:
[0028](2.1)工作节点在本地训练子集中查询当前是否有未训练数据,若有则取出一批新的训练数据,计算剩余未训练数据批数remain_batch_size,并转子步骤(2.2);否则结束并行训练步骤;
[0029](2.2)工作节点利用子步骤(2.1)中取出的数据和当前参数Θ进行计算,得到参数梯度Λ Θ,转子步骤(2.3);
[0030](2.3)工作节点利用子步骤(2.2)得到的Δ Θ更新本地参数Θ ;pullCounter和pushCounter自增I (计时动作),转子步骤(2.4);
[0031](2.4)工作节点利用子步骤(2.2)得到的Δ Θ累加到Σ Δ Θ,转子步骤(2.5);
[0032](2.5)推送参数梯度子步骤:根据参数同步时间间隔的控制,推送参数梯度,具体包括下述子步骤:
[0033](2.5.1)判断pushCounter记录的时间是否等于push_i
当前第1页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1