Shortcuts

PyTorch 分布式概览

Created On: Jul 28, 2020 | Last Updated: Oct 08, 2024 | Last Verified: Nov 05, 2024

作者: Will Constable

备注

编辑github 上查看并编辑本教程。

这是 torch.distributed 包的概览页面。此页面的目标是将文档分类为不同主题并简要描述每个主题。如果这是你第一次使用 PyTorch 创建分布式训练应用程序,建议你使用本文档来导航到最适合的技术。

介绍

PyTorch 分布式库包括并行模块集合、通信层以及用于启动和调试大型训练任务的基础设施。

并行性 API

这些并行模块提供高级功能,并与现有模型相互配合:

分片原语

DTensorDeviceMesh 是用于在N维进程组上构建分片或复制张量的并行性原语。

  • DTensor 表示一个被分片和/或复制的张量,并根据操作的需要自动通信以重新分片张量。

  • DeviceMesh 将加速器设备通信抽象为一个多维数组,它管理多维并行中用于集合通信的基础 ProcessGroup 实例。尝试我们的 设备网格配方 以了解更多信息。

通信 API

PyTorch 分布式通信层 (C10D) 提供集合通信 API(例如 all_reduce

all_gather)以及点对点通信 API(例如 sendisend),它们在所有并行实现中被底层使用。使用 PyTorch 编写分布式应用程序 显示了使用 c10d 通信 API 的示例。

启动器

torchrun 是一个广泛使用的启动脚本,可在本地和远程机器上生成进程以运行分布式 PyTorch 程序。

将并行性应用于扩展模型

数据并行是一种广泛采用的单程序多数据训练范式,其中模型在每个进程上复制,每个模型副本为一组不同的输入数据样本计算本地梯度,在每次优化器步骤前,梯度在数据并行通信组中进行平均。

当模型无法适应 GPU 时,需要使用模型并行技术(或分片数据并行),并可以结合起来形成多维(N-D)并行技术。

在选择模型的并行技术时,可遵循以下常见准则:

  1. 如果模型适合单个 GPU,但你想轻松通过多个 GPU 扩展训练,请使用 分布式数据并行 (DDP)

  2. 当模型无法适应单个 GPU 时,请使用 完全分片数据并行 (FSDP)

  3. 如果达到 FSDP 的扩展限制,请使用 张量并行 (TP) 和/或 管道并行 (PP)

备注

数据并行训练也支持 自动混合精度 (AMP)

PyTorch 分布式开发者

如果你想对 PyTorch 分布式进行贡献,请参考我们的 开发者指南

文档

访问 PyTorch 的详细开发者文档

查看文档

教程

获取针对初学者和高级开发人员的深入教程

查看教程

资源

查找开发资源并获得问题的解答

查看资源