作者: John Bachan
机构: NVIDIA
随着人工智能(AI)工作负载的规模化,快速且可靠的GPU通信变得至关重要,这不仅对训练如此,对规模化推理也日益重要。NVIDIA集合通信库(NCCL)为NVIDIA GPU以及包括PCIe、NVLink、以太网(RoCE)和InfiniBand(IB)在内的多种互连方式提供了高性能、拓扑感知的集合操作,如AllReduce、Broadcast、Reduce、AllGather和ReduceScatter。
本文介绍了最新的 NCCL 2.27 版本,重点展示了其在提升推理延迟、训练弹性和开发者可观测性方面的新特性。核心贡献和创新点如下:
ncclCommWindowRegister),以便开发者注册对称内存,利用低延迟内核。NCCL的核心价值与功能。随着AI工作负载的扩展,快速可靠的GPU通信对于训练和规模化推理都至关重要。NVIDIA集合通信库(NCCL)为NVIDIA GPU和多种互连技术(包括PCIe、NVLink、以太网(RoCE)和InfiniBand(IB))提供了优化的、拓扑感知的集合操作,例如AllReduce、Broadcast、Reduce、AllGather和ReduceScatter。
NCCL的优势。NCCL通过其通信与计算的单内核实现,确保了低延迟同步,使其成为分布式训练和实时推理场景的理想选择。得益于NCCL的动态拓扑检测和简化的基于C的API,开发者可以在不同节点间扩展应用,而无需为特定的硬件配置进行调优。
本文目标。本文旨在介绍最新的NCCL 2.27版本,展示其在提升推理延迟、训练弹性和开发者可观测性方面的新特性。
NCCL 2.27 提供了关键更新,旨在增强跨GPU的集合通信,以应对延迟、带宽效率和扩展性方面的挑战。这些改进同时支持训练和推理,契合了现代AI基础设施不断发展的需求——其中,超低延迟对于实时推理管道至关重要,而强大的容错能力则是保障大规模部署可靠运行的必要条件。该版本的主要亮点包括:带有对称内存的低延迟内核、Direct NIC支持,以及对NVLink和InfiniBand SHARP的支持。
对称内存支持与性能提升。此版本引入了对称内存支持,允许跨GPU上具有相同虚拟地址的缓冲区从优化的集合操作中受益。这些内核显著降低了所有消息大小的延迟,如图1所示,对于小消息大小,延迟最多可降低9倍。
图1. NCCL 2.27中使用低延迟内核带来的AllReduce延迟改进
计算精度与确定性。归约操作使用FP32累加器(在NVLink Switch (NVLS)系统上,FP8使用FP16累加器)进行计算,这提高了诸如AllReduce、AllGather和ReduceScatter等操作的准确性和确定性。
支持范围与性能增益。对称内存支持单个NVLink域内的NVLink通信——在NVIDIA GB200和GB300系统中最高可达NVL72(72个GPU),在NVIDIA DGX和HGX系统中最高可达NVL8(8个GPU)。即使在NVL8域上,开发者也能观察到中小消息尺寸下高达2.5倍的性能提升。
Direct NIC解决带宽瓶颈。NCCL 2.27引入了对Direct NIC配置的支持,旨在为GPU横向扩展通信释放全部网络带宽。在特定的NVIDIA Grace Blackwell平台上,CX8 NIC和NVIDIA Blackwell GPU等组件支持PCIe Gen6 x16,可提供高达800 Gb/s的网络带宽。然而,Grace CPU目前仅支持PCIe Gen5,这将吞吐量限制在400 Gb/s。
Direct NIC架构原理。为了解决这个问题,CX8 NIC暴露了两个虚拟PCIe树:如图2所示,在一个树上,NVIDIA CX8 NIC的数据直接功能(PF)通过PCIe Gen6 x16链路直接连接到GPU PF,从而绕过CPU,避免了带宽瓶颈。在另一个树上,常规的NIC PF连接到CPU的根端口。
图2. Direct NIC架构,GPU与NIC之间通过PCIe Gen6连接,绕过了CPU瓶颈
Direct NIC的优势。这种配置确保了GPUDirect RDMA及相关技术能够达到完整的800 Gb/s带宽,而不会耗尽CPU到GPU的带宽,这在多个GPU共享单个CPU时尤为重要。Direct NIC是为高吞吐量推理和训练工作负载实现全速网络的关键。
扩展SHARP支持至新集合操作。NCCL 2.27增加了对NVLink和IB fabric的SHARP(可扩展分层聚合和归约协议)支持。SHARP允许在网络内部执行归约操作,从而卸载计算密集型任务。这个新版本将SHARP支持引入了AllGather (AG) 和 ReduceScatter (RS) 集合操作,当使用NVLink Sharp加上IB Sharp时,数据可以直接从GPU传输到网络。
对大规模LLM训练的益处。这对于大规模LLM训练尤其有益,因为在这些场景中,AG和RS现在比AllReduce更受青睐,以便更好地重叠计算与通信。传统的基于环的实现可能会消耗16个或更多的SM,但借助NVLink和IB SHARP,这一需求减少到6个SM或更少,从而为模型计算释放了资源,并提升了整体训练效率。其结果是在千卡GPU级别及以上实现了更好的可扩展性和性能。
支持SHARP的集合操作可减少SM使用。
图3. 支持SHARP的集合操作通过将数据聚合卸载到NVLink和InfiniBand网络交换机,减少了SM的使用并提高了可扩展性
引入Communicator Shrink功能。NCCL 2.27引入了Communicator Shrink功能,旨在使分布式训练更加稳健、灵活和高效。在数百或数千个GPU上运行的训练任务容易受到设备故障的影响。Communicator Shrink功能可以在训练期间动态排除发生故障或不再需要的GPU。该功能支持两种操作模式:
NCCL Shrink 的核心能力。NCCL Shrink 使开发者能够:
* 通过动态重建通信器来维持不间断的训练。
* 通过可配置的资源共享,尽可能地重用资源。
* 以最小的中断优雅地处理设备故障。
NCCL Shrink 使用示例。以下是用于计划内重构和错误恢复场景的NCCL Shrink使用示例代码:
计划内重构:
NCCLCHECK(ncclGroupStart());
for (int i = 0; i < nGpus; i++) {
if (i != excludedRank) {
NCCLCHECK(ncclCommShrink(
comm[i], &excludeRank, 1,
&newcomm[i], NULL, NCCL_SHRINK_DEFAULT));
}
}
NCCLCHECK(ncclGroupEnd());
错误恢复:
NCCLCHECK(ncclGroupStart());
for (int i = 0; i < nGpus; i++) {
if (i != excludedRank) {
NCCLCHECK(ncclCommShrink(
comm[i], &excludeRank, 1,
&newcomm[i], NULL, NCCL_SHRINK_ABORT));
}
}
NCCLCHECK(ncclGroupEnd());
此版本为开发者提供的其他功能包括对称内存API和增强的分析功能。
对称内存的基础作用。对称内存是NCCL 2.27中的一项基础能力,它支持高性能、低延迟的集合操作。当内存在所有rank上分配到相同的虚拟地址时,NCCL可以执行优化的内核,从而减少同步开销并提高带宽效率。
窗口API介绍。为了支持这一点,NCCL引入了一个用于集合注册对称内存的窗口API:
ncclCommWindowRegister(ncclComm_t comm, void* buff, size_t size, ncclWindow_t* win, int winFlags);
ncclCommWindowDeregister(ncclComm_t comm, ncclWindow_t win);
ncclCommWindowRegister函数将用户分配的内存注册到NCCL通信器。内存必须使用CUDA虚拟内存管理(VMM)API进行分配。winFlags必须包含NCCL_WIN_COLL_SYMMETRIC以启用对称内核优化。所有rank必须提供具有匹配偏移量的缓冲区,以确保对称寻址。取消注册(ncclCommWindowDeregister)是一个本地操作,并且只应在所有相关集合操作完成后进行。
API使用注意事项。ncclCommWindowRegister是集合式和阻塞式的,这意味着当单个线程管理多个GPU时,这些调用必须被包含在ncclGroupStart和ncclGroupEnd之内。如果不需要对称内存,用户可以通过设置NCCL_WIN_ENABLE=0来完全禁用该功能。
对称内存注册流程。图4展示了如何使用NCCL窗口API跨多个GPU注册对称内存。通过对齐虚拟地址,NCCL启用了优化的低延迟内核,从而提高了集合操作的性能。
图4. NCCL中跨GPU的对称内存注册
NCCL 2.27对其分析基础设施进行了一系列增强,为开发者和工具提供了更准确、更高效的性能监测手段,以诊断通信性能。
代理事件的统一。之前,NCCL暴露了ncclProfileProxyOp和ncclProfileProxyStep两个事件来跟踪网络代理线程的进度。虽然这些事件提供了不同粒度的信息,但它们也造成了许多监测点的重复。在2.27版本中,NCCL通过移除冗余的ProxyOp状态并引入一个统一的ncclProfilerProxyOpInProgress_v4状态,简化并优化了这一模型。这在不牺牲细节的情况下减少了分析器的开销,并提高了跟踪通信进度时的清晰度。此外,还引入了一个新的ProxyStep事件状态ncclProfilerProxyStepPeerWait_v4,用于反映发送方rank等待接收方发布发送许可信号的时间,整合了以前的功能,同时最大限度地减少了重复。
GPU内核事件的准确性。为了提高计时精度,NCCL现在支持原生GPU时间戳传播。GPU现在使用其内部的全局计时器记录并导出开始和停止时间戳,而不是依赖于通过GPU工作计数器进行的主机端事件计时——这种方法容易受到延迟伪影(例如,内核延迟或合并)的影响。这使得分析工具能够直接从GPU获取精确的内核运行时长,不过开发者在将时间戳转换为主机时间时需要进行校准或插值。
网络插件事件更新。NCCL分析器接口现在支持对网络定义的事件使用recordEventState。这一新机制允许分析器更新正在进行的操作的状态,这对于将实时的网络反馈(如重传信号或拥塞提示)注入性能时间线非常有用。
其他增强功能。
* 分析器初始化:NCCL现在在分析器初始化期间报告通信器元数据,包括名称、ID、节点数、rank数和调试级别。
* 通道报告:报告的通道数量反映的是实际使用情况,而不是理论上的限制。这包括点对点(P2P)操作。
* 通信器标记:ncclConfig_t已扩展,可包含通信器名称,从而改善了被分析操作与特定通信器之间的关联性。
这些更新共同提升了NCCL分析器插件接口的保真度,为开发者提供了对网络动态、GPU计时和操作结构的更深入洞察,这些对于诊断和调优大规模AI工作负载至关重要。
前瞻性支持包括:
* 跨数据中心通信:提供初步支持,允许跨地理分布的数据中心执行集合操作。
* 多NIC插件可见性:支持同时利用多种网络配置。
本文主要介绍NCCL 2.27的功能,未提供完整的基准测试实验设置,但提及了相关的软硬件配置:
硬件配置:
软件配置:
本文通过图表展示了NCCL 2.27几个关键特性的性能优势:
低延迟内核性能:
Direct NIC架构优势:
SHARP卸载效果:
NCCL 2.27版本通过引入多项关键功能,显著提升了分布式推理和训练工作流的性能、弹性和可观测性。其核心优势包括通过对称内存实现的更低延迟、通过Direct NIC支持实现的更高带宽、通过SHARP卸载实现的更高训练效率,以及通过Communicator Shrink实现的更强容错能力。此外,增强的分析工具为开发者提供了深入洞察通信性能的强大手段。
未来工作展望包括对跨数据中心通信的初步支持和对多NIC插件的可见性,这将进一步扩展NCCL在更复杂和地理上分散的环境中的应用能力。开发者可以访问NVIDIA/nccl GitHub仓库获取详细文档、源代码和支持,以开始使用NCCL 2.27的这些新功能。