溫馨提示×

Ubuntu PyTorch分布式訓練怎么做

小樊
35
2025-06-27 18:37:30
欄目: 智能運維

在Ubuntu上使用PyTorch進行分布式訓練通常涉及以下幾個步驟:

1. 安裝PyTorch

首先,確保你已經安裝了PyTorch。你可以從PyTorch官網獲取適合你系統的安裝命令。

pip install torch torchvision torchaudio

2. 設置環境變量

為了使用多GPU訓練,你需要設置一些環境變量。例如:

export NCCL_DEBUGINFO=INFO
export NCCL_SOCKET_IFNAME=docker0,lo  # 根據實際情況修改

3. 編寫分布式訓練腳本

創建一個名為 distributed_train.py 的腳本,內容如下:

import torch
import torch.nn as nn
import torch.optim as optim
from torch.nn.parallel import DistributedDataParallel as DDP
import torchvision.datasets as datasets
import torchvision.transforms as transforms

# 初始化進程組
world_size = 4  # 假設使用4個GPU
rank = 0  # 當前進程的排名
torch.distributed.init_process_group(backend='nccl', init_method='env://', world_size=world_size, rank=rank)

# 定義模型
model = nn.Sequential(
    nn.Linear(784, 128),
    nn.ReLU(),
    nn.Linear(128, 10),
)
model.cuda(rank)  # 將模型放到對應的GPU上
model = DDP(model, device_ids=[rank])  # 使用DistributedDataParallel包裝模型

# 定義損失函數和優化器
criterion = nn.CrossEntropyLoss().cuda(rank)
optimizer = optim.SGD(model.parameters(), lr=0.01)

# 加載數據集
transform = transforms.Compose([transforms.ToTensor()])
train_dataset = datasets.MNIST(root='./data', train=True, download=True, transform=transform)
train_sampler = torch.utils.data.distributed.DistributedSampler(train_dataset, num_replicas=world_size, rank=rank)
train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=64, sampler=train_sampler)

# 訓練模型
for epoch in range(5):
    train_sampler.set_epoch(epoch)
    running_loss = 0.0
    for i, data in enumerate(train_loader, 0):
        inputs, labels = data[0].cuda(rank), data[1].cuda(rank)
        optimizer.zero_grad()
        outputs = model(inputs.view(-1, 784))
        loss = criterion(outputs, labels)
        loss.backward()
        optimizer.step()
        running_loss += loss.item()
    print(f'Rank {rank}, Epoch {epoch + 1}, Loss: {running_loss / len(train_loader)}')

# 清理
torch.distributed.destroy_process_group()

4. 運行分布式訓練

使用 torch.distributed.launch 來啟動分布式訓練:

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

這里的 --nproc_per_node=4 表示每個節點使用4個GPU。如果你有多個節點,你需要指定 --nnodes、--node_rankmaster_addr 等參數。

注意事項

  • 確保所有節點之間的網絡連接是暢通的,并且防火墻設置允許所需的端口通信。
  • 如果你使用的是多節點集群,確保每個節點都能通過網絡相互通信。
  • 根據你的集群配置調整上述腳本和命令。

通過以上步驟,你可以在Ubuntu上使用PyTorch進行分布式訓練。

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女