温馨提示×

Ubuntu上如何进行PyTorch分布式训练

小樊
54
2025-09-05 01:04:20
栏目: 智能运维

在Ubuntu上进行PyTorch分布式训练,你需要遵循以下步骤:

  1. 安装PyTorch: 首先,确保你已经安装了PyTorch。你可以从PyTorch官网根据你的系统配置选择合适的安装命令。

  2. 设置环境变量: 为了使用多GPU进行训练,你需要设置一些环境变量。例如,如果你有4个GPU,你可以这样设置:

    export CUDA_VISIBLE_DEVICES=0,1,2,3 

    这将限制PyTorch只能看到和使用这四个GPU。

  3. 编写分布式训练代码: PyTorch提供了torch.nn.parallel.DistributedDataParallel类来帮助进行分布式训练。你需要对你的模型和训练循环进行一些修改来使用它。

    下面是一个简单的例子,展示了如何使用DistributedDataParallel

    import torch import torch.nn as nn import torch.optim as optim from torch.nn.parallel import DistributedDataParallel as DDP from torch.utils.data import DataLoader import torchvision.datasets as datasets import torchvision.transforms as transforms # 初始化进程组 world_size = 4 # 假设你有4个GPU rank = ... # 当前进程的rank(从0开始) torch.distributed.init_process_group( backend='nccl', # 'nccl'是用于多GPU训练的推荐后端 init_method='env://', # 使用环境变量来初始化 world_size=world_size, rank=rank ) # 创建模型并移动到对应的GPU model = ... # 你的模型 model.cuda(rank) # 使用DistributedDataParallel包装模型 model = DDP(model, device_ids=[rank]) # 定义损失函数和优化器 criterion = nn.CrossEntropyLoss().cuda(rank) optimizer = optim.SGD(model.parameters(), lr=0.01) # 加载数据集 transform = transforms.Compose([transforms.ToTensor()]) dataset = datasets.MNIST(root='./data', train=True, download=True, transform=transform) sampler = torch.utils.data.distributed.DistributedSampler(dataset, num_replicas=world_size, rank=rank) dataloader = DataLoader(dataset, batch_size=64, sampler=sampler) # 训练循环 for epoch in range(num_epochs): sampler.set_epoch(epoch) # 设置sampler的epoch,确保每个进程加载不同的数据 for data, target in dataloader: data, target = data.cuda(rank), target.cuda(rank) optimizer.zero_grad() output = model(data) loss = criterion(output, target) loss.backward() optimizer.step() print(f'Epoch {epoch+1}, Loss: {loss.item()}') # 清理 torch.distributed.destroy_process_group() 
  4. 运行分布式训练: 使用torch.distributed.launchaccelerate库来启动分布式训练。例如,如果你使用torch.distributed.launch,你的命令可能看起来像这样:

    python -m torch.distributed.launch --nproc_per_node=4 your_training_script.py 

    这里的--nproc_per_node=4指定了每个节点上使用的GPU数量。

  5. 注意事项

    • 确保所有节点都可以通过网络相互通信。
    • 所有节点上的PyTorch版本和CUDA版本必须一致。
    • 分布式训练通常需要更多的调试和测试来确保一切正常工作。

以上步骤提供了一个基本的框架,你可能需要根据你的具体情况进行调整。分布式训练可能会涉及到更复杂的网络配置和性能优化。

0