在pytorch中为Module和Tensor指定GPU的例子


Posted in Python onAugust 19, 2019

pytorch指定GPU

在用pytorch写CNN的时候,发现一运行程序就卡住,然后cpu占用率100%,nvidia-smi 查看显卡发现并没有使用GPU。所以考虑将模型和输入数据及标签指定到gpu上。

pytorch中的Tensor和Module可以指定gpu运行,并且可以指定在哪一块gpu上运行,方法非常简单,就是直接调用Tensor类和Module类中的 .cuda() 方法。

import torch
from PIL import Image
import torch.nn as nn
import numpy as np
from torch.autograd import Variable

# 先看看有没有显卡
torch.cuda.is_available()
Out[16]: True
# 嗯,有显卡,可以指定,先生成一个Tensor
a = torch.Tensor(3,5)
a
Out[13]: 
.00000e-05 *
 0.0000 0.0000 2.0419 0.0000 2.0420
 0.0000 0.0000 0.0000 0.0000 0.0000
 0.0132 0.0000 0.0131 0.0000 0.0000
[torch.FloatTensor of size 3x5]
a.cuda()
Out[14]: 
.00000e-05 *
 0.0000 0.0000 2.0419 0.0000 2.0420
 0.0000 0.0000 0.0000 0.0000 0.0000
 0.0132 0.0000 0.0131 0.0000 0.0000
[torch.cuda.FloatTensor of size 3x5 (GPU 0)]
# 可以看到上面显示了(GPU 0),也就是说这个Tensor是在第一个GPU上的
a.cuda(1)
Traceback (most recent call last):

 File "<ipython-input-15-ef42531f63ca>", line 1, in <module>
  a.cuda(1)

 File "/home/chia/anaconda2/lib/python2.7/site-packages/torch/_utils.py", line 57, in _cuda
  with torch.cuda.device(device):

 File "/home/chia/anaconda2/lib/python2.7/site-packages/torch/cuda/__init__.py", line 127, in __enter__
  torch._C._cuda_setDevice(self.idx)

RuntimeError: cuda runtime error (10) : invalid device ordinal at torch/csrc/cuda/Module.cpp:84
# 这个报错了,因为只有一块GPU,所以指定cuda(1)无效。

同样滴,Variable变量和Module类型的模型也可以指定放在哪块GPU上

v = Variable(a)

v
Out[18]: 
Variable containing:
.00000e-05 *
 0.0000 0.0000 2.0419 0.0000 2.0420
 0.0000 0.0000 0.0000 0.0000 0.0000
 0.0132 0.0000 0.0131 0.0000 0.0000
[torch.FloatTensor of size 3x5]

v.cuda(0)
Out[19]: 
Variable containing:
.00000e-05 *
 0.0000 0.0000 2.0419 0.0000 2.0420
 0.0000 0.0000 0.0000 0.0000 0.0000
 0.0132 0.0000 0.0131 0.0000 0.0000
[torch.cuda.FloatTensor of size 3x5 (GPU 0)]

model = DenoiseCNN()

