如何开启分布式 | cabbage

cabbage

菜鸟写给小白的教程

0%

如何开启分布式

一个卡跑的好慢,看着剩下的7张3090陷入沉思,计算力就是财富,对于一个刚入门的小白,又该如何利用分布式来加速你的训练呢?
本教程使用DDP框架
想使用其他框架比如DP,multiprossing之类的可以去其他地方找资料

介绍

为什么使用分布式训练

第一种是模型在一块GPU上放不下,两块或多块GPU上就能运行完整的模型(如早期的AlexNet)

第二种是多块GPU并行计算可以达到加速训练的效果

不同方式

nn.DataParallel单进程控制多 GPU

torch.distributed 加速并行训练

使用 torch.multiprocessing 取代启动器

使用 apex 再加速

  • DataParallel是单进程多线程的,仅仅能工作在单机中。而DistributedDataParallel是多进程的,可以工作在单机或多机器中。
  • DataParallel通常会慢于DistributedDataParallel。所以目前主流的方法是DistributedDataParallel。

ddp使用方法

启动

pytorch 为我们提供了 torch.distributed.launch 启动器,用于在命令行分布式地执行 python 文件。

虽然现在建议用run。但是好多论文sota都用的launch,也不是不能用

1
CUDA_VISIBLE_DEVICES=0,1,2 python -m torch.distributed.launch --nproc_per_node=3 main.py

手动使用 torch.multiprocessing 进行多进程控制。绕开 torch.distributed.launch 自动控制开启和退出进程的一些小毛病

流程

启动器会将当前进程的index 参数传递给程序

使用 init_process_group 设置GPU 之间通信使用的后端和端口

包装数据集

包装模型

1
optimizer