Pytorch 多块GPU的使用详解


Posted in Python onDecember 31, 2019

注:本文针对单个服务器上多块GPU的使用,不是多服务器多GPU的使用。

在一些实验中,由于Batch_size的限制或者希望提高训练速度等原因,我们需要使用多块GPU。本文针对Pytorch中多块GPU的使用进行说明。

1. 设置需要使用的GPU编号

import os
 
os.environ["CUDA_VISIBLE_DEVICES"] = "0,4"
ids = [0,1]

比如我们需要使用第0和第4块GPU,只用上述三行代码即可。

其中第二行指程序只能看到第1块和第4块GPU;

第三行的0即为第二行中编号为0的GPU;1即为编号为4的GPU。

2.更改网络,可以理解为将网络放入GPU

class CNN(nn.Module):
  def __init__(self):
    super(CNN,self).__init__()
    self.conv1 = nn.Sequential(
    ......
    )
    
    ......
    
    self.out = nn.Linear(Liner_input,2)
 
  ......
    
  def forward(self,x):
    x = self.conv1(x)
    ......
    output = self.out(x)
    return output,x
  
cnn = CNN()
 
# 更改,.cuda()表示将本存储到CPU的网络及其参数存储到GPU!
cnn.cuda()

3. 更改输出数据(如向量/矩阵/张量):

for epoch in range(EPOCH):
  epoch_loss = 0.
  for i, data in enumerate(train_loader2):
    image = data['image'] # data是字典,我们需要改的是其中的image
 
    #############更改!!!##################
    image = Variable(image).float().cuda()
    ############################################
 
    label = inputs['label']
    #############更改!!!##################
    label = Variable(label).type(torch.LongTensor).cuda()
    ############################################
    label = label.resize(BATCH_SIZE)
    output = cnn(image)[0]
    loss = loss_func(output, label)  # cross entropy loss
    optimizer.zero_grad()      # clear gradients for this training step
    loss.backward()         # backpropagation, compute gradients
    optimizer.step() 
    ... ...

4. 更改其他CPU与GPU冲突的地方

有些函数必要在GPU上完成,例如将Tensor转换为Numpy,就要使用data.cpu().numpy(),其中data是GPU上的Tensor。

若直接使用data.numpy()则会报错。除此之外,plot等也需要在CPU中完成。如果不是很清楚哪里要改的话可以先不改,等到程序报错了,再哪里错了改哪里,效率会更高。例如:

... ...
    #################################################
    pred_y = torch.max(test_train_output, 1)[1].data.cpu().numpy()
    
    accuracy = float((pred_y == label.cpu().numpy()).astype(int).sum()) / float(len(label.cpu().numpy()))

假如不加.cpu()便会报错,此时再改即可。

5. 更改前向传播函数,从而使用多块GPU

以VGG为例:

class VGG(nn.Module):
 
  def __init__(self, features, num_classes=2, init_weights=True):
    super(VGG, self).__init__()
... ...
 
  def forward(self, x):
    #x = self.features(x)
    #################Multi GPUS#############################
    x = nn.parallel.data_parallel(self.features,x,ids)
    x = x.view(x.size(0), -1)
    # x = self.classifier(x)
    x = nn.parallel.data_parallel(self.classifier,x,ids)
    return x
... ...

然后就可以看运行结果啦,nvidia-smi查看GPU使用情况:

Pytorch 多块GPU的使用详解

可以看到0和4都被使用啦

以上这篇Pytorch 多块GPU的使用详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
使用rpclib进行Python网络编程时的注释问题
May 06 Python
Python本地与全局命名空间用法实例
Jun 16 Python
python下载文件记录黑名单的实现代码
Oct 24 Python
浅谈Python实现贪心算法与活动安排问题
Dec 19 Python
python处理csv中的空值方法
Jun 22 Python
python日期相关操作实例小结
Jun 24 Python
12个步骤教你理解Python装饰器
Jul 01 Python
使用Python的Turtle库绘制森林的实例
Dec 18 Python
在keras中model.fit_generator()和model.fit()的区别说明
Jun 17 Python
Python: glob匹配文件的操作
Dec 11 Python
python实现网络五子棋
Apr 11 Python
Python中第三方库Faker的使用详解
Apr 02 Python
Pyorch之numpy与torch之间相互转换方式
Dec 31 #Python
pytorch sampler对数据进行采样的实现
Dec 31 #Python
关于pytorch处理类别不平衡的问题
Dec 31 #Python
pytorch 指定gpu训练与多gpu并行训练示例
Dec 31 #Python
浅析Django中关于session的使用
Dec 30 #Python
使用pickle存储数据dump 和 load实例讲解
Dec 30 #Python
在Python中利用pickle保存变量的实例
Dec 30 #Python
You might like
DC动画电影《黑暗正义联盟》曝预告 5月5日上线数字平台
2020/04/09 欧美动漫
php产生随机数的两种方法实例代码 输出随机IP
2011/04/08 PHP
ThinkPHP使用心得分享-上传类UploadFile的使用
2014/05/15 PHP
PHP利用curl发送HTTP请求的实例代码
2020/07/09 PHP
js函数调用的方式
2014/05/06 Javascript
JS小游戏之象棋暗棋源码详解
2014/09/25 Javascript
提升PHP安全:8个必须修改的PHP默认配置
2014/11/17 Javascript
JavaScript使用RegExp进行正则匹配的方法
2015/07/11 Javascript
Jquery给当前页或者跳转后页面的导航栏添加选中后样式的实例
2016/12/08 Javascript
js鼠标跟随运动效果
2017/03/11 Javascript
javascript将url解析为json格式的两种方法
2017/08/18 Javascript
JavaScript文件的同步和异步加载的实现代码
2017/08/19 Javascript
JS基于递归实现网页版计算器的方法分析
2017/12/20 Javascript
Vue2.0 实现单选互斥的方法
2018/04/13 Javascript
详解Vue中使用Echarts的两种方式
2018/07/03 Javascript
微信小程序在线客服自动回复功能(基于node)
2019/07/03 Javascript
JS Ajax请求会话过期处理问题解决方法分析
2019/11/16 Javascript
vue 组件开发原理与实现方法详解
2019/11/29 Javascript
JS数组方法reduce的用法实例分析
2020/03/03 Javascript
Vue-Ant Design Vue-普通及自定义校验实例
2020/10/24 Javascript
ant-design-vue中的select选择器,对输入值的进行筛选操作
2020/10/24 Javascript
python实现多线程采集的2个代码例子
2014/07/07 Python
Laravel框架表单验证格式化输出的方法
2019/09/25 Python
canvas学习笔记之2d画布基础的实现
2019/02/21 HTML / CSS
英国豪华针织品牌John Smedley的在线销售商:The Outlet by John Smedley
2018/04/08 全球购物
美国家居装饰网上商店:Lulu & Georgia
2019/09/14 全球购物
美国传奇滑手Paul Rodriguez创办的街头滑板品牌:Primitive Skateboarding
2019/10/29 全球购物
应届生求职信写作技巧
2013/10/24 职场文书
高级技校毕业生自荐信
2013/11/18 职场文书
英语生日邀请函
2014/01/23 职场文书
《要下雨了》教学反思
2014/02/17 职场文书
美术专业自荐信
2014/07/07 职场文书
大学感恩节活动策划方案
2014/10/11 职场文书
2015年度质量工作总结报告
2015/04/27 职场文书
小学生表扬稿范文
2015/05/05 职场文书
uniapp开发打包多端应用完整方法指南
2022/12/24 Javascript