详细内容或原文请订阅后点击阅览
多 GPU 中的人工智能:点对点和集体操作
学习适用于多 GPU AI 工作负载的 PyTorch 分布式操作多 GPU 中的人工智能后:点对点和集体操作首先出现在《走向数据科学》上。
来源:走向数据科学是有关跨多个 GPU 的分布式 AI 系列的一部分:
简介
在上一篇文章中,我们建立了主机设备范式并引入了多 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的内存(如果你不明白我的意思,没关系,很快就会清楚的)。
通信:阻塞与非阻塞
这种通信可能是同步(阻塞)或异步(非阻塞)的,我们将在下面探讨。
