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 解析XML文件
Apr 15 Python
python实现给字典添加条目的方法
Sep 25 Python
python函数局部变量用法实例分析
Aug 04 Python
Python在Windows和在Linux下调用动态链接库的教程
Aug 18 Python
Python随手笔记之标准类型内建函数
Dec 02 Python
Python的Twisted框架上手前所必须了解的异步编程思想
May 25 Python
详解python使用Nginx和uWSGI来运行Python应用
Jan 09 Python
Python定时任务sched模块用法示例
Jul 16 Python
Python实现查找二叉搜索树第k大的节点功能示例
Jan 24 Python
使用python list 查找所有匹配元素的位置实例
Jun 11 Python
python3注册全局热键的实现
Mar 22 Python
python可视化 matplotlib画图使用colorbar工具自定义颜色
Dec 07 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函数spl_autoload_register()用法和__autoload()介绍
2012/02/04 PHP
提高PHP编程效率的方法
2013/11/07 PHP
PHP高手需要要掌握的知识点
2014/08/21 PHP
WordPress中登陆后关闭登陆页面及设置用户不可见栏目
2015/12/31 PHP
laravel-admin解决表单select联动时,编辑默认没选上的问题
2019/09/30 PHP
php计数排序算法的实现代码(附四个实例代码)
2020/03/31 PHP
JS 拼图游戏 面向对象,注释完整。
2009/06/18 Javascript
基于jquery的一个简单的脚本验证插件
2010/04/05 Javascript
基于jQuery的的一个隔行变色,鼠标移动变色的小插件
2010/07/06 Javascript
jquery阻止后续事件只执行第一个事件
2014/07/24 Javascript
一个不错的仿携程自定义数据下拉选择select
2014/09/01 Javascript
JavaScript中数据结构与算法(五):经典KMP算法
2015/06/19 Javascript
JavaScript文档碎片操作实例分析
2015/12/12 Javascript
jquery之别踩白块游戏的简单实现
2016/07/25 Javascript
微信小程序实现多宫格抽奖活动
2020/04/15 Javascript
JavaScript实现的超简单计算器功能示例
2017/12/23 Javascript
Vue 菜单栏点击切换单个class(高亮)的方法
2018/08/22 Javascript
node.js的Express服务器基本使用教程
2019/01/09 Javascript
JS立即执行的匿名函数用法分析
2019/11/04 Javascript
javascript实现移动端轮播图
2020/12/09 Javascript
python实现的各种排序算法代码
2013/03/04 Python
python引入导入自定义模块和外部文件的实例
2017/07/24 Python
Python2与python3中 for 循环语句基础与实例分析
2017/11/20 Python
六行python代码的爱心曲线详解
2019/05/17 Python
Django网络框架之创建虚拟开发环境操作示例
2019/06/06 Python
python cumsum函数的具体使用
2019/07/29 Python
Python实现投影法分割图像示例(二)
2020/01/17 Python
纯CSS和jQuery实现的在页面顶部显示的进度条效果2例(仿手机浏览器进度条效果)
2014/04/16 HTML / CSS
英国最大的女性服装零售商:Dorothy Perkins
2017/03/30 全球购物
迪士尼英国官方商店:shopDisney UK
2019/09/21 全球购物
澳大利亚在线奢侈品时尚零售平台:Azura Runway
2021/01/13 全球购物
大学生应聘自荐信
2013/10/11 职场文书
2015年毕业生实习评语
2015/03/25 职场文书
爱国主义教育主题班会
2015/08/13 职场文书
曾国藩励志经典名言37句,蕴含哲理
2019/10/14 职场文书
如何利用python创作字符画
2022/06/25 Python