比Horovod/NCCL 快8倍!伯克利与微软联合发布最优GPU通信库Blink

当下大规模分布式机器学习模型训练中,数据并行是最广为使用的方法。随着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)并没有很好的利用所有同构和异构的网络传输线路。本文作者称其为网络异构性,具体表现在如下三方面:

  1. 不同型号的同类机器(如由P100 GPU组成的DGX-1,和用V100 GPU组成的DGX-1),其内部传输通道的拓扑结构不同。如下图所示,DGX-1-V100 相比DGX-1-P100,第一,单条NVLink的带宽有区别:DGX-1-P100 使用第一代NVLink,单条链接带宽在18-20GB/s。DGX-1-V100使用第二代NVLink,单条链接带宽在22-25GB/s。第二,拓扑结构也不同,相比DGX-1-P100,DGX-1-V100的网络链路拓扑结构,在图1黑色实线(DGX-1-P100)拓扑结构基础上,新增了一圈NVLink线路(图1红色虚线所示)。
  1. 当前的软件通信协议,并没有充分利用异构的GPU间通信通道(例如,NVLink和PCIe)。其根本原因是,现有通信协议使用的是在软件层面,建立多个环状通信通道。在一个环状通信通道里,整个环的带宽会被带宽最小的链接所限制。试想如果在一个由NVLink组建的多GPU的环状通信通道中,有一段链接是PCIe,则整个这个这个环状通信通道的带宽会被限制在了PCIe的带宽上(因为PCIe带宽远小于NVLink)。所以当下数据聚合的软件通信协议(NCCL/Horovod)就只用同构的高速传输线路(NVLink),而忽略其他低速,异构的传输线路(PCIe)(如下图 2(a)所示)
  1. 在多租户的云端机群上,任务调度器是不知道GPU间通信线路的拓扑结构的。在云环境下,多个任务可能会被分派在同一台多卡的机器上。即使任务调度器知道GPU间通信拓扑结构,为了缩短任务的排队等待时间,调度器还是会把一个任务分配在多个机器上。(例如,一个8GPU的任务,调度器会把其分配为3个GPU在一台机器上,另外5个GPU在另一台机器上)。通过对一个云环境机群的调度历史记录分析,我们发现虽然任务大都需要2的幂的GPU数量(2,4,8),但是调度器还是经常会给任务分配3,5,6,7GPU在同一台机器上(如图3所示)。

如上三点 网络异构性,导致了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实现方案

Blink 系统流程图如 上图( 图9)所示:

  1. 当一个机器学习的任务被分配到多个GPU上时,Blink自动探索这些GPU之间所有的可用网络通信线路和其拓扑结构。
  2. 当得到了所有的通信线路和拓扑结构,Blink通过生成树协议,在TreeGen模块里自动生成(1)最优的,多个,数据通信树状通道。(2)异构通信链路里,根据不同链路带宽分配不同传输数据的比例。
  3. 当TreeGen产生了最优数据通信协议,CodeGen模块会把通信协议转换成拥有和NCCL的API一致的CUDA代码,然后编译生成库函数libBlink.so
  4. Blink使用LD_Preload 去动态的将NCCL的库函数(libNCCL.so)替换为Blink的库函数(libBlink.so),从而让主程序直接调用Blink的库函数。

实验结果

1 单机多GPU的数据聚合实验结果(DGX-1-V100,DGX-1-P100,DGX-2)

图示横轴每个柱状图下面的数组代表参与数据聚合的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)。

2 机器学习模型训练效率提升结果

本文使用数据集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

参考文献

  1. Deepak Narayanan, Aaron Harlap, Amar Phanishayee, Vivek Seshadri, Nikhil Devanur, Greg Granger, Phil Gibbons, and Matei Zaharia. Pipedream: Generalized pipeline parallelism for dnn training. In ACM Symposium on Operating Systems Principles (SOSP), 2019
  2. Sylvain Jeaugey. Optimized inter-GPU collective operations with NCCL 2. https://developer.nvidia. com/nccl, 2017.
  3. Alex Sergeev and Mike Del Balso. Horovod: fast and easy distributed deep learning in TensorFlow. arXiv preprint arXiv:1802.05799, 2018.
  4. Andrew Ng. Bringing HPC Techniques to Deep Learning. http://research.baidu.com/ bringing-hpc-techniques-deep-learning/, 2017.
  5. Verizon marks milestone with successful 400G technology trial. https://bit.ly/2lKgAs7, 2018.
  6. NVIDIA NVLINK. http://www.nvidia.com/ object/nvlink.html, 2017.
  7. NVIDIA NVSWITCH. http:// images.nvidia.com/content/pdf/ nvswitch-technical-overview.pdf, 2018.
  • 发表于:
  • 本文为 InfoQ 中文站特供稿件
  • 首发地址https://www.infoq.cn/article/8N5rWvUSR1W6ss4AtgXi
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券