今天训练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中使用cuda扩展的实现示例,包括了pytorch中使用cuda扩展的实现示例的使用技巧和注意事项,需要的朋友参考一下 以下面这个例子作为教程,实现功能是element-wise add; (pytorch中想调用cuda模块,还是用另外使用C编写接口脚本) 第一步:cuda编程的源文件和头文件 第二步:C编程的源文件和头文件(接口函数) 第三步:编译,先编译cuda模
本文向大家介绍Pytorch的mean和std调查实例,包括了Pytorch的mean和std调查实例的使用技巧和注意事项,需要的朋友参考一下 如下所示: 结论: 下面调查均值文件和方差文件是如何生成的: 结果: 使用matlab检测是如何计算mean_file和std_file的: 均值计算的过程也可以遵循标准差的计算过程。为 了简单,例如对于一个矩阵,所有元素的均值,等于两个方向上先后均值。所
问题内容: 我想知道是否正在使用我的GPU。在此过程中,可以检测是否有来自GPU的任何活动,但是我想要在脚本中编写一些东西。 有办法吗? 问题答案: 这将起作用: 这告诉我GPU正在被使用。
本文向大家介绍在pytorch中查看可训练参数的例子,包括了在pytorch中查看可训练参数的例子的使用技巧和注意事项,需要的朋友参考一下 pytorch中我们有时候可能需要设定某些变量是参与训练的,这时候就需要查看哪些是可训练参数,以确定这些设置是成功的。 pytorch中model.parameters()函数定义如下: 所以,我们可以遍历named_parameters()中的所有的参数,只
问题内容: 我的代码需要读取所有文件。目前,我正在使用以下代码: 但是,如果文件当前为空,则为null,这是不好的。有没有一个具有方法或等同? 问题答案: 您尝试执行的标准模式是:
系统: ios 不发布到线上, 只是本存在本地的html文件, 通过PC微信发到手机微信上, 那么在手机端应该如何解析这个html文件? 如果这个html里面引入了外部的css和js, 那么可能就不单单只是一个html文件了, 传到微信的就可能是一个压缩包, 这种情况下还能解析码?