PyTorch DDP分布式训练部署实践

BadTree +0/-0 0 0 正常 2025-12-24T07:01:19 PyTorch · 分布式训练

PyTorch DDP分布式训练部署实践

在现代机器学习项目中,PyTorch Distributed Data Parallel (DDP)已成为多机多卡训练的标准方案。本文将分享一个完整的部署实践案例。

环境准备

首先确保环境包含:

pip install torch torchvision torchaudio

核心配置代码

import torch
import torch.distributed as dist
import torch.multiprocessing as mp
from torch.nn.parallel import DistributedDataParallel as DDP

def setup(rank, world_size):
    # 初始化分布式环境
    dist.init_process_group("nccl", rank=rank, world_size=world_size)
    torch.cuda.set_device(rank)

def cleanup():
    dist.destroy_process_group()

# 训练函数
def train(rank, world_size):
    setup(rank, world_size)
    
    # 创建模型并移动到GPU
    model = MyModel().to(rank)
    
    # 包装模型
    ddp_model = DDP(model, device_ids=[rank])
    
    # 数据加载器配置
    train_loader = torch.utils.data.DataLoader(
        dataset,
        batch_size=32,
        shuffle=True,
        num_workers=4,
        pin_memory=True
    )
    
    # 优化器配置
    optimizer = torch.optim.Adam(ddp_model.parameters(), lr=0.001)
    
    # 训练循环
    for epoch in range(10):
        for batch in train_loader:
            optimizer.zero_grad()
            output = ddp_model(batch)
            loss = criterion(output, target)
            loss.backward()
            optimizer.step()
    
    cleanup()

启动命令

python -m torch.multiprocessing --nproc_per_node=4 train.py

通过合理配置DDP参数,可显著提升训练效率,建议根据硬件配置调整batch size和学习率。

推广
广告位招租

讨论

0/2000
Quincy600
Quincy600 · 2026-01-08T10:24:58
DDP启动时记得用spawn而不是fork,否则nccl初始化会报错,尤其在macOS上调试时踩过坑。
Julia953
Julia953 · 2026-01-08T10:24:58
模型wrap DDP后,optimizer.step()前一定要加sync_gradients,不然梯度同步有问题,训练loss会炸。
Oscar83
Oscar83 · 2026-01-08T10:24:58
多机训练记得配置好NCCL环境变量,比如NCCL_SOCKET_IFNAME和NCCL_BLOCKING_WAIT,不然通信慢得像单机