pytorch 限制GPU使用效率详解(计算效率)


Posted in Python onJune 27, 2020

问题

用过 tensorflow 的人都知道, tf 可以限制程序在 GPU 中的使用效率,但 pytorch 中没有这个操作。

思路

于是我想到了一个代替方法,玩过单片机点灯的同学都知道,灯的亮度是靠占空比实现的,这实际上也是计算机的运行原理。 那我们是不是也可以通过增加 GPU 不工作的时间,进而降低 GPU 的使用效率 ?

主要代码

import time
...
rest_time = 0.15
...
for _ in range( XXX ):
  ...
  outputs = all_GPU_operations( data_set ) # 假设所有的GPU运算都在这里
  time.sleep( rest_time )         # 让显卡休息一会再进行下个循环的使用
  ...
...

这样子 GPU 的使用效率就可以减小了。

rest_time 的越大 GPU 使用率越低,rest_time 的越小 GPU 使用率越高。

缺点是很难直接控制 GPU 的具体使用率,rest_time 得自己调试后确定。

补充知识:深度学习PyTorch,TensorFlow中GPU利用率较低,使用率周期性变化的问题

在用tensorflow训练神经网络时,发现训练迭代的速度时而快时而慢,监督的GPU使用率也是周期性变化,通过了解,发现原因是:

GPU在等待CPU读取,预处理,并传输数据过来,因此要提高GPU的使用率,降低GPU的等待时间,需要加快CPU的处理速度.

在PYTORCH中的解决方案是用torch.utils.data.DataLoader,用num_workers设置线程数:

torch.utils.data.DataLoader(image_datasets[x],
  batch_size=batch_size,
   shuffle=True,
   num_workers=8,
  pin_memory=True)

在tensorflow中的解决方案是用tf.data.Dataset.map(num_parallel_calls=8)中的num_parallel_calls设置读取数据的线程数:

用 tf.data读取数据, tf.data.Dataset中有一个map函数,它有个num_parallel_calls参数,可以控制CPU的线程,加快数据的读取速度,一般将线程设置为8效果最好.

以上这篇pytorch 限制GPU使用效率详解(计算效率)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
使用Python操作excel文件的实例代码
Oct 15 Python
pandas数据清洗,排序,索引设置,数据选取方法
May 18 Python
spark: RDD与DataFrame之间的相互转换方法
Jun 07 Python
python之文件读取一行一行的方法
Jul 12 Python
Django中使用第三方登录的示例代码
Aug 20 Python
python 使用re.search()筛选后 选取部分结果的方法
Nov 28 Python
Python为何不能用可变对象作为默认参数的值
Jul 01 Python
Python用字典构建多级菜单功能
Jul 11 Python
Python matplotlib绘制饼状图功能示例
Sep 10 Python
Keras自定义IOU方式
Jun 10 Python
在Keras中CNN联合LSTM进行分类实例
Jun 29 Python
Django对接elasticsearch实现全文检索的示例代码
Aug 02 Python
Pytorch 高效使用GPU的操作
Jun 27 #Python
Keras中的两种模型:Sequential和Model用法
Jun 27 #Python
keras输出预测值和真实值方式
Jun 27 #Python
使用Keras预训练好的模型进行目标类别预测详解
Jun 27 #Python
浅谈keras 模型用于预测时的注意事项
Jun 27 #Python
python suds访问webservice服务实现
Jun 26 #Python
解析Python 偏函数用法全方位实现
Jun 26 #Python
You might like
为什么夜间收到的中波电台比白天多
2021/03/01 无线电
一步一步学习PHP(4) php 函数 补充2
2010/02/15 PHP
php实现微信公众平台账号自定义菜单类
2015/10/11 PHP
laravel实现图片上传预览,及编辑时可更换图片,并实时变化的例子
2019/11/14 PHP
php输出形式实例整理
2020/05/05 PHP
xss文件页面内容读取(解决)
2010/11/28 Javascript
jquery ui dialog ie8出现滚动条的解决方法
2010/12/06 Javascript
jQuery调取jSon数据并展示的方法
2015/01/29 Javascript
react.js 获取真实的DOM节点实例(必看)
2017/04/17 Javascript
JS实现图片点击后出现模态框效果
2017/05/03 Javascript
jquery实现企业定位式导航效果
2018/01/01 jQuery
jQuery 获取除某指定对象外的其他对象 ( :not() 与.not())
2018/10/10 jQuery
sortable+element 实现表格行拖拽的方法示例
2019/06/07 Javascript
通过实例了解js函数中参数的传递
2019/06/15 Javascript
JS数组splice操作实例分析
2019/10/12 Javascript
vue.js实现简单购物车功能
2020/05/30 Javascript
Django中对通过测试的用户进行限制访问的方法
2015/07/23 Python
Python爬虫抓取手机APP的传输数据
2016/01/22 Python
Python实现发送QQ邮件的封装
2017/07/14 Python
Python利用itchat对微信中好友数据实现简单分析的方法
2017/11/21 Python
Python pyinotify日志监控系统处理日志的方法
2018/03/08 Python
python 采用paramiko 远程执行命令及报错解决
2019/10/21 Python
PyCharm 2020 激活到 2100 年的教程
2020/03/25 Python
python 实现简易的记事本
2020/11/30 Python
GUESS德国官网:美国牛仔服装品牌
2017/02/14 全球购物
英国婴儿和儿童服装网站:Vertbaudet
2018/04/02 全球购物
荷兰度假屋租赁网站:Aan Zee
2020/02/28 全球购物
乌克兰数字设备、配件和智能技术的连锁商店:KTC
2020/08/18 全球购物
J2SDK1.5与J2SDK5.0有什么区别
2012/09/19 面试题
项目资料员岗位职责
2013/12/10 职场文书
图书馆标语
2014/06/19 职场文书
2014年技术部工作总结
2014/12/12 职场文书
西游降魔篇观后感
2015/06/15 职场文书
运动会闭幕式致辞
2015/07/29 职场文书
公司费用报销管理制度
2015/08/04 职场文书
Vue的过滤器你真了解吗
2022/02/24 Vue.js