PyTorch 分布式概述¶
创建日期:2020年7月28日 | 最后更新日期:2024年10月8日 | 最后验证日期:2024年11月5日
作者: Will Constable
注意
查看和编辑此教程在 github。
这是torch.distributed包的概览页面。本页面的目标是将文档分类到不同的主题中,并简要描述每个主题。如果您是第一次使用PyTorch构建分布式训练应用,建议使用此文档导航到最适合您用例的技术。
介绍¶
PyTorch 分布式库包括一组并行模块、通信层以及用于启动和调试大规模训练任务的基础设施。
分片基础操作¶
DTensor 和 DeviceMesh 是用于在N维进程组上构建并行性的分片或复制张量的基本元素。
DTensor 表示一个被分片和/或复制的张量,并在操作需要时自动通信以重新分片张量。
DeviceMesh 将加速器设备通信器抽象为一个多维数组,它管理底层
ProcessGroup实例,用于多维并行中的集体通信。尝试我们的 Device Mesh Recipe 以了解更多。
通信APIs¶
- The PyTorch distributed communication layer (C10D) offers both collective communication APIs (e.g., all_reduce
and all_gather) and P2P communication APIs (e.g., send and isend), which are used under the hood in all of the parallelism implementations. 使用PyTorch编写分布式应用 shows examples of using c10d communication APIs.
将并行化应用于扩展您的模型¶
数据并行是一种广泛采用的单程序多数据训练范式,其中模型在每个进程中被复制,每个模型副本对不同的输入数据样本计算局部梯度,在每个优化器步骤之前,梯度会在数据并行通信器组内进行平均。
当模型无法放入 GPU 时,需要使用模型并行技术(或称为分片数据并行),并且可以将这些技术组合起来形成多维(N-D)并行技术。
在决定为你的模型选择哪些并行化技术时,请遵循以下常见指南:
使用 分布式数据并行 (DDP),如果你的模型适合单个GPU,但你想通过多个GPU轻松扩展训练。
使用 torchrun,如果你使用多个节点,请启动多个PyTorch进程。
另请参阅:使用分布式数据并行入门
使用 FullyShardedDataParallel (FSDP) 当你的模型无法在一个GPU上运行。
另请参阅:开始使用FSDP
使用 张量并行 (TP) 和/或 流水线并行 (PP),如果您在使用FSDP时遇到扩展限制。
尝试我们的 张量并行教程
注意
数据并行训练也适用于 自动混合精度(AMP)。