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 条件判断的缩写方法
Sep 06 Python
Python中为feedparser设置超时时间避免堵塞
Sep 28 Python
python装饰器decorator介绍
Nov 21 Python
Python函数可变参数定义及其参数传递方式实例详解
May 25 Python
Python下rrdtool模块的基本使用方法
Nov 13 Python
python正则中最短匹配实现代码
Jan 16 Python
python利用插值法对折线进行平滑曲线处理
Dec 25 Python
Python 堆叠柱状图绘制方法
Jul 29 Python
PyQt5使用QTimer实现电子时钟
Jul 29 Python
Python 在函数上添加包装器
Jul 28 Python
Scrapy中如何向Spider传入参数的方法实现
Sep 28 Python
Python面向对象之成员相关知识总结
Jun 24 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
人族 Terran 魔法与科技
2020/03/14 星际争霸
PHP中的reflection反射机制测试例子
2014/08/05 PHP
php实现事件监听与触发的方法
2014/11/21 PHP
PHP发送AT指令实例代码
2016/05/26 PHP
基于php中echo用逗号和用点号的区别详解
2018/01/23 PHP
PHP获取当前时间不准确问题解决方案
2020/08/14 PHP
使用jquery实现放大镜效果
2014/09/02 Javascript
js获取字符串字节数方法小结
2015/06/09 Javascript
js+css实现有立体感的按钮式文字竖排菜单效果
2015/09/01 Javascript
javascript实现随机生成DIV背景色
2016/06/20 Javascript
AngularJS 过滤器(自带和自建)详解
2016/09/19 Javascript
AngularJS 应用身份认证的技巧总结
2016/11/07 Javascript
js调用屏幕宽度的简单方法
2016/11/14 Javascript
js 中文汉字转Unicode、Unicode转中文汉字、ASCII转换Unicode、Unicode转换ASCII、中文转换
2016/12/06 Javascript
JS实现点击Radio动态更新table数据
2017/07/18 Javascript
浅谈vue,angular,react数据双向绑定原理分析
2017/11/28 Javascript
小程序自定义日历效果
2018/12/29 Javascript
vue实现带过渡效果的下拉菜单功能
2020/02/19 Javascript
jQuery实现放大镜案例
2020/10/19 jQuery
用OpenCV将视频分解成单帧图片,图片合成视频示例
2019/12/10 Python
使用keras框架cnn+ctc_loss识别不定长字符图片操作
2020/06/29 Python
python中查看.db文件中表格的名字及表格中的字段操作
2020/07/07 Python
Python通用唯一标识符uuid模块使用案例
2020/09/10 Python
纯CSS3实现的8种Loading动画效果
2014/07/05 HTML / CSS
用HTML5制作视频拼图的教程
2015/05/13 HTML / CSS
Canvas高级路径操作之拖拽对象的实现
2019/08/05 HTML / CSS
Revolution Beauty美国官网:英国知名化妆品网站
2018/07/23 全球购物
美国领先的家庭健康检测试剂盒提供商:LetsGetChecked
2019/03/18 全球购物
后备干部考察材料
2014/02/12 职场文书
中式结婚主持词
2014/03/14 职场文书
2014年创先争优活动总结
2014/05/04 职场文书
关于运动会广播稿200字
2014/10/08 职场文书
离职报告范文
2014/11/04 职场文书
工作表扬信范文
2015/01/17 职场文书
安全生产标语口号
2015/12/26 职场文书
MYSQL主从数据库同步备份配置的方法
2021/05/26 MySQL