论文部分内容阅读
近年来,深度学习被广泛应用于图像处理、自然语言处理等各种领域,其成功源于大数据、算法模型和计算能力的共同发展。为了提高深度学习模型的普适性,数据集和模型规模不断增长,训练所需的时间也随之增加,对计算能力产生了更高的需求。为了提高计算能力,缩短训练时间,近年来开始在集群上进行分布式训练,将原来单机上的训练过程分布到多个机器上并行执行。现有流行的深度学习系统如Tensorflow、MXNet等都支持分布式训练,但是它们都只适用于各个节点计算性能相似的同构集群,而在实际生产中会存在一些因节点硬件性能不同或者多作业资源竞争导致的异构集群,在这些异构集群中进行分布式训练时,不同的工作节点(worker)的迭代速度不同,若采用现有分布式深度学习系统中常用的同步并行(BSP)或异步并行(ASP)的分布式SGD(Stochastic Gradient Descent)算法,每次迭代过程中慢工作节点都会因同步等待或参数过时的影响拖慢整体训练速度,为此本文针对异构集群中问题对分布式训练过程进行优化,主要工作如下:(1)本文对现有分布式深度学习系统通常采用的BSP和ASP算法以及几种分布式SGD变体在异构集群中分布式训练时存在的问题进行了分析,在此基础上提出了基于工作节点运行时状态的自适应k-syn/asyn SGD算法。对于同步的k-syn SGD算法,根据各个工作节点的每次迭代的完成时间控制参数服务器每次迭代聚合梯度的数量(即k值),以最大化系统吞吐率。对于异步的k-asyn SGD算法,根据工作节点的参数版本灵活控制全局参数更新的时机,使系统保持较高吞吐率的同时控制参数过时的影响,减小收敛时间。(2)为了进一步提高异构集群中的分布式训练效率,本文在自适应k-syn/asyn SGD的基础上提出了基于工作节点性能的批大小(batch size)分配算法,通过循环神经网络GRU(Gated Recurrent Unit)和指数平均法预测各个工作节点的计算速度并分配与之对应的批大小,以尽量减小工作节点迭代时间的差距,从而消除慢工作节点的影响。(3)我们基于Tensorflow实现了本文所提出的方法,然后在同构集群以及人工模拟的硬件异构集群和多作业资源竞争异构集群上对我们的自适应k-syn/asyn SGD算法和批大小分配算法的分布式训练性能进行了测试和分析,实验结果表明相比BSP和ASP我们的方法显著地提高了系统在异构集群中的分布式训练性能。