溫馨提示×

PyTorch Linux環境下如何進行并行計算

小樊
42
2025-08-19 17:14:15
欄目: 智能運維

在Linux環境下使用PyTorch進行并行計算,主要依賴于PyTorch提供的多GPU支持和分布式訓練功能。以下是一些基本的步驟和指南:

1. 多GPU并行計算

環境準備

確保你已經安裝了支持CUDA的PyTorch版本,并且你的系統有多個GPU。

數據并行

使用torch.nn.DataParallel可以輕松實現數據并行。以下是一個簡單的例子:

import torch
import torch.nn as nn
from torchvision import datasets, transforms

# 定義一個簡單的模型
class SimpleModel(nn.Module):
    def __init__(self):
        super(SimpleModel, self).__init__()
        self.fc = nn.Linear(784, 10)

    def forward(self, x):
        x = x.view(x.size(0), -1)
        return self.fc(x)

# 加載數據
transform = transforms.Compose([transforms.ToTensor()])
train_dataset = datasets.MNIST(root='./data', train=True, download=True, transform=transform)
train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=64, shuffle=True)

# 初始化模型并移動到GPU
model = SimpleModel().cuda()

# 使用DataParallel包裝模型
if torch.cuda.device_count() > 1:
    print(f"Let's use {torch.cuda.device_count()} GPUs!")
    model = nn.DataParallel(model)

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

# 訓練模型
for epoch in range(5):
    for data, target in train_loader:
        data, target = data.cuda(), target.cuda()
        optimizer.zero_grad()
        output = model(data)
        loss = criterion(output, target)
        loss.backward()
        optimizer.step()
    print(f"Epoch {epoch+1}, Loss: {loss.item()}")

2. 分布式訓練

分布式訓練允許你在多臺機器或多個GPU上進行訓練。PyTorch提供了torch.distributed包來支持分布式訓練。

環境準備

確保所有節點都可以通過網絡互相通信,并且每個節點上都安裝了相同版本的PyTorch和CUDA。

啟動分布式訓練

使用torch.distributed.launchaccelerate庫來啟動分布式訓練。以下是一個使用torch.distributed.launch的例子:

python -m torch.distributed.launch --nproc_per_node=NUM_GPUS_YOU_HAVE YOUR_TRAINING_SCRIPT.py

修改訓練腳本

在你的訓練腳本中,需要初始化分布式環境:

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

def main():
    # 初始化分布式環境
    dist.init_process_group(backend='nccl')

    # 獲取當前進程的GPU ID
    gpu_id = dist.get_rank()

    # 設置設備
    device = torch.device(f'cuda:{gpu_id}')

    # 定義模型并移動到指定GPU
    model = SimpleModel().to(device)

    # 使用DistributedDataParallel包裝模型
    model = DDP(model, device_ids=[gpu_id])

    # 其他訓練代碼...

if __name__ == "__main__":
    main()

3. 使用accelerate

accelerate庫簡化了分布式訓練的設置過程。以下是一個使用accelerate的例子:

安裝accelerate

pip install accelerate

修改訓練腳本

from accelerate import Accelerator
import torch
import torch.nn as nn
import torch.distributed as dist
from torch.nn.parallel import DistributedDataParallel as DDP

def main():
    accelerator = Accelerator(fp16=True)
    accelerator.print("Accelerator", device_placement=True)

    # 初始化分布式環境
    dist.init_process_group(backend='nccl')

    # 獲取當前進程的GPU ID
    gpu_id = dist.get_rank()

    # 設置設備
    device = torch.device(f'cuda:{gpu_id}')

    # 定義模型并移動到指定GPU
    model = SimpleModel().to(device)

    # 使用DistributedDataParallel包裝模型
    model = DDP(model, device_ids=[gpu_id])

    # 其他訓練代碼...

if __name__ == "__main__":
    main()

啟動分布式訓練

accelerate launch YOUR_TRAINING_SCRIPT.py

通過以上步驟,你可以在Linux環境下使用PyTorch進行并行計算,無論是多GPU并行還是分布式訓練。

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