PyTorch 分布式训练主要依赖 torch.distributed,常见模式有两种:
model = torch.nn.DataParallel(model)model = torch.nn.parallel.DistributedDataParallel(
model, device_ids=[local_rank]
)| 后端 | 场景 |
|---|---|
nccl | GPU(最常用) |
gloo | CPU / 跨机 |
mpi | HPC |
torch.distributed.init_process_group(backend="nccl")torchrun(推荐)multiprocessingtorchrun \
--nproc_per_node=8 \
train.pytrain.py 关键代码:
import torch
import torch.distributed as dist
dist.init_process_group("nccl")
local_rank = int(os.environ["LOCAL_RANK"])
torch.cuda.set_device(local_rank)
model = model.cuda(local_rank)
model = torch.nn.parallel.DistributedDataParallel(
model, device_ids=[local_rank]
)Node 0
torchrun \
--nnodes=2 \
--node_rank=0 \
--nproc_per_node=8 \
--master_addr=192.168.1.10 \
--master_port=29500 \
train.pyNode 1
torchrun \
--nnodes=2 \
--node_rank=1 \
--nproc_per_node=8 \
--master_addr=192.168.1.10 \
--master_port=29500 \
train.pyDistributedSamplerfrom torch.utils.data.distributed import DistributedSampler
sampler = DistributedSampler(dataset)
loader = DataLoader(dataset, sampler=sampler)shuffle=TrueFROM pytorch/pytorch:2.1.0-cuda11.8-cudnn8-runtime
COPY . /app
WORKDIR /app
CMD ["torchrun", "train.py"]PyTorchJob(Kubeflow)| 场景 | 推荐方案 |
|---|---|
| 本地调试 | 单机多卡 |
| 实验室服务器 | torchrun |
| 云服务器 | Docker + torchrun |
| HPC | Slurm + MPI |
| 大规模训练 | Kubernetes + Kubeflow |
❌ 忘记 set_device
❌ 没用 DistributedSampler
❌ master_port 被占用
❌ 多机网络不通(防火墙)
PyTorch 分布式训练 = DDP + torchrun + DistributedSampler
如果你愿意,可以告诉我:
我可以直接给你一套可复制的部署模板。