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节点间划分,并行正向计算,反向参数更新需要将所有节点的局部结果汇总(关键操作: All-reduce)。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拓扑组织通信模式,避免信道竞争拥挤,提高信道利用率,示意图:
参考:
- 如何理解Nvidia英伟达的Multi-GPU多卡通信框架NCCL?
- RingAllreduce和NCCL
- CPU的快速互联通道(QPI)详解
NCCL 和MPI比较
- NCCL提供了MPI很小一部分针对NVIDIA 多GPU卡多节点的数据通信函数子集
- NCCL和MPI可以同时使用(GPU-Aware MPI版本可能会产生死锁)
NCCL资料参考