Appearance
多节点多卡分布式训练
快速在单机多卡或多机多卡环境中,使用 PyTorch DistributedDataParallel(DDP)训练 ResNet-18 完成 CIFAR-10 分类任务。
测试
准备数据集:拷贝相关数据集到根目录:
bashcd /root cp /datasets/data/cifar-10-python.tar.gz .
获取训练脚本:
bashcp /datasets/data/mnmc_ddp.py .
执行训练:
bashOMP_NUM_THREADS=1 torchrun --nnodes=[填写训练机器数量] \ --nproc_per_node=[填写每台机器的显卡数量] \ --master_addr=[填写管理节点IP(多个机器中的一个机器IP)] \ --master_port=12345 \ --node_rank=[填写当前机器的序号] mnmc_ddp.py
执行训练之前,需要先设定一个管理节点机器的IP,通过
apt update && apt install net-tools -y && ifconfig
查看网卡eth0的IP假设您租用了两台机器(两个实例),机器1有一张显卡,机器2有两张显卡。那么您应该
在机器1执行:
bashOMP_NUM_THREADS=1 torchrun --nnodes=2 --nproc_per_node=1 --master_addr=172.16.218.118 --master_port=12345 --node_rank=0 mnmc_ddp.py
在机器2执行:
bashOMP_NUM_THREADS=1 torchrun --nnodes=2 --nproc_per_node=2 --master_addr=172.16.218.118 --master_port=12345 --node_rank=1 mnmc_ddp.py
说明:
--nproc_per_node=n
表示在本机起 n 个进程,对应 n 张 GPU。- 端口 12345 可任意未占用端口。
- 只有 rank 0 的进程会打印日志。
- 如果是单机多卡,使用
OMP_NUM_THREADS=1 torchrun --nnodes=1 --nproc_per_node=[单机卡数] mnmc_ddp.py
。
常见问题
- NCCL 报错 “unreachable”
• 多机训练检查各节点端口互通:nc -v <master_addr> 12345
• 单机训练确认CUDA_VISIBLE_DEVICES
未误设。 - 显存不足
• 减小 BATCH_SIZE。
• 检查无其他进程占卡:nvidia-smi
。 - 日志刷屏
• 只有 rank 0 打印,属正常设计。 - 下载 CIFAR-10 卡住
• 手动下载 cifar-10-python.tar.gz 放到当前目录即可跳过自动下载。