PyTorch 的分布式训练提交方式说明

性能表现:

使用 resnet50+imagenet 数据集,分别使用 pyorch-horovod-mpi 和 pytorch-DDP 方式进行训练,结果如下:

Pytorch-DDP 训练方式总结 :

训练任务方式(参考脚本)目前只支持脚本提交,如果命令行方式,使用开发环境或者 MPI 方式进行提交训练任务

1. 单机单卡和多卡时直接使用单机模式进行提交训练任务


训练输出

2. 多机多卡使用 master-work 方式提交训练任务

如果平台支持命令模式(AIStation V3.4 以上版本)

a) 发起任务,使用命令行方式提交,命令内容为:

其中–nproc_per_node=2 需要指定为单 pod 内加速卡个数 nnodes 为总节点数,nproc_per_node 为每个节点上要使用的 GPU 数,master_addr 为 master 的 IP 地址(可以从容器实例中查到各个 pod 的 IP,然后自行指定 master 节点),master_port 为 master 的端口号(使用时请确保没有被占用)/inspur/pytorch_imagenet_benchmark_ddp_ori_dev.py 为训练脚本,其他无需更改

如果平台仅支持 py 脚本模式(AIStation V3.2 以前版本)

a) 则创建一个 py 脚本,如 ddp.py,内容如下:


其中–nproc_per_node=2 为单 pod 内加速卡个数 /inspur/pytorch_imagenet_benchmark_ddp_ori_dev.py 为训练脚本,其他无需更改

b) 发起任务,使用脚本模式

训练输出:

开发环境:

1 单机多卡方式:

创建时配置单 pod 使用多个 GPU,进入开发环境后,正常启动训练任务

2 多机多卡方式:

方式一:创建多副本的开发环境,如下图

启动训练任务时,采用 pytorch 的 distributed launch 方式

( 详情参见 https://github.com/pytorch/pytorch/blob/master/torch/distributed/launch.py ) ,即

其中 nnodes 为总节点数,nproc_per_node 为每个节点上要使用的 GPU 数,master_addr 为 master 的 IP 地址(可以从容器实例中查到各个 pod 的 IP,然后自行指定master 节点);master_port 为 master 的端口号(使用时请确保没有被占用)在 pytorch1.9及以上版本是,rdzv_endpoint 中 8888 为 elastic 特性使用端口,确保没有被占用,或修改为其他未使用端口;rdzv_id 为 elastic 特性标识符,调试时可修改为其他值,以避免任务间互相干扰。
示例(以 pytorch 1.8 为例,1.9 及以上版本加入 rdzv、相关参数即可):
# 当有 3 个节点(每个上面 2 个 GPU)进行 6 个 GPU 的分布式时,即 nnodes=3, nproc_per_node=2,在第一个 pod(即 master node)里面, 输入
python -m torch.distributed.launch --nnodes=3 --nproc_per_node=2 --node_rank=0 --master_addr=192.233.68.124 --master_port=33333 --ues_env pytorch_imagenet_benchmark_ddp_ori.py 

# 然后依次进入另外的几个 pod 中,输入
python -m torch.distributed.launch --nnodes=3 --nproc_per_node=2 --node_rank=1 --master_addr=192.233.68.124 --master_port=33333 --ues_envpytorch_imagenet_benchmark_ddp_ori.py 

python -m torch.distributed.launch --nnodes=3 --nproc_per_node=2 --node_rank=2 --master_addr=192.233.68.124 --master_port=33333 --ues_env pytorch_imagenet_benchmark_ddp_ori.py
然后即可以进行分布式训练

作者:admin  创建时间:2023-03-21 14:43
最后编辑:admin  更新时间:2024-04-28 09:41