Doubling all2all Performance with NVIDIA Collective Communication Library 2.12
- 作者: Karthik Mandakolathur
- 机构: NVIDIA
A1 主要贡献
本文主要介绍了NVIDIA Collective Communication Library (NCCL) 2.12版本中的一项关键性能优化。
-
核心问题: 现代分布式AI训练工作负载(如推荐系统和自然语言处理)严重依赖集合通信(Collective Communications)的性能。特别是
all2all
这类操作,在拥有数百个GPU的大规模集群中,会产生巨大的消息量($O(N^2)$),容易引发网络拥塞和热点,从而成为性能瓶瓶颈。此外,在某些GPU与NIC(网络接口卡)配比不均衡或通信器只包含部分GPU的拓扑结构下,传统的环形(ring)算法效率低下,甚至无法有效工作。 -
研究目标: 持续提升NCCL中集合通信的性能,解决大规模分布式训练中的通信瓶颈。
-
创新点: NCCL 2.12引入了一项名为PXN (PCI × NVLink) 的新功能。其核心创新在于改变了GPU与NIC之间的数据传输路径。PXN允许一个GPU通过高速的NVLink将数据发送到节点内的另一个GPU上,再由后者通过其本地的PCIe总线与NIC通信。这种方式避免了跨越CPU插槽的低速互连(如QPI),保证了数据传输的全带宽。PXN通过这种机制实现了消息聚合和网络流量优化,从而显著提升了
all2all
的性能,并为all-reduce
在特定拓扑下的高效执行提供了更大的灵活性。
A3 背景知识与设计原则
结合NVLink与网络通信
PXN (PCI × NVLink) 的核心机制
NCCL 2.12中引入的新功能称为PXN,即PCI × NVLink,因为它使GPU能够通过NVLink,然后通过PCI与节点上的NIC进行通信。这种方式替代了通过CPU并使用QPI或其他CPU间协议的路径,后者无法提供全部带宽。如此一来,即使每个GPU仍然尝试尽可能多地使用其本地NIC,它也可以在需要时访问其他NIC。
数据传输路径的改变
GPU不再为其本地NIC在本地内存中准备缓冲区,而是通过NVLink在一个中间GPU上准备缓冲区并写入数据。然后,它通知管理该中间GPU对应NIC的CPU代理数据已准备就-绪,而不是通知其自己的CPU代理。尽管GPU-CPU之间的同步可能会因为需要跨越CPU插槽而稍慢一些,但数据本身只使用NVLink和PCI交换机,从而保证了最大的带宽。
在Rail-optimized拓扑中的应用
在图1所示的拓扑中,来自每个DGX系统的NIC-0都连接到同一个叶交换机(L0),NIC-1都连接到同一个叶交换机(L1),以此类推。这种设计通常被称为“rail-optimized”(按通道优化)。Rail-optimized网络拓扑有助于最大化all-reduce性能,同时最小化数据流之间的网络干扰。它还可以通过减轻“rail”之间的连接负载来降低网络成本。PXN利用节点内GPU之间的NVIDIA NVSwitch连接,首先将数据移动到与目标位于同一个“rail”上的GPU,然后将数据发送到目的地,而无需跨越“rail”。这使得消息聚合和网络流量优化成为可能。
优化消息路径示例
在NCCL 2.12之前,图2中的消息需要经过三跳网络交换机(L0、S1和L3),这可能会导致争用并被其他流量拖慢。而通过PXN,在同一对NIC之间传递的消息被聚合起来,以最大化有效的消息速率和网络带宽。
A2 方法细节
消息聚合
多接收(multireceive)功能的实现
借助PXN,一个节点上的所有GPU可以将其数据移动到单个GPU上,以便发送到给定的目的地。这使得网络层能够通过实现一个新的multireceive
函数来聚合消息。该函数使得远程CPU代理能够在所有消息准备就绪后,将它们作为一整个包一次性发送出去。
多接收操作示例
例如,如果一个节点上的某个GPU正在执行all2all
操作,并且需要从一个远程节点的所有八个GPU接收数据,NCCL会调用一个带有八个缓冲区和相应大小的multireceive
操作。在发送端,网络层可以等待所有八个发送操作都准备就绪,然后一次性发送所有八条消息,这对消息速率有显著的提升效果。
连接共享与路由影响
消息聚合的另一个方面是,一个节点上所有GPU到特定目的地的连接现在是共享的。这意味着需要建立的连接数量更少。然而,如果路由算法依赖于大量不同的连接来获得良好的熵(entropy),这也可能会影响路由效率。
PXN对alltoall延迟的改进
图3对比了使用和不使用PXN时完成alltoall
集合操作的时间。此外,PXN也为all-reduce
操作提供了更灵活的GPU选择。
PXN提升all2all性能
all2all通信模式的挑战
图4显示,all2all
操作涉及每个进程到所有其他进程的通信。换句话说,在一个N-GPU集群中,作为all2all
操作一部分交换的消息数量是$O(N^2)$。
传统方法的局限性
在GPU之间交换的消息是各不相同的,无法使用诸如树/环(用于allreduce
)之类的算法进行优化。当你在数百个GPU上运行数十亿参数的模型时,消息的数量会引发拥塞,造成网络热点,并对性能产生负面影响。
PXN的解决方案
如前所述,PXN结合了NVLink和PCI通信,以减少通过二层(second-tier)核心(spine)交换机的流量并优化网络流量。它还通过将多达八条消息聚合成一条来提高消息速率。这两项改进都显著提升了all2all
的性能。
在1:1 GPU:NIC拓扑上的all-reduce优化
1:1 GPU:NIC拓扑下的挑战
PXN解决的另一个问题是每个NIC附近只有一个GPU的拓扑情况。传统的环形(ring)算法要求每个NIC附近有两个GPU:数据必须从网络进入第一个GPU,通过NVLink环绕所有GPU,然后从最后一个GPU输出到网络。第一个和最后一个GPU都必须靠近该NIC。第一个GPU必须能够高效地从网络接收数据,而最后一个GPU必须能够高效地通过网络发送数据。如果某个NIC附近只有一个GPU,那么就无法闭合环,必须通过CPU发送数据,这会严重影响性能。
PXN如何解决环形算法问题
有了PXN,只要环中的最后一个GPU能够通过NVLink访问第一个GPU,它就可以将其数据移动到第一个GPU。数据从那里被发送到NIC,从而使所有传输都保持在PCI交换机的局部范围内。
在GPU子集通信中的应用
这种情况不仅与每个PCI交换机上有一个GPU和一个NIC的PCI拓扑相关,当NCCL通信器(communicator)只包含GPU子集时,也可能发生在其他拓扑上。以一个拥有8个GPU并以NVLink超立方网格(hypercube mesh)互连的节点为例(图5)。
全GPU通信器下的环形路径
图6显示了当通信器包含系统中所有8个GPU时,可以利用拓扑中可用的高带宽NVLink连接形成一个环。这是可能的,因为GPU0和GPU1共享对同一个本地NIC的访问权限。
GPU子集通信器下的问题
通信器可以只包含GPU的一个子集。例如,它可以只包含GPU 0、2、4和6。在这种情况下,不跨越“rail”就无法创建环:从GPU 0进入节点的环将不得不从GPU 2、4或6退出,而这些GPU无法直接访问GPU 0的本地NIC(NIC 0和1)。
PXN在GPU子集通信下的优势
另一方面,PXN使得环的形成成为可能,因为GPU 2可以在数据通过NIC 0/1之前,将数据移回到GPU 0。
模型并行下的实际用例
这种情况在模型并行(model parallelism)中很常见,具体取决于模型的分割方式。例如,如果一个模型被分割到GPU 0-3上,而另一个模型运行在GPU 4-7上。这意味着GPU 0和GPU 4负责模型的相同部分,因此需要在所有节点上为所有GPU 0和GPU 4创建一个NCCL通信器,以便为相应的层执行all-reduce
操作。没有PXN,这些通信器无法高效地执行all-reduce
操作。
PXN带来的模型并行灵活性
到目前为止,实现高效模型并行的唯一方法是将模型分割到GPU 0、2、4、6和1、3、5、7上,这样NCCL子通信器将包含[0,1]、[2,3]、[4,5]和[6,7]而不是[0,4]、[1,5]、[2,6]和[3,7]。新的PXN功能为您提供了更大的灵活性,并简化了模型并行的使用。
A4 实验环境
本文未提供详细的实验环境配置,但根据文中的描述和图示,可以推断出以下信息:
- 硬件配置:
- 平台: 提及了NVIDIA DGX系统,如图1中的DGX-A系统和图5中的DGX-1系统。这些系统内部GPU通过NVSwitch和NVLink高速互连。
- GPU: DGX系统中集成了多个NVIDIA GPU。
- 网络: 节点间通过高速网络(如InfiniBand或Ethernet)连接,并采用了“rail-optimized”拓扑设计,即特定编号的NIC连接到相同的叶交换机。
- 软件配置:
- 核心库: 对比了NCCL 2.12版本(启用PXN)与之前版本的性能。
- 模型与数据集:
- 未指定用于基准测试的具体AI模型或数据集。性能测试是直接针对ncclAlltoall
集合操作的延迟进行的。
A5 实验结果
-
实验内容: 评估NCCL 2.12中引入的PXN功能对
alltoall
集合通信操作性能的影响。实验通过测量在启用和未启用PXN的情况下,不同消息大小下alltoall
操作的完成时间(延迟)来进行对比。 -
实验结果与分析:
- 根据图3的性能曲线图,与之前的版本(橙线)相比,启用了PXN的NCCL 2.12(蓝线)在所有测试的消息大小下,
alltoall
操作的延迟都显著降低。 - 这一结果证实了PXN通过优化数据路径(利用NVLink)、减少跨交换机的流量以及聚合消息,能够有效减少通信开销,从而大幅提升
alltoall
操作的性能,实现了文章标题所说的性能“倍增”效果。
- 根据图3的性能曲线图,与之前的版本(橙线)相比,启用了PXN的NCCL 2.12(蓝线)在所有测试的消息大小下,
A6 结论
NCCL 2.12版本通过引入PXN功能,显著提升了all2all
集合通信的性能。这项新功能优化了GPU与网络之间的数据流,特别是在大规模、多节点的分布式训练环境中,能够有效缓解网络瓶颈,提高通信效率。此外,PXN还增强了模型并行等场景下的灵活性和性能。作者鼓励用户下载并使用最新的NCCL版本,以获得这些性能改进。
💬 评论讨论
欢迎在这里分享您的想法和见解!