当下大规模分布式机器学习模型训练中,数据并行是最广为使用的方法。随着GPU的算力不断提升,GPU间的数据聚合(即模型同步)成为了大规模分布式模型训练的瓶颈。当下流行的数据聚合库函数(Nvidia的NCCL,百度的Ring-AllReduce)或分布式模型训练平台(例如Uber的Horovod)并没有很好的解决GPU间数据通信的问题。例如文献【1】指出,利用现有的Horovord 或NCCL,GPU间数据聚合可能会占到模型训练总耗时的50%到90%。这些现有GPU间数据聚合解决方案的最大问题在于:无法充分利用所有的,同构/异构的数据通信通道。因此,UC Berkeley、Microsoft Research 和 University of Wisconsin-Madison联合发布,利用GPU间所有异构数据传输通道,实现数据聚合的最优解决方案Blink。相比NCCL/Horovod,Blink提高GPU间数据聚合的通信效率高达8倍,最多可以缩短分布式机器学习模型总训练时间的40%。
数据并行是当下最为流行的大规模分布式机器学习方法。现如今GPU算力极速增长,使得分布式机器学习中模型训练的瓶颈,由GPU运算过程,转移到了GPU间数据通信过程。为了解决GPU间数据通信的瓶颈,在硬件上,GPU生产厂商Nvidia,针对顶级单机多卡的机器(例如DGX-1, DGX-2)发布了点对点的高速GPU间数据传输通道NVLink(文献【6】)和NVSwitch(文献【7】),单条NVLink的通信带宽是传统PCIe总线的2-3倍。多机间通信通过增设多个InfiniBand/Ethernet端口从而可以实现多端口并行传输提高网络吞吐率。在软件上,例如Uber的Horovod(文献【3】),Nvidia的NCCL(文献【2】),百度的Ring-AllReduce(文献【4】),都是专门针对单机内GPU,以及多机器间GPU通信所进行的系统层面优化的库函数和机器学习平台。但这种软硬件方面的提升,并没有很好的解决GPU数据聚合(模型同步)问题。例如文献【1】指出,利用现有的Horovod/NCCL,GPU间数据聚合通信时间依然会占到模型训练总耗时的50%到90%不等。
本文作者认为,最大问题在于当下的软件层面GPU间通信协议(NCCL/Horovod)并没有很好的利用所有同构和异构的网络传输线路。本文作者称其为网络异构性,具体表现在如下三方面:
如上三点 网络异构性,导致了NCCL/Horovod在优化GPU间数据聚合的过程中,无法充分利用所有的同构/异构通信线路。如图2(b)所示,当GPU1和GPU4之前没有NVLink直接相连的情况下,NCCL/Horovod因为无法在GPU0,GPU1,GPU4之间构建环状通道,所以无法利用高速通信线路NVLink,于是只能用低速的PCIe做为数据聚合的通道。然而,即使在NCCL/Horovod能够构建环状通信通道的情况下,NVLink还是有可能没有被充分利用(例如图4所示,4(b)中,GPU1和3,5和7,0和4 之间的NVLink未被利用)。
基于如上问题,本文提出Blink,一个最优的GPU间数据聚合的通信库。首先,对于由于机器版本不同,或被分配在单个机器内的GPU间任意拓扑结构的情况,Blink 打破了传统的GPU间环状(ring)通信通道的构建协议,提出了使用生成树(spanning tree)的通信通道构建协议。相比于环状通信通道,生成树通信通道可以更好的利用所有的网络链接线路(例如:图2(b),4(c)所示)。其次,针对异构通信线路(如NVLink和PCIe),Blink可以根据线路的带宽不同,调整在其上传输数据的比例划分,从而充分利用异构通信线路(例如图2(a))。最后,Blink提供了与NCCL一致的API,所以可以直接无缝应用于流行的机器学习平台上,如TensorFlow、Pytorch等。
Blink 系统流程图如 上图( 图9)所示:
.
so.
so)替换为Blink的库函数(libBlink.
so),从而让主程序直接调用Blink的库函数。图示横轴每个柱状图下面的数组代表参与数据聚合的GPU序列(数字对应图1的GPU的序列号)。
在DGX-1-V100上进行的Broadcast和AllReduce实验中,相比于NCCL,Blink的broadcast吞吐率(图15)提升高达6倍(平均提升2倍),Blink的AllReduce吞吐率(图17)提升高达8倍(平均提升2倍)
在DGX-1-P100的机器上,相比于NCCL,Blink的broadcast提高吞吐率(图16)高达3倍(平均提升1.6倍)
在DGX-2的16-GPU机器上,相比于NCCL,Blink的AllReduce提高吞吐率高达3.5倍(图19),减小通信延时3.32倍(图20)。
本文使用数据集ImageNet1K,对四个常见机器学习模型(ResNet18,ResNet50,AlexNet,VGG16)进行了分布式模型训练。
如图18所示,在单机DGX-1上,相比于NCCL/Horovod,Blink可以缩短GPU间数据聚合时间高达87%,从而缩短模型训练总时间高达40%。
如图22所示,在多机,即2个DGX-1之间,相比于NCCL/Horovod,Blink可以提高11%的模型训练效率(图22(a))。Blink效率提升小的原因在于,当下云环境的多机间通信仍用40Gbps的低速Ethernet。目前AWS和其他运营商(文献【5】)都在逐步改进多机间的网络通信带宽。针对可能达到的多机通信带宽,我们做了模拟器仿真,仿真结果如22(b)所示,相比NCCL/Horovod, Blink可以提升多机器的GPU间数据聚合效率高达7倍。
论文原文链接:
https://arxiv.org/abs/1910.04940
领取专属 10元无门槛券
私享最新 技术干货