多 GPU 中的人工智能:点对点和集体操作

学习适用于多 GPU AI 工作负载的 PyTorch 分布式操作多 GPU 中的人工智能后:点对点和集体操作首先出现在《走向数据科学》上。

来源:走向数据科学

是有关跨多个 GPU 的分布式 AI 系列的一部分:

  • 第 1 部分:了解主机和设备范例
  • 第 2 部分:点对点和集体操作(本文)
  • 第 3 部分:GPU 如何通信(即将推出)
  • 第 4 部分:梯度累积和分布式数据并行性 (DDP)(即将推出)
  • 第 5 部分:ZeRO(即将推出)
  • 第 6 部分:张量并行性(即将推出)
  • 简介

    在上一篇文章中,我们建立了主机设备范式并引入了多 GPU 工作负载的等级概念。现在,我们将探索 PyTorch 的 torch.distributed 模块提供的特定通信模式,以协调工作并在这些级别之间交换数据。这些操作称为集合,是分布式工作负载的构建块。

    虽然 PyTorch 公开了这些操作,但它最终调用的是实际实现通信的后端框架。对于 NVIDIA GPU,它是 NCCL(NVIDIA Collective Communications Library),而对于 AMD 是 RCCL(ROCm Communication Collectives Library)。

    NCCL 实现针对 NVIDIA GPU 和网络进行优化的多 GPU 和多节点通信原语。它会自动检测当前拓扑(PCIe、NVLink、InfiniBand 等通信通道)并选择最有效的一种。

    免责声明 1:由于 NVIDIA GPU 是最常见的,因此我们将在本文中重点关注 NCCL 后端。

    免责声明 2:为简洁起见,下面提供的代码仅提供每个方法的主要参数,而不是所有可用参数。

    免责声明3:为了简单起见,我们没有展示张量的内存释放,但是像分散这样的操作不会自动释放源Rank的内存(如果你不明白我的意思,没关系,很快就会清楚的)。

    通信:阻塞与非阻塞

    这种通信可能是同步(阻塞)或异步(非阻塞)的,我们将在下面探讨。

    同步(阻塞)通信

    异步(非阻塞)通信

    点对点(一对一)

    集体