一种基于工作量自动调优的负载均衡方法
技术领域
本发明属于分布式机器学习加速技术领域,具体是一种基于工作量自动调优的负载均衡方法。
背景技术
随着时代的进步以及计算机、通信技术的高速发展,大规模机器学习系统已成为诸多商业应用的重要组成部分。大数据为我们带来机遇的同时,也带来了数据处理问题上的挑战。随着互联网数据量指数性的增长,机器学习模型训练的数据量动辄数百TB甚至数PB,与此同时数据量的急速增长也伴随着对更加复杂模型的急剧需求,如此大规模的机器学习模型训练已经远远超出单台计算机的存储和计算能力。为了减少应用程序的运行时间,越来越多的机器学习算法转向并行分布式实现,使得分布式机器学习系统逐渐成为研究的热门。
迭代-收敛算法是机器学习算法中的一个重要子集。这类算法从随机生成初始解决方案开始,通过对输入的数据进行反复迭代训练,从而获得最终的解决方案。迭代-收敛算法通常选择对输入数据进行分片,然后采用批量同步并行(Bulk SynchronousParallel,BSP)模型进行分布式模型训练,其中分布式系统主要由若干个参数服务器以及若干个计算节点组成。基于参数服务器系统的数据并行化就是如上所述的一种并行化方案,其训练流程为:
1)初始化阶段:随机初始化全局模型参数集合,并由参数服务器维护后续更新。
2)模型参数分发阶段:将当前全局模型参数集合分发给计算节点,每个计算节点维护一个局部模型参数集合副本。
3)训练集分发阶段:将训练集样本切分为数据规模相同的子训练集并分发到计算节点。
4)迭代训练阶段:各计算节点通过训练对应的子训练集以对模型参数集合副本进行局部更新。
5)同步更新阶段:在全部计算节点完成局部模型参数集合的上传后,参数服务器将更新后的全局模型参数集合分发给所有计算节点。
6)若迭代总次数未达到预先设置的最大值,则跳至步骤4);否则,结束训练。
BSP模型存在的主要问题是滞后问题。滞后问题是指由于集群节点性能差异造成性能差的计算节点拖慢整体运行速度的现象。在真实生产环境下,计算节点的规模以及计算节点完成一次迭代训练的耗时均存在动态变化性,使滞后问题趋于严重,造成BSP模型的训练性能大幅下降。
为了解决BSP模型中存在的问题,Dean提出了分布式机器学习异步并行执行(Asynchronous Parallel Execution,ASP)模型,ASP模型的优点在于计算节点可以在接收全局模型参数之前使用局部模型参数执行下一次迭代,不会因集群负载不均衡而产生滞后问题,极大地减少了模型训练的时间成本。但是ASP模型过度利用迭代算法的容错性,可能导致机器学习算法陷入局部最优解。Qirong Ho提出了延迟同步并行(Stale SynchronousParallel,SSP)模型,与ASP模型类似,SSP模型允许各计算节点在迭代训练时使用局部模型参数,并且严格控制节点使用局部模型参数进行迭代训练的次数。在确保模型收敛的前提下,极大地减少了计算节点的滞后时间。然而SSP模型平衡集群负载的能力是固定不变的,它无法良好地适应真实生产环境下集群节点性能的动态变化,导致其无法保证模型准确率。因此如何提高分布式机器学习模型训练的性能是一个迫切需要解决的问题。
发明内容
本发明要解决的技术问题是如何平衡集群负载差异,从而解决分布式机器学习模型训练的滞后问题,在保证一定准确率的前提下,提高分布式机器学习模型训练的整体性能。在传统的分布式机器学习模型训练中,计算节点每次迭代训练的工作量都是相同固定大小的。本发明从工作量重分配的角度出发,提出了工作量自动调优(Automatic Tune,AutoT)方法。
本发明解决其技术问题采用的技术方案是:先通过自动化调优的方式为集群中每个计算节点找出最优工作量大小,并将全部计算节点的工作量汇总为一个最优工作量比例数组,然后将该数组运用到分布式机器学习模型训练中以达到平衡集群负载的效果。因此,AutoT方法的实现对集群环境性能有一定的限制,这里需要假设集群节点性能在算法训练过程中保持稳定。该方法采用以下步骤实现:
步骤1:采用参数服务器系统,使用若干台服务器搭建集群,将集群中的一个节点作为参数服务器,其他节点作为计算节点。
步骤2:使用小规模训练集对分布式机器学习模型进行预训练,在保证一轮迭代训练总工作量不变的前提下,根据各计算节点上一轮迭代训练的耗时,对相应节点的工作量进行动态调整,直到获得最优工作量比例。
步骤3:将步骤2中获得的最优工作量比例应用到完整的分布式机器学习模型训练中,各计算节点每次迭代训练按照相应工作量大小获取训练集进行梯度计算,从而有效地平衡了集群负载差异,提升了分布式机器学习模型训练的整体性能。
本发明的有益效果:在进行分布式机器学习模型训练时,基于BSP模型的分布式系统一直受限于滞后问题的影响,导致其在真实环境中浪费了大量的系统资源,整体性能十分低下。本发明通过自动化调优的方式为集群中每个计算节点找出最优工作量大小,从而有效地平衡了各节点之间的性能差异,有效缓解了滞后问题,提高了分布式机器学习模型训练的整体性能。
附图说明
图1是AutoT方法的快速分配过程。
图2是AutoT方法的微量调整过程。
图3是不同并行计算模型的准确率对比。
图4是不同并行计算模型的训练时间对比。
具体实施方式
下面结合附图和具体实施步骤对本发明做了进一步的说明:
步骤1:采用参数服务器系统,使用若干台服务器搭建集群,其中一个节点作为参数服务器,其他节点作为计算节点。参数服务器采用多线程的方式实现,每个传输线程对应一个计算节点,用于维持参数服务器与计算节点之间的通信;同时,专门设置了一个线程作为参数更新管理器,用于处理全局模型参数的更新。
步骤2:使用小规模训练集对模型进行预训练,在保证一轮迭代训练总工作量不变的前提下,根据各计算节点上一轮迭代训练的耗时,对相应节点的工作量进行动态调整,直到获得最优工作量比例。
各计算节点执行上一轮迭代训练所消耗的时间直接反映了节点的性能。因此,AutoT方法通过记录各计算节点开始迭代训练前的时间以及完成梯度计算并上传局部更新后的时间,从而计算出对应节点完成上一轮迭代训练所消耗的时间。然后根据各计算节点上一轮迭代训练的耗时,对相应节点的工作量进行动态调整,直至获得最优工作量比例。调整的过程主要分为两个部分:快速分配和微量调整。
1)快速分配:为了加快自动调优的进程,各计算节点工作量的初次重分配采用快速分配的方式执行。在各计算节点完成第一次迭代训练后,根据各节点完成迭代训练的时间获得其相应的处理速度。在保证总工作量一定的前提下,根据处理速度的比值得出各计算节点的工作量,计算节点按照重分配的工作量进行下一轮迭代训练,见图1。
2)微量调整:进行完快速分配后,各计算节点的工作量大致上已经能够反映当前各节点的性能差异。在后续迭代训练过程中,采用微量调整的方式对各节点的工作量进行微调。在各计算节点完成迭代训练后,按照完成迭代训练的时间对各节点进行排序,然后在保证总工作量一定的前提下,对最快节点和最慢节点的工作量进行微调,直到找到最优工作量比例,见图2。
经过多次微量调整之后,各计算节点单次迭代训练的耗时会逐渐趋向稳定。本发明将AutoT方法的结束条件定义为:任意两个计算进程上一轮迭代训练的耗时差小于等于精度系数θ。其条件表达式为:
|costTimei-costTimej|≤θ,其中i≠j,1≤i,j≤N
其中costTimei表示第i个计算进程上一轮迭代训练的耗时,N表示计算进程的总数量。θ表示精度系数,用于控制结果的精度。
步骤3:将步骤2中获得的最优工作量比例应用到完整的分布式机器学习模型训练中,各计算节点每次迭代训练按照相应工作量大小获取训练集进行梯度计算,从而有效地平衡了集群负载差异,提升了分布式机器学习模型训练的整体性能。
算法1和算法2分别介绍了AutoT方法在计算节点以及参数服务器上的实现过程。
算法1的具体执行流程如下:
1)下载该节点上的子训练集。
2)使用MPI从参数服务器中接收本轮训练的迭代号,并判断当前迭代号是否为-1。若不是,进入步骤3;否则,预训练结束,输出最优工作量比例。
3)使用MPI从参数服务器获取经过调整后的工作量数组。
4)记录当前系统时间。然后开始进行迭代训练,训练完成后通过MPI将局部梯度更新上传到参数服务器。待计算节点完成单次迭代训练的整个流程后,再一次获取系统时间,并将计算出来的训练耗时发送给参数服务器。
5)同步等待所有计算进程完成迭代训练后,使用MPI从参数服务器上接收最新的全局模型参数。然后跳至步骤2,重复训练。
算法2的具体执行流程如下:
1)初始化firstTime为TRUE,表示当前是第一次调整工作量;初始化stable为FALSE,表示当前各计算进程工作量的分配还不平衡。
2)判断结束条件,若工作任务为空或者各计算进程的工作量分配已经平衡,则跳出循环,直接跳至步骤8;否则,向各计算进程发送下一轮迭代训练的迭代号以及调整后的工作量。
3)同步等待,直到接收完所有计算进程的局部梯度更新以及迭代训练的耗时。
4)根据所有的局部梯度更新计算出新的全局模型参数。
5)判断当前调整是否为首次调整,若是,采用快速分配方案对各计算进程的工作量进行重分配;否则,采用微量调整方案进行重分配。
6)根据各计算进程上一轮迭代训练的耗时以及预先设置的精度,判断当前各计算进程的工作量是否平衡。
7)给所有计算进程发送新的全局参数模型,跳至步骤2,重复训练。
8)向各计算进程发送迭代号-1并结束训练。
图3展示了使用不同并行计算模型进行分布式机器学习模型训练得到的准确率对比。根据数据可知,无论使用何种并行计算模型,得到的准确率曲线随着计算进程数增加均呈下降趋势。这是因为模型训练采用随机梯度下降算法对模型进行分布式训练,该算法存在着一定误差,而计算进程数的增加导致了误差的放大,造成了准确率的降低。
图4展示了使用不同并行计算模型进行分布式机器学习模型训练得到的训练时间对比。根据数据可知,无论使用何种并行计算模型,得到的训练时间曲线随着计算进程数增加均呈下降趋势。计算节点的增加意味着程序并行度的提高,从而加快了模型的训练速度。然而,随着计算进程的不断增加,计算节点与参数服务器的通信次数同样增加,因此当计算进程到达一定数量时,通信开销大于计算开销,训练时间趋于平缓。
实验中各计算模型性能出现差异的原因如下:BSP模型在计算过程中,每个迭代都按照最慢节点的训练速度进行,从而造成了明显的滞后问题。除此之外,BSP模型在同步屏障的使用上也消耗了大量的时间。但是得益于这种同步机制,BSP模型保证了参数更新的全局一致性以及算法执行的正确性。因此,可以看出图3中BSP模型的准确率曲线和训练时间曲线都比SSP模型要高,同时还保证了较高的准确率。SSP模型利用容错特性,使用了更灵活的一致性同步策略,不仅有效缓解了滞后问题,而且还大大减少了同步屏障的使用次数,使得训练时间有大幅的降低。然而模型的延迟更新会导致准确率的损失,因此虽然SSP模型加快了模型训练的速度,但是它无法保证准确率。FBSP模型在严格同步机制的基础上,通过重分配各计算节点的工作量来平衡各节点间的性能差异,在保证较高准确率的前提下,有效地降低了模型的训练时间。可以发现,FBSP模型的准确率曲线和BSP模型比较相似,而训练时间曲线却能够达到SSP模型的水平。从而验证了AutoT方法的有效性。
其中FBSP模型表示基于最优工作量的BSP模型,通过采用最优工作量,FBSP模型有效地平衡了各集群节点负载差异,从而解决了滞后问题,提高了分布式机器学习模型训练的整体性能。