多卡加速训练的话,单机多卡比较容易,简单的使用Pytorch自带的DataParallel即可,不过如果想要更多的卡进行训练,不得不需要多机多卡。主要参考这篇文章,在Slurm上成功实现多机多卡,这里主要是整理和记录
Pytorch分布式训练
与单机多卡的区别:
- DataLoader部分需要使用Sampler,保证不同卡处理独立的子集
- 模型部分使用
DistributedDataParallel
主要代码如下,参考了这篇文章中的内容
1 | from torch.utils.data import Dataset, DataLoader |
注意几个参数的设置:
- GPU_NUM: 要使用的GPU总数
- RANK: 进程序号,用于进程通信
LOCAL_RANK: 本地设备序号,用于设备分配
BATCH_SIZE:大小是指单张卡的大小
- IP: 进程节点ip信息
启动多机多卡时,完成torch.distributed.init_process_group()
初始化,接着对DataLoader进行修改,使用DistributedSampler即可,模型部分对应设置即可
Slurm启动脚本
1 | !/bin/bash |