在Linux環境下使用PyTorch進行并行計算,主要依賴于PyTorch提供的多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()}")
分布式訓練允許你在多臺機器或多個GPU上進行訓練。PyTorch提供了torch.distributed
包來支持分布式訓練。
確保所有節點都可以通過網絡互相通信,并且每個節點上都安裝了相同版本的PyTorch和CUDA。
使用torch.distributed.launch
或accelerate
庫來啟動分布式訓練。以下是一個使用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()
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并行還是分布式訓練。