转载请注明作者和出处: http://blog.youkuaiyun.com/john_bh/
1.使用说明
学习如何用 DataParallel 来使用多 GPU。 通过 PyTorch 使用多个 GPU 非常简单。你可以将模型放在一个 GPU:
device = torch.device("cuda:0")
model.to(device)
然后,复制所有的张量到 GPU:
mytensor = my_tensor.to(device)
请注意,只是调用 my_tensor.to(device) 返回一个 my_tensor 新的复制在GPU上,而不是重写 my_tensor。你需要分配给他一个新的张量并且在 GPU 上使用这个张量。
在多 GPU 中执行前馈,后馈操作是非常自然的。尽管如此,PyTorch 默认只会使用一个 GPU。通过使用 DataParallel 让模型并行运行,可以很容易的在多 GPU 上运行你的操作。
model = nn.DataParallel(model)
2.完整代码
做一个小 demo,模型只是获得一个输入,执行一个线性操作,然后给一个输出。
# -*- coding:utf-8 -*-
import torch
import torch.nn as nn
from torch.utils.data import Dataset, DataLoader
#参数
input_size = 5
output_size = 2
batch_size = 30
data_size = 100
#设备
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
#生成一个玩具数据(只需要实现 getitem)
class RandomDataset(Dataset):
def __init__(self, size, length):
self.len = length
self.data = torch.randn(length, size)
def __getitem__(self, index):
return self.data[index]
def __len__(self):
return self.len
rand_loader = DataLoader(dataset=RandomDataset(input_size, data_size),batch_size=batch_size, shuffle=True)
#自定义模型
class Model(nn.Module):
def __init__(self, input_size, output_size):
super(Model, self).__init__()
self.fc = nn.Linear(input_size, output_size)
def forward(self, input):
output = self.fc(input)
print("\tIn Model: input size", input.size(), "output size", output.size())
return output
#首先需要一个模型的实例,然后验证是否有多个 GPU。如果有多个 GPU,则可以用 nn.DataParallel 来包裹我们的模型。然后使用 model.to(device) 把模型放到多 GPU 中。
model = Model(input_size, output_size)
if torch.cuda.device_count() > 1:
print("Let's use", torch.cuda.device_count(), "GPUs!")
# dim = 0 [30, xxx] -> [10, ...], [10, ...], [10, ...] on 3 GPUs
model = nn.DataParallel(model)
model.to(device)

本文详细介绍了如何在PyTorch中利用DataParallel进行多GPU并行计算,包括模型部署、数据拆分及结果合并过程。通过具体代码示例,展示了不同GPU数量下数据并行的执行情况。
最低0.47元/天 解锁文章
779

被折叠的 条评论
为什么被折叠?



