美文网首页
Pytorch学习笔记(5) Pytorch GPU加速训练

Pytorch学习笔记(5) Pytorch GPU加速训练

作者: 银色尘埃010 | 来源:发表于2020-03-31 22:20 被阅读0次

主要介绍在Pytorch中如何使用GPU进行加速训练,同时在多GPU的条件下如何进行单机并行计算。

一、Pytorch使用GPU加速训练

常用命令

1、 获取设备里的GPU

#syntax 1
device = torch.device("cuda:0,1") 
#syntax 2  会根据设备情况自动选择cpu或者gpu
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")

2、将模型和数据放到GPU中运行

# syntax 1
model.to(device)

# syntax 2 可以直接使用
model.gpu()
model.cuda()

# 将数据放入gpu
data = data.to(device)
data = data.gpu()
data = data.cuda()

通过以上例子知道如何将模型以及数据放入CPU中加速训练。其他的步骤基本保持不变。
当然,如果想使用cpu训练

device = torch.cuda("cpu")
model.to(device)
data.to(device)

# 或者
model.cpu()
data = data.cpu()

3、
在多 GPU 中执行前馈,后馈操作是非常自然的。尽管如此,PyTorch 默认只会使用一个 GPU。通过使用 DataParallel 让你的模型并行运行,你可以很容易的在多 GPU 上运行你的操作。

首先指定GPU运行的几种方式

# 终端指定
CUDA_VISIBLE_DEVICES=1 python script.py

# python 代码中指定
import os
os.environ["CUDA_VISIBLE_DEVICES"] = "0,1,2"
# 不使用的话就可以指定 "none",结合前面的device比较方便

然后将模型放放在多GPU运行

model = nn.DataParallel(model)

二、代码实例

引入 PyTorch 模块和定义参数
import torch
import torch.nn as nn
from torch.autograd import Variable
from torch.utils.data import Dataset, DataLoader
# Parameters and DataLoaders
input_size = 5
output_size = 2

batch_size = 30
data_size = 100
设备
import os
# 这里可以指定设备的id, 或者 "none"
os.environ["CUDA_VISIBLE_DEVICES"] ="0,1"
DEVICE= torch.device("cuda" if torch.cuda.is_available() else "cpu")
# DEVICE = torch.device("cpu")
生成数据

通过使用Dataset和DataLoader对象

class RandomDataset(Dataset):
    def __init__(self,size,length):
        self.len = length
        self.data = torch.randn(length,size)

    def __getitem__(self, index: int):
        return self.data[index]

    def __len__(self):
        return self.len

rand_dataset = RandomDataset(input_size,data_size)
rand_loader = DataLoader(rand_dataset,batch_size=batch_size,shuffle=True)
简单模型

为了做一个小 demo,我们的模型只是获得一个输入,执行一个线性操作,然后给一个输出。尽管如此,你可以使用 DataParallel 在任何模型(CNN, RNN, Capsule Net 等等.)

我们放置了一个输出声明在模型中来检测输出和输入张量的大小。

class MyModel(nn.Module):
    def __init__(self,input_size,output_size):
        super(MyModel,self).__init__()
        self.fc = nn.Linear(input_size,output_size)

    def forward(self, input):
        output = self.fc(input)
        print("  In Model: input size", input.size(),
              "output size", output.size())
        return output

创建模型并且数据并行处理

这是整个教程的核心。首先我们需要一个模型的实例,然后验证我们是否有多个 GPU。如果我们有多个 GPU,我们可以用 nn.DataParallel 来 包裹 我们的模型。然后我们使用 model.to(device) 把模型放到多 GPU 中。

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)

if torch.cuda.is_available():
    model.cuda()

# 前面定义了device,所以可以
model.to(device)

运行程序

for data in rand_loader:
    if torch.cuda.is_available():
        input_var = Variable(data.cuda())
    else:
        input_var = Variable(data)
    # 或者 input_var = data.to(device)

    output = model(input_var)
    print("Outside: input size", input_var.size(),
          "output_size", output.size())

结果

使用1个GPU


使用1个GPU

使用2个GPU


使用2个GPU

使用3个GPU


使用3个GPU

以上就学会了使用GPU加速模型训练,同时知道如何使用多GPU并行化训练。

相关文章

  • Pytorch学习笔记(5) Pytorch GPU加速训练

    主要介绍在Pytorch中如何使用GPU进行加速训练,同时在多GPU的条件下如何进行单机并行计算。 一、Pytor...

  • 基于Pytorch的MLP实现

    基于Pytorch的MLP实现 目标 使用pytorch构建MLP网络 训练集使用MNIST数据集 使用GPU加速...

  • PyTorch 训练

     PyTorch 训练与加速神经网络训练. 更多可以查看官网 :* PyTorch 官网 批训练 Torch 中提...

  • Pytorch基础

    一 Pytorch安装 1. 依赖库 Pytorch配合N家的CUDA库可运行GPU加速,所以一般应先安装CUD...

  • 查看版本号命令

    conda版本 GPU版本 CUDA版本 pytorch版本 验证GPU版pytorch是否可用 torchvis...

  • GPU 加速

    Pytorch支持GPU的CUDA加速,同时也支持CPU单独运算。所以当我们需要GPU加速时 一般需要显式指出,这...

  • Pytorch Basic

    Pytorch是一个深度学习框架,适合作为深度学习研究平台。 Pytorch的优点 基于GPU的Tensor运算,...

  • pytorch学习笔记 --- 口罩识别的模型训练及应用1

    pytorch学习笔记 --- 口罩识别的模型训练及应用1 pytorch的初级教程,在官网上有个很好的文档,这里...

  • 手把手教你学会深度学习框架 — PyTorch

    摘要:PyTorch是一个基于Python语言的深度学习框架,专门针对 GPU 加速的深度神经网络(DNN)的程序...

  • PyTorch分布式训练

    概览 PyTorch 是一个 Python 优先的深度学习框架,能够在强大的 GPU 加速基础上实现张量和动态神经...

网友评论

      本文标题:Pytorch学习笔记(5) Pytorch GPU加速训练

      本文链接:https://www.haomeiwen.com/subject/zijudhtx.html