NCCL通信函数库相关资料整理
2026/7/21 15:56:59 网站建设 项目流程

文章目录

  • NCCL
    • 介绍
    • 硬件互联基础
        • PCIe Switch
          • GPU Peer-to-Peer示意图
        • GPUDirect RDMA示意图
        • CPU-GPU,GPU-GPU之间互联的架构细节(包括PCIe 和NVLink)
        • NVLink
        • NVSwitch
    • NCCL软件功能
        • 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 Switch

CPU和两个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技术连接的双GPU

NVLink

NVLink是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的性能指标数据

NVSwitch

NVSwitch 将多个 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, Broadcast
  • Point-to-Point通信函数: Send,Recv

基于Ring拓扑的优化算法: Allreduce。Allreduce示意图:从多个sender那里接收数据,最终规约到每一个节点上:

NCCL采用Ring拓扑实现Allreduce操作,避免了多次通过CPU系统内存进行数据移动,同时利用GPU间P2P功能,合理利用Ring拓扑组织通信模式,避免信道竞争拥挤,提高信道利用率,示意图:

信道是全双工的,只要保证同一时刻一个方向上只有一个数据包,就可避免拥堵

在GPU集群环境,参与计算的GPU会非常多,采用Ring算法进行Allreduce会导致非常长的流水线(导致抽干流水线延时显著变长,延时正比于卡数O(N)),此时会采用Tree+Ring结合算法分治进行Allreduce(分组,组内用Ring算法,组间用Tree算法, Tree保证算法延时正比于O(Log(N))

Allreduce硬件加速(近网计算,In-Network Computing)。利用 NVIDIA/Mellanox 的 SHARP (Scalable Hierarchical Aggregation and Reduction Protocol) 技术,交换机硬件直接在转发数据包时完成求和操作
参考:

  • 如何理解Nvidia英伟达的Multi-GPU多卡通信框架NCCL?
  • RingAllreduce和NCCL
  • CPU的快速互联通道(QPI)详解
  • All-Reduce and Ring-Reduce for Model Synchronization in Multi-GPU Training
  • MPI ring allreduce
NCCL 和MPI比较
  • NCCL提供了MPI很小一部分针对NVIDIA 多GPU卡多节点的数据通信函数子集
  • NCCL和MPI可以同时使用(GPU-Aware MPI版本可能会产生死锁)
NCCL资料参考
  • 源码
  • 文档
  • 用例

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询