https://pytorch.org/docs/stable/elastic/run.html
torchrun
提供了作为 torch.distributed.launch
的功能的超集,并具有以下附加功能:
- Worker failures are handled gracefully by restarting all workers.
通过重新启动所有工作进程来优雅地处理工作进程故障。 - Worker
RANK
andWORLD_SIZE
are assigned automatically.
工作器RANK
和WORLD_SIZE
自动分配。 - Number of nodes is allowed to change between minimum and maximum sizes (elasticity).
允许节点数量在最小和最大大小之间变化(弹性)。
torchrun
是setup.py中 entry_points
配置中声明的主模块torch.distributed.run的Python控制台脚本。它相当于调用 python -m torch.distributed.run
。
torchrun启动单机多卡DDP并行训练:
启动方式:
- 使用 torchrun 命令来启动程序
- torchrun –standalone –nproc_per_node=gpu XXX.py
--standalone
代表单机运行--nproc_per_node=gpu
代表使用所有可用GPU。等于号后也可写gpu数量n,这样会使用前n个GPU
如果想要进一步指定要运行的 GPU,可以通过 CUDA_VISIBLE_DEVICES 设置GPU可见性,比如:
CUDA_VISIBLE_DEVICES=2,3 torchrun –standalone –nproc_per_node=gpu multi_gpu_torchrun.py
多机多卡
torchrun –nproc_per_node=4 –nnodes=3 –node_rank=0 –master_addr=192.168.0.101 –master_port=29500 test_mpi.py
1.指定每个节点(机器)上的进程数,这里是4个。意味着每个机器将启动4个进程来参与分布式训练。 –nproc_per_node=4 【一般设置为为节点GPU数量】
2.指定总共的节点数,这里是3个。意味着总共有3个机器参与分布式训练。
--nnodes=3
3.指定当前节点(机器)的排名,这里是0。排名从0开始,用于在分布式环境中区分不同的节点。
--node_rank=0 【0代表主节点】
4.指定主节点的IP地址,这里是192.168.0.101(更根据实际修改)。主节点用于协调分布式训练过程。
--master_addr=192.168.0.101
5.指定主节点的端口号,这里是29500。主节点使用指定的端口来与其他节点进行通信。
–master_port=29500
6.单机运行
--standalone