0. 前言
- 官方链接
- 本文相当于一个目录,总结了分布式相关的tutorials有哪些。
- 主要就是介绍
torch.distributed
包相关内容。
1. 概述
- 在
v1.6.0
中,torch.distributed
包主要可以分为三个方面。 - Distributed Data-Parallel Training(DDP),参考文档
- 数据并行训练。
- 适用于 single-program multiple-data 训练。
- 基本实现思路:每个进程都有一个模型副本,每个模型副本处理不同的输入数据,DDP主要处理的就是不同模型副本的梯度同步问题。
- RPC-Based Distributed Training(RPC),参考文档
- 适用于DDP不能使用的情况,例如 distributed pipeline parallelism, parameter server paradigm 等。
- Collective Communication(c10d),参考文档
- 提供了 collective communication 和P2P communication 两种通信方式。
- DDP使用了前者,RPC使用了后者。
- 一般情况下,开发人员不会直接使用c10d,但也有直接使用的情况,后续文档会介绍。
2. 数据并行
- PyTorch提供了多种数据并行训练方式,从简单到复杂包括了
- 单卡训练。
- 使用
DataParallel
实现单机多卡训练,代码量少。 - 使用
DistributedDataParallel
实现单机多卡训练,代码量多,但性能较好。 - 使用
DistributedDataParallel
和lauching script实现集群训练。 - 使用
torchelastic
实现集群训练。
torch.nn.DataParallel
简介torch.nn.parallel.DistributedDataParallel
简介- DDP文档汇总
- DDP Notes:入门样例
- Getting Started with Distributed Data Parallel:介绍分布式训练中的一些常见问题,
- Single-Machine Model Parallel Best Practices:单机多卡简单实现
- Launching and configuring distributed data parallel applications:介绍laucher script的使用
- PyTorch Distributed Trainer with Amazon AWS:AWS上的使用
- TorchElastic
- 要解决的问题:分布式训练经常会遇到OOM,不可避免,所以需要failure recovery功能。
3. RPC训练方式
-
目标:更一般的分布式训练场景。
-
主要就是
torch.distributed.rpc
的使用(参考文档),该包主要分为四个部分。- RPC:在远程服务器上运行一个函数。
- RRef:管理远程对象的生命周期,相关其他文档
- Distributed Autograd:Autograd的分布式实现,具体可以参考文档
- Distributed Optimizer:优化器的分布式实现。
-
文档汇总:
- Getting Started with Distributed RPC Framework:以简单的RL为例介绍RPC与RRef。
- Implementing a Parameter Server Using Distributed RPC Framework:借鉴了Hogwild! training的思路,实现了异步参数服务器,用于训练。
- Distributed Pipeline Parallelism Using RPC:扩展了单机多卡的解决方案,展示如何使用RPC。
- Implementing Batch RPC Processing Using Asynchronous Executions:介绍如何实现RPC batch processing