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中的字符串与字符编码(推荐)
Dec 14 Python
python 判断是否为正小数和正整数的实例
Jul 23 Python
python的mysqldb安装步骤详解
Aug 14 Python
Python内置函数—vars的具体使用方法
Dec 04 Python
使用Python制作微信跳一跳辅助
Jan 31 Python
python获取指定字符串中重复模式最高的字符串方法
Jun 29 Python
Python 爬虫之Beautiful Soup模块使用指南
Jul 05 Python
用Python写一个模拟qq聊天小程序的代码实例
Mar 06 Python
python实现弹跳小球
May 13 Python
Python如何实现小程序 无限求和平均
Feb 18 Python
Python如何获取文件指定行的内容
May 27 Python
如何使用pdb进行Python调试
Jun 30 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
PHP session有效期session.gc_maxlifetime
2011/04/20 PHP
PHP调用Webservice实例代码
2011/07/29 PHP
php中Socket创建与监听实现方法
2015/01/05 PHP
PHP上传文件参考配置大文件上传
2015/12/16 PHP
php apache开启跨域模式过程详解
2019/07/08 PHP
写给想学习Javascript的朋友一点学习经验小结
2010/11/23 Javascript
javascript实现博客园页面右下角返回顶部按钮
2015/02/22 Javascript
js实现每日自动换一张图片的方法
2015/05/04 Javascript
详细解读JavaScript的跨浏览器事件处理
2015/08/12 Javascript
基于Jquery easyui 选中特定的tab
2015/11/17 Javascript
微信小程序前端源码逻辑和工作流
2016/09/25 Javascript
jQuery中get方法用法分析
2016/12/07 Javascript
JS实现图片垂直居中显示小结
2016/12/13 Javascript
JS设置CSS样式的方式汇总
2017/01/21 Javascript
详谈Angular路由与Nodejs路由的区别
2017/03/05 NodeJs
node.js中使用Export和Import的方法
2017/09/18 Javascript
vue.js前后端数据交互之提交数据操作详解
2018/04/24 Javascript
详解vue-cli3使用
2018/08/14 Javascript
vuejs移动端实现div拖拽移动
2019/07/25 Javascript
JavaScript实现放大镜效果代码示例
2020/04/29 Javascript
Python中用max()方法求最大值的介绍
2015/05/15 Python
Python numpy实现二维数组和一维数组拼接的方法
2018/06/05 Python
Python实现针对json中某个关键字段进行排序操作示例
2018/12/25 Python
python图片二值化提高识别率代码实例
2019/08/24 Python
python实现将两个文件夹合并至另一个文件夹(制作数据集)
2020/04/03 Python
PyQt5结合matplotlib绘图的实现示例
2020/09/15 Python
amazeui时间组件的实现示例
2020/08/18 HTML / CSS
行政文员岗位职责
2013/11/08 职场文书
《风筝》教学反思
2014/04/10 职场文书
船舶工程技术专业求职信
2014/08/07 职场文书
镇党政领导班子民主生活会思想汇报
2014/10/11 职场文书
健康状况证明模板
2014/10/23 职场文书
租车协议书范本2014
2014/11/17 职场文书
2015年教师党员个人总结
2015/11/24 职场文书
2019广播稿怎么写
2019/04/17 职场文书
Nginx 路由转发和反向代理location配置实现
2021/11/11 Servers