摘要:
研究背景 深度学习技术在工业界和学术界已经被广泛地使用。越来越多大规模深度学习模型的使用和大量的数据通信推动着分布式训练的性能不断提升。集合通信的使用将分布式训练中多个硬件之间的数据通信变得简洁和高效。与此同时,集合通信也成为了分布式机器学习中不可或缺的一部分。集合通信由通信库来实现,除了在高性能计算领域被广泛使用的信息传递接口(Message Passing Interface,MPI)通信库之外,工业界针对深度学习的技术特点和硬件特性,对集合通信库(Collective Communication Library or CCL)进行了专门的优化,并提供了各自不同的通信库实现。
目的 从学术界广泛使用的MPI通信库到工业界提供的各自不同的集合通信库,我们产生了如下的思考:1. 为什么各个企业重复实现各自的通信库,而不是使用学术界经典的MPI通信库?2. 这些不同的通信库之间的性能有何差异?3. 这些通信库的设计结构是什么样的?这些设计是否有相同之处?以及为什么某些设计结构是相同的?为了回答这些问题,在本篇论文中,我们调研了各个企业所提供的,在深度学习领域被广泛使用的通信库(在文章中我们统一称之为xCCL),包括NCCL,oneCCL,RCCL,MSCCL,ACCL,和Gloo。我们从通信库的设计和使用场景进行讨论和研究,并设计了实验对一些通信库的性能进行比较,从而得出我们的观察和结论,并为后续的通信库的设计提供参考及思路。
方法 本篇论文的结构如下:第二章介绍了集合通信中的通信模式;第三章和第四章分别描述了常见的硬件网络拓扑和通信算法;第五章介绍了集合通信在深度学习训练中的应用场景和作用,以及一些来自业界的使用案例分析;第六章调研了业界提供的不同的通信库以及他们各自的特性;第七章为实验章节,我们选取了一些通信库,通过基准测试的方式,对比了它们之间的性能差异;第八章探讨了我们通过调研和实验所观察到的现象和提出的讨论;第九章介绍了与本论文相关的工作;第十章总结本篇论文。
结果 (1) 为什么xCCL比传统的MPI更有吸引力?首先,深度学习通常部署在GPU上,业界更倾向于针对这种特定的硬件去优化通信库;其次,业界提供的针对特定硬件的通信库更轻量化,针对深度学习进行设计的通信库使得相关的开发者更轻松地将其通信库整合进自己的代码中;最后,相比起xCCL,传统的MPI对于特定硬件(比如GPU)的性能优化要弱于xCCL。(2) 哪一个通信库可以提供最佳的性能? 现阶段的实验表明,NCCL有着较好的性能。但与此同时,开发者们也在不断地改进各自的通信库,不断地优化其性能。例如,MSCCL允许使用者根据其程序的通信特征来对通信算法进行重新设计,以达到针对特定程序获得性能最优的目的。(3) 不同通信库之间的设计异同:从通信模式的角度来看,由于深度学习中数据通信的模型和传统MPI中所提供的通信模型有相似之处,以及许多xCCLs是基于英伟达提供的NCCL通信库所设计的,所以xCCL沿用了MPI所定义的集合通信模型,即All-Reduce和Broadcast。但不同的xCCL有着不同的特性,例如,它们有着不同的开源规定,以及针对不同型号的GPU进行了优化。(4) 现在常用的网络性能是否会成为xCCLs的性能瓶颈? 虽然网络带宽可能会对通信库的性能有所影响,但通过合理的设计,可以使通信库更为高效地利用有限的带宽。同时,各个厂商也在不断地设计和优化自己专用的硬件网络,从而达到更高的网络带宽和更快的数据传输速度。
结论 本篇论文对深度学习领域中常用的集合通信库(xCCL)进行了广泛的调研。我们从跨节点通信的基本原理和网络拓扑开始,讨论了集合通信中使用的数据传输算法,通过比较不同企业所提供的设计方案和真实案例分析来探索各种通信库的异同。我们通过对业界提供的两个通信库(NCCL和MSCCL)的基准测试来评估xCCL的性能,并对测试结果进行了分析。我们还讨论了为什么在存在经典的MPI通信库的情况下,xCCL在业界越来越受到重视,并进一步解释了这些通信库如何利用硬件加速器和高速互联网络来支持大规模深度学习模型训练。通过我们的调研,我们认为NCCL是目前最成熟的集合通信库。我们希望未来可以对NCCL通信库进行更深度的研究,从而将其优化有效地应用于其他通信库中。