model
Out[22]: 
DenoiseCNN (
 (hid_layer): Sequential (
  (0): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
  (1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True)
  (2): LeakyReLU (0.2)
 )
 (first_layer): Sequential (
  (0): Conv2d(1, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
  (1): LeakyReLU (0.2)
 )
 (last_layer): Sequential (
  (0): Conv2d(32, 1, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
 )
)

model.cuda(0)
Out[23]: 
DenoiseCNN (
 (hid_layer): Sequential (
  (0): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
  (1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True)
  (2): LeakyReLU (0.2)
 )
 (first_layer): Sequential (
  (0): Conv2d(1, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
  (1): LeakyReLU (0.2)
 )
 (last_layer): Sequential (
  (0): Conv2d(32, 1, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
 )
)

这样看不出来Module的变化,考虑看一下Module中的参数在哪里

for i, para in enumerate(model.parameters()):
  if i < 2:
    print para

Parameter containing:
(0 ,0 ,.,.) = 
 -3.1792e-02 -4.6396e-02 -4.3472e-02
 3.4903e-02 1.8558e-02 5.3955e-03
 2.4986e-02 3.8061e-02 -1.6658e-02

(0 ,1 ,.,.) = 
 -3.5041e-02 -3.6286e-02 -3.0819e-02
 1.0683e-02 9.0773e-03 -2.5379e-02
 2.9508e-03 2.8774e-02 7.4632e-04

(0 ,2 ,.,.) = 
 -4.6986e-02 -5.1183e-02 8.4346e-04
 -6.6864e-03 -2.8816e-02 1.2566e-02
 2.1682e-02 2.5485e-02 -7.2600e-03
  ...

(0 ,29,.,.) = 
 -5.5289e-03 -2.6012e-02 -2.7771e-02
 2.7528e-02 3.0460e-02 -1.2829e-02
 7.3387e-03 5.2633e-02 5.0601e-02

(0 ,30,.,.) = 
 -3.5881e-02 9.7000e-03 -3.3692e-02
 1.6257e-03 -4.0113e-02 3.5300e-02
 -2.1399e-03 3.0934e-02 -2.7513e-02

(0 ,31,.,.) = 
 -2.7492e-02 2.5803e-02 5.2171e-02
 -2.4082e-02 3.1887e-02 1.1292e-02
 5.8893e-02 -3.5452e-02 -1.2115e-02
   ⋮ 

(1 ,0 ,.,.) = 
 5.0664e-02 -4.1085e-02 2.9089e-02
 2.1555e-02 5.7176e-02 -7.5013e-03
 3.5075e-02 -1.6610e-02 3.4904e-02

(1 ,1 ,.,.) = 
 4.6716e-02 -1.2552e-02 -3.8132e-02
 -2.9573e-02 -3.5008e-02 -4.2891e-02
 9.5230e-03 -4.8599e-02 2.5357e-02

(1 ,2 ,.,.) = 
 -1.7859e-02 1.3442e-02 1.9493e-02
 1.8434e-02 1.4884e-03 8.6479e-03
 -7.1610e-03 3.5724e-02 6.2249e-03
  ...

(1 ,29,.,.) = 
 -3.3194e-02 1.6803e-05 2.3405e-02
 -5.2223e-02 6.5680e-03 -1.8427e-02
 -1.4476e-02 -1.5434e-02 -2.3108e-02

(1 ,30,.,.) = 
 2.3479e-02 1.2840e-02 4.5949e-02
 4.4833e-02 4.9272e-02 -3.7634e-02
 4.2787e-02 8.5841e-04 1.2332e-02

(1 ,31,.,.) = 
 4.1723e-02 -2.5295e-02 1.1326e-02
 -5.1707e-02 5.3201e-02 4.8928e-02
 -1.6735e-02 -8.7450e-03 -4.9530e-02
   ⋮ 

(2 ,0 ,.,.) = 
 -3.1728e-02 -3.9757e-02 6.5561e-03
 -1.7731e-02 2.8615e-02 2.7457e-02
 -2.1817e-03 -4.2405e-02 -3.6126e-03

(2 ,1 ,.,.) = 
 3.2434e-02 -1.1574e-03 1.3353e-02
 -2.3069e-02 4.9532e-02 1.6768e-02
 -3.5563e-02 -4.4264e-02 -2.0571e-02

(2 ,2 ,.,.) = 
 7.4980e-03 -5.7412e-03 -3.0638e-03
 1.1812e-02 -1.7851e-02 4.2195e-04
 3.9753e-02 3.8771e-02 4.3166e-03
  ...

(2 ,29,.,.) = 
 -5.0798e-02 4.3651e-02 -2.3798e-02
 -6.0957e-03 -5.6953e-02 1.2583e-02
 -2.3450e-02 -4.7136e-02 5.2458e-02

(2 ,30,.,.) = 
 1.5088e-02 2.6097e-02 4.9392e-03
 -9.0372e-03 -5.3276e-02 -1.7824e-02
 3.2060e-03 5.8820e-02 1.3459e-02

(2 ,31,.,.) = 
 -5.2557e-03 -4.9638e-02 -7.5522e-03
 2.8668e-02 -3.9617e-02 -1.8111e-02
 -4.0412e-02 1.1320e-02 -2.4005e-02

   ⋮ 

(29,0 ,.,.) = 
 -1.4393e-02 2.1343e-02 5.1940e-02
 5.7449e-02 3.1327e-02 -1.0721e-02
 -1.0184e-02 -6.2289e-03 3.9823e-02

(29,1 ,.,.) = 
 -4.2240e-03 5.8135e-02 5.2816e-02
 -4.9888e-02 3.3972e-02 4.3127e-02
 -2.3355e-02 -5.5401e-02 3.4952e-02

(29,2 ,.,.) = 
 4.0336e-02 7.6532e-03 5.4083e-02
 -2.7456e-02 3.9090e-02 4.4008e-02
 -2.0424e-02 -5.8922e-02 -4.4759e-03
  ...

(29,29,.,.) = 
 8.8037e-03 1.0347e-02 -2.2285e-02
 -1.0538e-02 -3.2981e-02 2.2300e-02
 -2.7337e-02 5.3113e-02 5.4608e-02

(29,30,.,.) = 
 3.1429e-02 5.2024e-03 -1.3882e-02
 -3.3123e-02 -2.7633e-03 1.9007e-02
 -2.9795e-02 3.7551e-02 5.6486e-02

(29,31,.,.) = 
 2.0140e-02 1.8530e-02 7.4208e-03
 2.7311e-02 5.3581e-02 -2.5553e-02
 -1.7285e-02 1.8722e-02 4.0104e-02
   ⋮ 

(30,0 ,.,.) = 
 5.2750e-02 4.5757e-03 -5.3894e-02
 -3.9297e-02 3.2918e-02 2.3571e-02
 -1.1806e-02 1.6091e-02 3.3755e-04

(30,1 ,.,.) = 
 4.2858e-02 -5.2211e-02 -3.5660e-02
 1.4807e-02 -5.8873e-02 5.5535e-02
 4.9854e-02 2.2946e-02 4.0968e-03

(30,2 ,.,.) = 
 3.0378e-02 2.1315e-02 9.1700e-03
 3.6277e-02 -4.0734e-02 4.8175e-02
 3.0748e-02 -2.7425e-02 -1.7741e-02
  ...

(30,29,.,.) = 
 3.1883e-02 2.5012e-02 2.8504e-02
 -1.3538e-02 3.5570e-02 -2.0261e-02
 -1.5959e-02 3.3373e-02 8.3261e-03

(30,30,.,.) = 
 2.7152e-02 -5.6752e-02 2.2697e-02
 1.2614e-02 -2.4174e-02 -2.5058e-02
 1.8737e-02 -1.3581e-03 -3.7116e-02

(30,31,.,.) = 
 -4.3278e-02 2.5873e-02 -1.6677e-02
 3.9483e-02 5.7898e-02 -4.1450e-02
 -5.8218e-02 -3.0660e-02 -4.2161e-02
   ⋮ 

(31,0 ,.,.) = 
 1.3370e-02 -1.4191e-02 -2.2524e-02
 2.1772e-02 -2.2440e-02 -3.0512e-03
 3.4139e-02 -1.9043e-02 1.1289e-02

(31,1 ,.,.) = 
 -5.1293e-02 -5.2802e-02 1.7022e-02
 5.1031e-02 -1.0345e-02 -4.4780e-02
 -4.9422e-02 4.7709e-02 -2.1215e-02

(31,2 ,.,.) = 
 2.2289e-02 -2.1746e-02 -5.3192e-02
 2.6651e-02 -1.6531e-02 2.2640e-02
 1.4012e-02 1.1405e-02 -1.4809e-02
  ...

(31,29,.,.) = 
 2.5505e-03 2.4052e-02 -4.7662e-02
 1.6068e-02 -4.2278e-02 -2.4670e-02
 -1.4684e-02 -3.8222e-02 -5.0006e-02

(31,30,.,.) = 
 -4.9350e-02 4.7564e-02 -7.3479e-03
 2.6490e-02 -1.1745e-02 3.4324e-02
 4.2650e-02 -5.4633e-02 9.4581e-03

(31,31,.,.) = 
 -3.2695e-02 -2.8899e-02 1.5543e-02
 -5.3662e-02 5.0727e-02 3.5950e-02
 4.6130e-02 -4.4754e-02 -4.5647e-02
[torch.cuda.FloatTensor of size 32x32x3x3 (GPU 0)]

Parameter containing:
.00000e-02 *
 -1.2723
 -5.2970
 -3.4638
 -1.5302
 0.7641
 5.7516
 -4.8427
 -0.7230
 4.5940
 -4.1709
 4.8093
 -4.7249
 -2.2756
 -5.5165
 5.1259
 -2.4693
 1.8527
 -0.4210
 -2.0518
 -3.8124
 -4.6195
 -4.3019
 -0.8631
 -0.4400
 5.4604
 -5.5597
 1.5557
 4.2336
 3.9482
 -1.4457
 2.6124
 -1.8218
[torch.cuda.FloatTensor of size 32 (GPU 0)]

可以看出,模型的参变量是放在GPU上的。

通过指定了gpu后,就可以使用gpu来训练模型了~美滋滋

以上这篇在pytorch中为Module和Tensor指定GPU的例子就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python实现子类调用父类的方法
Nov 10 Python
Python标准库sched模块使用指南
Jul 06 Python
Python日期时间对象转换为字符串的实例
Jun 22 Python
python判断计算机是否有网络连接的实例
Dec 15 Python
Python正则匹配判断手机号是否合法的方法
Dec 09 Python
Flask框架钩子函数功能与用法分析
Aug 02 Python
python计算无向图节点度的实例代码
Nov 22 Python
python误差棒图errorbar()函数实例解析
Feb 11 Python
Django查询优化及ajax编码格式原理解析
Mar 25 Python
python实现在列表中查找某个元素的下标示例
Nov 16 Python
Python机器学习三大件之一numpy
May 10 Python
opencv读取视频并保存图像的方法
Jun 04 Python
pytorch使用指定GPU训练的实例
Aug 19 #Python
关于pytorch多GPU训练实例与性能对比分析
Aug 19 #Python
pytorch 更改预训练模型网络结构的方法
Aug 19 #Python
pytorch打印网络结构的实例
Aug 19 #Python
pytorch索引查找 index_select的例子
Aug 18 #Python
浅谈Pytorch中的torch.gather函数的含义
Aug 18 #Python
PyTorch中Tensor的维度变换实现
Aug 18 #Python
You might like
PHP下MAIL的另一解决方案
2006/10/09 PHP
ThinkPHP模板中数组循环实例
2014/10/30 PHP
PHP常用技巧汇总
2016/03/04 PHP
PNGHandler-借助JS让PNG图在IE下实现透明(包括背景图)
2007/08/31 Javascript
JQuery扩展插件Validate 2通过参数设置验证规则
2011/09/05 Javascript
使用UglifyJS合并/压缩JavaScript的方法
2012/03/07 Javascript
jquery中选择块并改变属性值的方法
2013/07/31 Javascript
Jquery实现图片放大镜效果的思路及代码(自写)
2013/10/18 Javascript
JavaScript禁止页面操作的示例代码
2013/12/17 Javascript
JavaScript编程的10个实用小技巧
2014/04/18 Javascript
javascript作用域和闭包使用详解
2014/04/25 Javascript
jQuery实现的原图对比窗帘效果
2014/06/15 Javascript
node.js中的fs.fchown方法使用说明
2014/12/16 Javascript
jQuery中:animated选择器用法实例
2014/12/29 Javascript
JS基础随笔(菜鸟必看篇)
2016/07/13 Javascript
jquery实现转盘抽奖功能
2017/01/06 Javascript
详解vue-cli快速构建项目以及引入bootstrap、jq
2017/05/26 Javascript
Angular.js中下拉框实现渲染html的方法
2017/06/18 Javascript
详解node服务器中打开html文件的两种方法
2017/09/18 Javascript
Javascript中从学习bind到实现bind的过程
2018/01/05 Javascript
vue.js提交按钮时进行简单的if判断表达式详解
2018/08/08 Javascript
React如何实现浏览器打印部分内容详析
2019/05/19 Javascript
[03:02]2020完美世界城市挑战赛(秋季赛)总决赛回顾
2021/03/11 DOTA
举例讲解Python设计模式编程中对抽象工厂模式的运用
2016/03/02 Python
linux环境下安装python虚拟环境及注意事项
2020/01/07 Python
python数据库开发之MongoDB安装及Python3操作MongoDB数据库详细方法与实例
2020/03/18 Python
基于Python爬取51cto博客页面信息过程解析
2020/08/25 Python
幼教毕业生自我鉴定
2014/01/12 职场文书
副科竞争上岗演讲稿
2014/05/12 职场文书
法学自荐信
2014/06/20 职场文书
2014市府办领导班子“四风问题”对照检查材料思想汇报
2014/09/24 职场文书
开除员工通知
2015/04/22 职场文书
2015年基层党建工作汇报材料
2015/06/25 职场文书
导游词之金鞭溪风景区
2019/09/12 职场文书
JavaScript中关于预编译、作用域链和闭包的理解
2021/03/31 Javascript
win10更新失败无限重启解决方法
2022/04/19 数码科技