在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并行还是分布式训练。