[ PROMPT_NODE_22324 ]
Distributed Training Pytorch FSDP 其他
[ SKILL_DOCUMENTATION ]
# Pytorch-Fsdp - 其他
**页面数:** 15
---
## 分布式数据并行 (Distributed Data Parallel)#
**URL:** https://pytorch.org/docs/stable/notes/ddp.html
**内容:**
- 分布式数据并行#
- 示例#
- 内部设计#
- 实现#
- ProcessGroup#
- DistributedDataParallel#
- TorchDynamo DDPOptimizer#
创建日期: 2020年1月15日 | 最后更新日期: 2024年1月25日
torch.nn.parallel.DistributedDataParallel 的实现随时间不断演进。本设计说明基于 v1.4 版本编写。
torch.nn.parallel.DistributedDataParallel (DDP) 透明地执行分布式数据并行训练。本页介绍了其工作原理并揭示了实现细节。
让我们从一个简单的 torch.nn.parallel.DistributedDataParallel 示例开始。该示例使用 torch.nn.Linear 作为本地模型,用 DDP 对其进行包装,然后在 DDP 模型上运行一次前向传播、一次反向传播和一个优化器步骤。在此之后,本地模型上的参数将被更新,不同进程上的所有模型应该完全相同。
DDP 可与 TorchDynamo 配合使用。当与 TorchDynamo 一起使用时,在编译模型之前应用 DDP 模型包装器,以便 TorchDynamo 可以基于 DDP 桶(bucket)大小应用 DDPOptimizer(图中断优化)。(有关更多信息,请参阅 TorchDynamo DDPOptimizer。)
本节通过深入研究每次迭代中每个步骤的细节,揭示了 torch.nn.parallel.DistributedDataParallel 的底层工作原理。
前提条件:DDP 依赖 c10d ProcessGroup 进行通信。因此,应用程序必须在构建 DDP 之前创建 ProcessGroup 实例。
构建:DDP 构造函数获取对本地模块的引用,并将 state_dict() 从 rank 为 0 的进程广播到组中的所有其他进程,以确保所有模型副本从完全相同的状态开始。然后,每个 DDP 进程创建一个本地 Reducer,它稍后将在反向传播期间负责梯度同步。为了提高通信效率,Reducer 将参数梯度组织成桶,并一次减少一个桶。桶大小可以通过在 DDP 构造函数中设置 bucket_cap_mb 参数来配置。从参数梯度到桶的映射是在构建时确定的,基于桶大小限制和参数大小。模型参数大致按照给定模型 Model.parameters() 的反向顺序分配到桶中。使用反向顺序的原因是