NCCL通信函数库相关资料整理

发布时间:2026/7/21 15:57:13
NCCL通信函数库相关资料整理 文章目录NCCL介绍硬件互联基础PCIe SwitchGPU Peer-to-Peer示意图GPUDirect RDMA示意图CPU-GPU,GPU-GPU之间互联的架构细节(包括PCIe 和NVLink)NVLinkNVSwitchNCCL软件功能NCCL主要通信函数和内部核心算法NCCL 和MPI比较NCCL资料参考NCCL内部想参考NCCL库开发一套针对性的函数库。通过官方文档、源码、网上博客整理了一些有关资料。图片都来源于网络比较直观的介绍了NVIDIA GPU互联互通的底层硬件架构和基于硬件链接开发的优化通信库NCCL介绍NCCL是Nvidia Collective multi-GPU Communication Library的简称它是一个实现多GPU的collective communication通信all-gather, reduce, broadcast库Nvidia做了很多优化可以在PCIe、Nvlink、InfiniBand上实现较高的通信速度。其中NCCL 1.x版本提供单节点内多GPU卡之间的高效数据通信NCCL 2.x 在 NCCL 1.x的基础上增加了对多节点通信支持。硬件互联基础介绍一下CPU和GPU卡GPU卡之间的互联技术。NCCL只有借助底层的通信部件才能有针对性的实现高效的特定数据通信功能函数PCIe SwitchCPU和两个GPU卡都挂在PCIe Switch上两个CPU每个CPU和4张GPU卡挂在一个PCIe Switch上CPU和CPU之间有高速链接通道本计算节点通过IB卡和其他节点通信在硬件支持下可以实现 GPU Peer-To-Peer通信GPUDirect RDMA节点间通信GPU Peer-to-Peer示意图GPUDirect RDMA示意图CPU-GPU,GPU-GPU之间互联的架构细节(包括PCIe 和NVLink)连接到CPU的单一GPU通过PCIe总线连接的双GPU通过NVLink技术连接的双GPUNVLinkNVLink是GPU卡之间的高速互连技术(相当于GPU上的网卡角色)与传统的 PCIe 系统解决方案相比能为多 GPU 系统提供更快速的替代方案。NVLink 技术通过连接两块 NVIDIA 显卡能够实现显存和性能扩展从而满足最大视觉计算工作负载的需求。目前已知的NVLink分两种一种是桥接器的形式实现NVLink高速互联技术另一种是在主板上集成了NVLink接口。2016年P100上搭载第一款NVLink产品(NVLink 1.0), 最新产品是A100上的NVLink3.0,总带宽为每秒600G/s差不多是PCIe Gen 4带宽的10倍。V100上的NVLink总计6个Ports下图是8张V100通过NVLink实现多对多链接NVLink的性能指标数据NVSwitchNVSwitch 将多个 NVLink 加以整合在单个节点内以 NVLink 的较高速度实现多对多的 GPU 通信从而进一步提高互联性能(多GPU卡之间交换机角色)。NVLink 和 NVSwitch 的结合使性能扩展到多个 GPU。NVSwitch 1.0是首款节点交换架构可在单个服务器节点中支持 8 到 16 个全互联的 GPU。第二代NVSwitch 2.0 可助力NVLink以 600 GB/s 的速度在所有 GPU 对之间同时进行通信。该技术借助直接 GPU 对等内存寻址支持完整的多对多通信。这 16 个 GPU 还可用作单个高性能加速器拥有统一内存空间和10 petaFLOPS 的深度学习计算性能。2个NVSwitch 1.0连接16个V100实现0跳互联2个NVSwitch 2.0连接16个A100实现0跳互联NCCL软件功能NCCL主要是为深度学习神经网络在多Nvidia GPU卡多机上的并行训练优化而设计。神经网络并行训练一般采用数据并行的方式: 模型参数数据在所有节点复制训练输入数据在多个GPU节点间划分并行正向计算反向参数更新需要将所有节点的局部结果汇总(关键操作: Allreduce, 数据量是模型的整个参数很大)。NCCL计算节点间通信功能基本等同于MPI提供的功能内部算法采用了Ring拓扑方式进行了优化。深度学习神经网络分布式数据并行示意图参考: 深度学习分布式策略优化、显存优化、通信优化、编译优化综述NCCL主要通信函数和内部核心算法Collective通信函数: Reduce, Allreduce, ReduceScatter, Allgather, BroadcastPoint-to-Point通信函数: Send,Recv基于Ring拓扑的优化算法: Allreduce。Allreduce示意图从多个sender那里接收数据最终规约到每一个节点上NCCL采用Ring拓扑实现Allreduce操作避免了多次通过CPU系统内存进行数据移动同时利用GPU间P2P功能合理利用Ring拓扑组织通信模式避免信道竞争拥挤提高信道利用率,示意图信道是全双工的只要保证同一时刻一个方向上只有一个数据包就可避免拥堵在GPU集群环境,参与计算的GPU会非常多,采用Ring算法进行Allreduce会导致非常长的流水线(导致抽干流水线延时显著变长,延时正比于卡数O(N))此时会采用TreeRing结合算法分治进行Allreduce(分组组内用Ring算法,组间用Tree算法, Tree保证算法延时正比于O(Log(N))Allreduce硬件加速(近网计算,In-Network Computing)。利用 NVIDIA/Mellanox 的 SHARP (Scalable Hierarchical Aggregation and Reduction Protocol) 技术交换机硬件直接在转发数据包时完成求和操作参考如何理解Nvidia英伟达的Multi-GPU多卡通信框架NCCLRingAllreduce和NCCLCPU的快速互联通道(QPI)详解All-Reduce and Ring-Reduce for Model Synchronization in Multi-GPU TrainingMPI ring allreduceNCCL 和MPI比较NCCL提供了MPI很小一部分针对NVIDIA 多GPU卡多节点的数据通信函数子集NCCL和MPI可以同时使用(GPU-Aware MPI版本可能会产生死锁)NCCL资料参考源码文档用例