pytorch查看torch.Tensor和model是否在CUDA上的实例


Posted in Python onJanuary 03, 2020

今天训练faster R-CNN时,发现之前跑的很好的程序(是指在运行程序过程中,显卡利用率能够一直维持在70%以上),今天看的时候,显卡利用率很低,所以在想是不是我的训练数据torch.Tensor或者模型model没有加载到GPU上训练,于是查找如何查看tensor和model所在设备的命令。

import torch
import torchvision.models as models
model=models.vgg11(pretrained=False)
print(next(model.parameters()).is_cuda)#False

data=torch.ones((5,10))
print(data.device)#cpu

上述是我在自己的笔记本上(显然没有GPU)的打印情况。

上次被老板教授了好久,出现西安卡利用率一直很低的情况千万不能认为它不是问题,而一定要想办法解决。比如可以在加载训练图像的过程中(__getitem__方法中)设定数据增强过程中每个步骤的时间点,对每个步骤的时间点进行打印,判断花费时间较多的是哪些步骤,然后尝试对代码进行优化,因为torhc.utils.data中的__getitem__方法是由CPU上的一个num_workers执行一遍的,如果__getitem__方法执行太慢,则会导致IO速度变慢,即GPU在大多数时间都处于等待CPU读取数据并处理成torch.cuda.tensor的过程,一旦CPU读取一个batch size的数据完毕,GPU很快就计算结束,从而看到的现象是:GPU在绝大多数时间都处于利用率很低的状态。

所以我总结的是,如果GPU显卡利用率比较低,最可能的就是CPU数据IO耗费时间太多(我之前就是由于数据增强的裁剪过程为了裁剪到object使用了for循环,导致这一操作很耗时间),还有可能的原因是数据tensor或者模型model根本就没有加载到GPU cuda上面。其实还有一种可能性很小的原因就是,在网络前向传播的过程中某些特殊的操作对GPU的利用率不高,当然指的是除了网络(卷积,全连接)操作之外的其他的对于tensor的操作,比如我之前的faster R-CNN显卡利用率低就是因为RPN中的NMS算法速度太慢,大约2-3秒一张图,虽然这时候tensor特征图在CUDA上面,而且NMS也使用了CUDA kernel编译后的代码,也就是说NMS的计算仍然是利用的CPU,但是由于NMS算法并行度不高,所以对于GPU的利用不多,导致了显卡利用率低,之前那个是怎么解决的呢?

哈哈,说到底还是环境的问题非常重要,之前的faster R-CNN代码在python2  CUDA9.0 pytorch 0.4.0 环境下编译成功我就没有再仔细纠结环境问题,直接运行了,直到后来偶然换成python3 CUDA9.0 pytorch 0.4.1 环境才极大地提高了显卡利用率,并且通过设置了几十个打印时间点之后发现,真的就是NMS的速度现在基本能维持在0.02-0.2数量级范围内。

下图分别表示之前(显卡利用率很低)时的NMS处理单张图像所消耗的时间(之所以会有长有短是因为我支持不同分辨率的图像训练),后面一张图是GPU利用率一直能维持在很高的情况下NMS处理时间,由于数据增强部分的代码完全没有修改,故而换了环境之后我就没有再打印数据增强每个步骤所消耗的时间了。

pytorch查看torch.Tensor和model是否在CUDA上的实例

pytorch查看torch.Tensor和model是否在CUDA上的实例

以上这篇pytorch查看torch.Tensor和model是否在CUDA上的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
布同自制Python函数帮助查询小工具
Mar 13 Python
基于Python3 逗号代码 和 字符图网格(详谈)
Jun 22 Python
用python实现对比两张图片的不同
Feb 05 Python
详谈Numpy中数组重塑、合并与拆分方法
Apr 17 Python
Python中类的创建和实例化操作示例
Feb 27 Python
python web框架 django wsgi原理解析
Aug 20 Python
Python 实现文件读写、坐标寻址、查找替换功能
Sep 11 Python
pandas的相关系数与协方差实例
Dec 27 Python
Python 批量读取文件中指定字符的实现
Mar 06 Python
Django数据库迁移常见使用方法
Nov 12 Python
Pycharm配置autopep8实现流程解析
Nov 28 Python
Pandas实现DataFrame的简单运算、统计与排序
Mar 31 Python
python实现上传文件到linux指定目录的方法
Jan 03 #Python
pytorch::Dataloader中的迭代器和生成器应用详解
Jan 03 #Python
django商品分类及商品数据建模实例详解
Jan 03 #Python
PyTorch和Keras计算模型参数的例子
Jan 02 #Python
Pytorch中实现只导入部分模型参数的方式
Jan 02 #Python
PyTorch中topk函数的用法详解
Jan 02 #Python
Pytorch训练过程出现nan的解决方式
Jan 02 #Python
You might like
PHP IDE PHPStorm配置支持友好Laravel代码提示方法
2015/05/12 PHP
学习php设计模式 php实现策略模式(strategy)
2015/12/07 PHP
thinkphp3.x自定义Action、Model及View的简单实现方法
2016/05/19 PHP
php cookie 详解使用实例
2016/11/03 PHP
php 常用的系统函数
2017/02/07 PHP
Laravel中日期时间处理包Carbon的简单使用
2017/09/21 PHP
修改jQuery.Autocomplete插件 支持中文输入法 避免TAB、ENTER键失效、导致表单提交
2009/10/11 Javascript
变量声明时命名与变量作为对象属性时命名的区别解析
2013/12/06 Javascript
jquery实现弹出层完美居中效果
2014/03/03 Javascript
JavaScript动态加载样式表的方法
2015/03/21 Javascript
基于JavaScript代码实现随机漂浮图片广告
2016/01/05 Javascript
基于RequireJS和JQuery的模块化编程日常问题解析
2016/04/14 Javascript
JavaScript实现经典排序算法之选择排序
2016/12/28 Javascript
解决vue 绑定对象内点击事件失效问题
2018/09/05 Javascript
axios+Vue实现上传文件显示进度功能
2019/04/14 Javascript
Vue基于vuex、axios拦截器实现loading效果及axios的安装配置
2019/04/26 Javascript
基于Vue SEO的四种方案(小结)
2019/07/01 Javascript
JS实现简单打字测试
2020/06/24 Javascript
使用Pyrex来扩展和加速Python程序的教程
2015/04/13 Python
Python实现更改图片尺寸大小的方法(基于Pillow包)
2016/09/19 Python
CentOS 7下Python 2.7升级至Python3.6.1的实战教程
2017/07/06 Python
从DataFrame中提取出Series或DataFrame对象的方法
2018/11/10 Python
python fuzzywuzzy模块模糊字符串匹配详细用法
2019/08/29 Python
浅谈keras中的batch_dot,dot方法和TensorFlow的matmul
2020/06/18 Python
python如何调用java类
2020/07/05 Python
python中常用的数据结构介绍
2021/01/12 Python
佐卡伊官网:中国知名珠宝品牌
2017/02/05 全球购物
Sperry澳大利亚官网:源自美国帆船鞋创始品牌
2019/07/29 全球购物
台湾专柜女包:KINAZ
2019/12/26 全球购物
.net笔试题
2014/03/03 面试题
信息专业学生学习的自我评价
2014/02/17 职场文书
副总经理任命书
2014/06/05 职场文书
部门群众路线教育实践活动对照检查材料思想汇报
2014/10/07 职场文书
党的群众路线整改落实情况汇报
2014/10/28 职场文书
保险公司岗前培训工作总结
2015/10/24 职场文书
python生成随机数、随机字符、随机字符串
2021/04/06 Python