NCCL

NCCL #

NCCL 在网络模型训练框架中位于深度学习框架(如 Torch、TF、PP 等),和 CUDA 框架之间。同级并列的还有深度学习库 CUDNN、线性代数库 CUBLAS。

Nvidia Collective multi-GPU Communication Library

是一个实现多 GPU 的 collective communication 通信(all-gather, reduce, broadcast)库,Nvidia 做了很多优化,以在 PCIe、Nvlink、InfiniBand 上实现较高的通信速度。

  • PCIe 适用于标准 GPU 连接和一般数据传输
  • NVLink 主要用于连接高性能计算(HPC)和深度学习应用中的 GPU,可以显著提高多 GPU 系统的数据传输和处理能力
    • NVLink 可以提供每秒几百 GB 的带宽,显著高于 PCIe
  • GPU Direct P2P 是一种允许 NVIDIA GPU 直接通过 PCIe 或 NVLink 互相通信的技术,无需 CPU 介入
  • InfiniBand 连接不同计算机或服务器的一种网络技术

Communication Primitive #

并行任务的通信一般可以分为

  • Point-to-point Communication
    • P2P 通信这种模式只有一个 sender 和一个 receiver,实现起来比较简单
  • Collective Communication
    • Collective Communication 包含多个 sender 多个 receiver
    • 一般的通信原语包括 broadcast, gather, all-gather, scatter, reduce, all-reduce, reduce-scatter, all-to-all 等

ring-based Collective communication #

  • 传统 Collective communication 假设通信节点组成的 topology 是一颗 fat tree,这样通信效率最高

    • 但实际的通信 topology 可能比较复杂,并不是一个 fat tree
  • 因此一般用 ring-based Collective communication

    • ring-based Collective communication 将所有的通信节点通过首尾连接形成一个单向环,数据在环上依次传输
    • 把要传输的数据分成 S 份,每次只传 N/S 的数据量,GPU1 接收到 GPU0 的一份数据后,也接着传到环的下个节点
    • 时间为 S*(N/S/B) + (k-2)*(N/S/B) = N(S+K-2)/(SB) –> N/B,条件是 S 远大于 K,即数据的份数大于节点数,这个很容易满足
    • 所以通信时间不随节点数的增加而增加,只和数据总量以及带宽有关
  • 构建通信环的方式:

    • 单机 4 卡

    • 单机 8 卡


NCCL 实现 #

NCCL 实现成 CUDA C++ kernels,包含 3 种 primitive operations:

  • Copy
  • Reduce
  • ReduceAndCopy

  • NCCL 1.0 版本只支持单机多卡,卡之间通过 PCIe、NVlink、GPU Direct P2P 来通信。
  • NCCL 2.0 会支持多机多卡,多机间通过 Sockets (Ethernet)或者 InfiniBand with GPU Direct RDMA 通信

参考:


本文访问量

本站总访问量

本站总访客数