1.1.5 通信优化技术
通信效率已经被证实是限制当今分布式机器学习系统性能的最大瓶颈。如何优化分布式模型训练过程中参数交换的效率成为当前分布式网络和系统领域面临的一个关键难题。国内外学术界和工业界对此展开了一系列积极探索,部分技术归类如图1-21所示。本节从通信拓扑优化、通信量压缩、网络协议的定制、流量调度的优化和任务资源调度五个方面介绍相关研究现状和发展动态。
1.1.5.1 通信拓扑优化
在基于参数服务器架构的分布式训练中,通信拓扑在逻辑上刻画了参数交换阶段需要进行通信的节点、节点间的通信内容和通信路径。国内外的研究者针对上述三个方面,通过节点弹性伸缩、层次化参数聚合等手段分别进行优化,将参数交换阶段的数据传输需求均衡分布在网络节点间,降低网络中的带宽竞争,缓解网络瓶颈效应,从而提高参数交换的效率。
图1-21 分布式机器学习的通信优化技术归类概览
节点弹性伸缩的主要思想是通过调整参与参数交换的训练节点和参数服务器节点,缓解节点的瓶颈效应。例如,在多租户共享集群环境下通过使用新节点替换慢节点的方式缓解性能落伍训练节点的瓶颈效应[84-85]。此外,CMU的研究者设计的资源调度机制为训练中的任务弹性伸缩训练节点数量以加速任务完成[86]。参数动态分配则是在多轮训练中通过对参数服务器节点及其需要维护的模型参数量进行重新分配调整,实现参数服务器的负载均衡,降低通信瓶颈效应。香港大学的研究者分析了TensorFlow和MXNET两种分布式机器学习框架在运行训练任务时参数服务器的负载情况及其对训练速度的影响[87]。结果表明,这两种框架使用默认固定的参数分配策略,将导致参数服务器的负载不均衡,容易在参数服务器节点处遭遇通信瓶颈,从而拖慢整个训练的速度。基于此,他们提出在分布式训练的多轮迭代中通过动态地分配各参数服务器节点需要维护的模型参数量,以实现负载均衡和缓解通信瓶颈效应。
除了节点弹性伸缩和参数动态分配,第三种优化思路是通过层次化参数聚合来降低网络中的带宽需求,均衡数据传输在网络中的分布来加速参数交换。例如,基于参数服务器的中心化参数交换一般分为参数分发与参数聚合两个步骤。传统方式下,参数服务器作为唯一的发送者将参数分发给所有计算节点,或者作为唯一的接收者聚合所有计算节点的参数。这种方式会导致参数服务器侧网络出现严重的通信瓶颈。近年来,许多研究者利用计算节点或其他设备协助参数分发和聚合以层次化参数交换拓扑,逐跳减少网络中的数据传输量。例如,Mai等人[55]将参数交换拓扑构建成以参数服务器为根节点的规则生成树,逐层向下分发参数或逐层向上聚合参数。Luo等人[88]设计了物理拓扑感知的二层参数交换拓扑,实现了参数交换拓扑与物理拓扑的实时匹配。Luo等人[89]在以交换机为中心的传统数据中心的集群机架上引入PBox聚合同一机架节点的参数更新以减少跨机架的通信量。Wan等人[90]提出在计算节点和参数服务器间引入聚合层,建立树状聚合拓扑,最小化叶脊网络拓扑下跨超额认购区域的流量。文献[91]利用新型P4可编程交换机直接在交换机上聚合参数。文献[92]、[93]进一步在通信环境简单的集群中系统地实现了基于新型可编程交换机的网内参数聚合服务。
1.1.5.2 通信量压缩
一些研究利用机器学习模型训练对不完整参数更新的容忍性,通过选择性传输和参数压缩等手段减少网络通信量,缓解参数交换阶段的通信瓶颈。选择性传输的主要思想是,在保证模型收敛的前提下,选择部分节点的参数更新进行传输以减少数据传输量。研究表明,在每轮迭代训练中,随机或按轮询方式选择一组节点参与参数交换时,机器学习模型依然收敛[94-96]。
除了选择性传输,另一种降低网络通信量的常见思路是压缩传输的参数,包括量化、稀疏化和低秩分解等。在参数量化方面,微软亚洲研究院的研究者通过量化使用1比特的0或1表示原本需要32比特的参数数值,将数据量压缩了32倍[97]。为了降低量化后参数数值的精度损失对模型精度的损害,文献[53]、[98]引入了数值精度补偿以及分级量化方法来平衡通信开销和模型精度损失。除了对梯度的量化,文献[99]提出双向量化机制同时对训练节点到参数服务器的梯度和参数服务器到训练节点的模型进行量化。
在参数稀疏化方面,Strom等人[100]率先通过仅传输少部分数值高于指定阈值的梯度来压缩通信数据量。在此基础上,文献[52]引入梯度剪枝、动量校正等技术,在进一步提高压缩率的同时,保证模型精度无损失。与传统的设置一个静态稀疏化阈值方法不同的是,文献[101]根据深度神经网络结构的不同、训练阶段的不同为模型的不同层次动态选择稀疏化阈值,对全连接层和卷积层的压缩率分别可达到200倍和40倍。现有的量化和稀疏化压缩算法大多采用固定的压缩率,可能导致梯度压缩效果不佳甚至损失模型精度的问题。近期的一些研究开始探索通过在量化和稀疏化中采用自适应压缩率,进一步降低通信量、保证模型精度。文献[102]根据每轮迭代中的误差函数战略性地调整量化压缩率,在减少通信数据量和时间的同时提升模型精度。文献[103]则针对稀疏化方法,根据数据规模和实际使用的通信技术动态调整压缩率,极大地优化了通信效率。
在参数矩阵分解方面,文献[104]、[105]分别采用主成分分析法和奇异值分解法将大参数矩阵分解为参数量更少的多个参数小矩阵进行传输。在此基础上,文献[106]进一步引入误差补偿、降低分解复杂度等方法提高矩阵分解效率。上述工作虽然各有侧重,但是都充分展示了机器学习算法的随机性和模型参数的冗余性,以及机器学习模型训练对不完整参数更新的高容忍性。这种容忍性为传输优化带来了新思路和丰富的优化空间。可以突破现有设计对应用需要完整数据传输服务这一限定,让系统根据网络实时负载进行选择性的传输和动态调整传输策略,实现灵活高效的传输。
1.1.5.3 网络协议定制
近期的一些研究尝试为分布式训练设计专用的网络协议以提升模型训练的效率,目前主要包括对现有网络传输协议和协议栈的优化。在网络传输协议方面,研究者主要利用分布式训练对不完整参数更新的容忍性和不同参数更新对模型收敛贡献的差异性来简化网络传输协议。在文献[107]中,Liu等人利用机器学习这类近似应用对不完整数据的容忍性,采用允许网络丢包的设计以换取更好的传输性能。同时,Xia等人[108]发现10%~35%的随机网络丢包对分布式训练性能的影响可忽略不计。随后,该研究团队进一步发现不同的参数更新通常由于数值大小不同而对推进模型收敛的贡献存在差异,即参数更新的重要度存在差异性[109]。基于此,他们提出一种容忍有限丢包的传输协议,并结合使用感知参数更新重要度的排队和丢包等机制提高传输效率。除了上述端到端的网络协议优化,Sapio等人[93]提出支持参数在交换机网内聚合的传输协议,该协议联合设计主机侧丢包重传机制以及交换机侧的计分板机制来加速单任务的参数网内聚合。在此工作基础上,Lao等人[92]进一步针对多任务共享网内交换机资源的场景,设计了动态的、尽力的网内聚合传输协议,提高网内资源利用率和共享集群中多任务的总训练吞吐率。
除了对网络传输协议进行创新,另一种思路是优化网络协议栈,通过使用远程直接内存访问(Remote Direct Memory Access,RDMA)或IPoIB(Internet Protocol over InfiniBand)协议替换传统的TCP/IP协议,避免应用内存与内核内存之间复制数据的通信延迟,提供高速的网络通信服务。微软研究院的研究者将RDMA技术应用到分布式深度学习中,大幅提升了模型收敛速度[110-111]。文献[112]中结果表明,IPoIB协议在含有100个GPU的集群中可以达到53%的加速性能,而RDMA协议可以达到96%。在此基础上,他们再次提出基于RDMA的自适应gRPC协议,该协议根据消息大小动态选择传输协议,从而加速参数通信。这些工作充分展示了模型训练对不完整参数更新的容忍性、参数更新对模型收敛重要度的差异性,以及二者如何被用于网络传输技术的创新,这些特性使得分布式机器学习系统能够获得更好的训练性能。
1.1.5.4 流量调度优化
很多研究通过优化参数交换阶段的流量调度编排策略,提高计算资源利用率和网络带宽利用率,帮助数据传输的加速完成和模型训练的快速迭代。针对分布式训练的流量调度优化设计主要利用深度学习模型训练过程中计算和通信之间的依赖关系,提高计算和通信的重叠,降低训练节点的计算阻塞时间。深度学习训练的深度神经网络模型由多个模块化功能层组成,每层都包含需要执行数学运算的参数。每次迭代训练包含前向传播和后向传播两个过程。前向传播以训练数据为输入,从前向后逐层计算,前层的输出是后层的输入。后向传播则以前向传播中最后层的输出为输入,从后向前逐层计算参数更新,后层的输出是前层的输入。在分布式训练架构下,训练节点需要在参数更新完成全局同步后才能执行下一轮迭代的计算任务。因此,各层参数的计算依赖于相关层的参数同步结果。利用上述依赖关系,文献[113]~[115]提出了基于端主机的流量调度设计,通过将参数交换的通信时间隐藏在参数计算中加速训练。在这些工作的基础上,文献[116]基于可用带宽的预测进一步通过控制参数的发送顺序和发送开始时间提高计算与通信的重叠比,提升了网络利用率和算力利用率。清华大学的研究团队则提出了网络级的流量调度设计加速卷积神经网络的训练[117],以及应用和硬件环境都可能不同的情况下基于优先级的网络流量调度设计[118]。
上述研究都在确定传输路径的前提下优化流量调度策略,假设分布式机器学习的参数交换需要传统的流式传输服务,因此通常采用单路径传输以避免应用因为数据乱序而无法工作。然而,香港科技大学的研究者最近发现参数更新的数据传输具有顺序独立性[109]。分布式训练过程中节点之间传输一个数据包通常包含多条参数更新信息,即使数据包在网络中经历乱序传输也能被接收端正确地处理而不影响模型训练。基于此,他们提出使用多条等价路径同时传输参数更新数据提高效率。但是,该设计缺乏对底层网络实时状态的考虑,无法根据网络负载动态调整传输路径获得最佳的传输性能,相关问题及其具体方案的设计还需要进一步研究。另外,该工作在设计时只考虑了参数传输顺序独立性这一特征。鉴于分布式训练还具有参数更新重要度差异性和不完整参数更新容忍性等特征,综合考虑网络状态和分布式训练的多维特征,将传输路径和调度进行联合设计,能够获得更佳的性能。
1.1.5.5 任务资源调度
分布式机器学习任务与传统的数据中心分布式任务相比,有三点不同:其一,分布式机器学习任务持续时间更长,数据传输量也更大;其二,分布式机器学习训练任务的运行时间及计算量不能提前预知,且任务超参需要通过重复试错来调优,反复的重配置和重训练会导致更长的运行时间;其三,分布式机器学习训练任务之间具有关联性。为了加速超参搜索过程,开发者通常会同时发起多个分布式训练任务,这些协作任务被称为Cojob,一个任务的中断与该任务所在Cojob中其他任务的表现相关。
近年来,分布式机器学习的任务调度问题受到了广泛关注,并涌现了一批优秀的研究工作。其中,Optimus[119]和Dorm[120]等调度系统在分布式机器学习任务的生命周期中,集群会在某个时间窗口有多余的空闲资源,这些调度系统将空闲资源额外分配给运行中的任务,加速这些任务的训练进度。当有新的任务到达后,调度系统又可以从运行中的任务中抽出部分资源给新到达的任务。通过这样动态的资源分配方案,最小化分布式训练任务的平均完成时间。
此外,Harmony[121]和DL2[122]采用强化学习来对集群中的任务进行放置,尽量将任务放置在一个局部范围内,从而减少了任务往网络中发送的流量,达到高效利用集群资源及最小化任务完成时间的双重目的。这些最小化任务完成时间的调度工作只聚焦于单个任务的完成时间优化,忽略了机器学习模型的开发包含了众多操作,而这些操作不需要将模型训练到收敛或者完成所有预设的计算量,如超参搜索。为此,SLAQ[123]优先将资源分配给训练前期的任务,通过加速深度学习任务的前期训练来加快开发过程。Tiresias[124]及Gandiva[125]针对超参搜索过程的特点,将一个Cojob内的任务同时进行调度,减少Cojob内各个子流的相互等待时间,这可以有效减少Cojob的平均完成时间。然而,这些调度方案都聚焦于计算资源(如CPU、GPU和内存)的调度,忽略了网络资源对任务训练效率的影响。于是,Zhou等人[126]以网络资源为手段,实现了一套开源网络调度系统Grouper,通过控制各个分布式训练任务产生的数据流出/入网络的顺序及带宽,达到最小化阶段完成时间的目的,从而加速超参搜索过程。随后,他们进而利用任务前期的性能反馈判断任务是否能存活,提出任务进度感知的流量调度算法,并开源网络调度系统JPAS[127]加快机器学习的开发流程。该系统不需要对上层分布式训练框架及底层网络设施做任何改动,具有很强的可部署性。