NCCL基本介绍

前言

调研一下NCCL,所以在这里记录一下。

参考:

NCCL DOCUMENTATION
NCCL Slide
浅谈GPU通信和PCIe P2P DMA

简介

NCCL是NVIDIA的集合通信库,能实现Collective通信和点对点通信,关注与GPU间的通信,而不是一个并行编程框架。

collective communication

  • AllReduce
  • Broadcast
  • Reduce
  • AllGather
  • ReduceScatter
    此外,因为支持点对点通信,所以也允许scatter(one-to-all)、gather(all-to-one)和all-to-all通信。

支持多种GPU并行

  • 单机多卡
  • 多机多卡
  • 单线程控制多GPU
  • 多线程控制多GPU
  • 多进程控制多GPU

使用C语言的api

可被方便的调用。

底层通信

NCCL基本介绍_第1张图片

  • 单机多卡:通过NVLink、PCIe进行通信。
  • 多机多卡:通过socket也就是以太网或者Infiniband进行通信。
PCIe

NCCL基本介绍_第2张图片
在GPU之间的通信中,有两种:

  • CPU控制的GPU通信:
    NCCL基本介绍_第3张图片
    GPU运算完成后,将数据同步给CPU,由CPU执行MPI通信。都需要通过PCIe。
  • GPU控制的GPU通信:
    NCCL基本介绍_第4张图片
    GPU独立发起通信,并和网络设备进行同步。但是要消耗部分GPU计算资源来完成通信,并且GPU控制通信的效率可能并不高。同样需要经过PCIe。

以上两种情况应该都需要GPU的数据复制到CPU上作为中转。由于PCIe,GPU之间的通信限制到了几十Gb/s

NVLink:

能够提供比PCIe能快的传输速度,可通过桥接器连接两块NVIDIA显卡,实现上百GB/s的传输速度。而NVSwitch可将多个 NVLink 加以整合,实现多NVIDIA显卡互联。
NCCL基本介绍_第5张图片

Infiniband:

是为大规模数据中心设计的网络架构,主要用在高性能计算领域。可以绕过操作系统内核创建应用程序间通信的直接通道,为应用程序提供延迟极低的消息传输服务。带宽高,延时低。带宽已经发展到400Gb/s

GPU Direct

参考:
P2P peer-to-peer on NVIDIA RTX 2080Ti vs GTX 1080Ti GPUs
浅析GPU通信技术

  • P2P:
    是解决一个节点内的GPU通信。
    • 简单来说就是实现GPU之间的相互通信,而不需要GPU的数据复制到CPU host memory上作为中转。
    • 如果将NVLink取代PCIe,其延迟更低,带宽更高。但是只在内存访问或GPU之间的传输。除非是IBM Power才能连接CPU。
      NCCL基本介绍_第6张图片
  • RDMA(Remote Direct Memory Access):
    GPU和网卡可以直接通过PCIe进行数据交互,避免了跨节点通信过程中内存和CPU的参与。从而实现GPU可以直接访问其他节点的GPU内存。
    NCCL基本介绍_第7张图片
    实现既可以通过以太网也可以使用InfiniBand。

你可能感兴趣的:(deep,learning,pytorch,分布式,深度学习,机器学习)