在Ubuntu上搭建PyTorch分布式训练环境需要以下几个步骤:
确保你已经安装了Python 3和pip。你可以使用以下命令来安装:
sudo apt update
sudo apt install python3 python3-pip
如果你有NVIDIA GPU并打算使用GPU进行训练,你需要安装CUDA和cuDNN。
安装CUDA Toolkit:
安装cuDNN:
使用pip安装PyTorch,确保选择与你的CUDA版本兼容的PyTorch版本。例如:
pip3 install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu113
为了在多台机器上进行分布式训练,你需要配置SSH无密码登录。
生成SSH密钥:
ssh-keygen -t rsa
将公钥复制到其他机器:
ssh-copy-id user@remote_host
确保所有机器上的环境变量一致,特别是CUDA和cuDNN的路径。
export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
使用PyTorch的torch.distributed模块编写分布式训练脚本。以下是一个简单的示例:
import torch
import torch.nn as nn
import torch.optim as optim
from torch.nn.parallel import DistributedDataParallel as DDP
import torch.distributed as dist
import os
def main(rank, world_size):
# 初始化分布式环境
dist.init_process_group(backend='nccl', init_method='env://', world_size=world_size, rank=rank)
# 创建模型并将其移动到GPU
model = nn.Linear(10, 10).to(rank)
ddp_model = DDP(model, device_ids=[rank])
# 创建损失函数和优化器
criterion = nn.MSELoss()
optimizer = optim.SGD(ddp_model.parameters(), lr=0.01)
# 模拟数据
inputs = torch.randn(20, 10).to(rank)
targets = torch.randn(20, 10).to(rank)
# 训练循环
for epoch in range(10):
optimizer.zero_grad()
outputs = ddp_model(inputs)
loss = criterion(outputs, targets)
loss.backward()
optimizer.step()
print(f'Rank {rank}, Epoch {epoch}, Loss {loss.item()}')
# 清理分布式环境
dist.destroy_process_group()
if __name__ == '__main__':
world_size = 4 # 总共的进程数
torch.multiprocessing.spawn(main, args=(world_size,), nprocs=world_size, join=True)
使用mpirun或torch.distributed.launch来运行分布式训练脚本。
mpirunmpirun -np 4 python3 your_script.py
torch.distributed.launchpython3 -m torch.distributed.launch --nproc_per_node=4 your_script.py
确保所有进程都能正常运行并输出结果。你可以通过检查日志或输出来验证分布式训练是否成功。
通过以上步骤,你应该能够在Ubuntu上成功搭建PyTorch分布式训练环境。