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学习资料
Feb 08 Python
更改Python命令行交互提示符的方法
Jan 14 Python
Python 实现一个颜色色值转换的小工具
Dec 06 Python
python 禁止函数修改列表的实现方法
Aug 03 Python
使用Python做定时任务及时了解互联网动态
May 15 Python
对Django中static(静态)文件详解以及{% static %}标签的使用方法
Jul 28 Python
Anaconda 查看、创建、管理和使用python环境的方法
Dec 03 Python
使用TensorFlow对图像进行随机旋转的实现示例
Jan 20 Python
python json.dumps中文乱码问题解决
Apr 01 Python
Python如何发送与接收大型数组
Aug 07 Python
python 读取yaml文件的两种方法(在unittest中使用)
Dec 01 Python
Python实现生成bmp图像的方法
Jun 13 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
构建简单的Webmail系统
2006/10/09 PHP
PHP中Date获取时间不正确怎么办
2008/06/05 PHP
php 从数据库提取二进制图片的处理代码
2009/09/09 PHP
destoon数据库表说明汇总
2014/07/15 PHP
Zend Framework教程之Zend_Controller_Plugin插件用法详解
2016/03/07 PHP
PHP标准类(stdclass)用法示例
2016/09/28 PHP
PHP多维数组排序array详解
2017/11/21 PHP
javascript void(0)的妙用
2009/10/21 Javascript
js调用iframe实现打印页面内容的方法
2014/03/04 Javascript
javascript数组去重的六种方法汇总
2015/08/16 Javascript
Jquery插件之Fancybox丰富的弹出层效果附源码下载
2015/12/02 Javascript
jQuery+HTML5实现弹出创意搜索框层
2016/12/29 Javascript
基于JSONP原理解析(推荐)
2017/12/04 Javascript
vue slot 在子组件中显示父组件传递的模板
2018/03/02 Javascript
layer弹出层 iframe层去掉滚动条的实例代码
2018/08/17 Javascript
通过javascript实现段落的收缩与展开
2019/06/26 Javascript
js实现掷骰子小游戏
2019/10/24 Javascript
Vue+ElementUI table实现表格分页
2019/12/14 Javascript
JS函数进阶之继承用法实例分析
2020/01/15 Javascript
JavaScript ES6 Class类实现原理详解
2020/05/08 Javascript
ES6字符串的扩展实例
2020/12/21 Javascript
[01:07:20]DOTA2-DPC中国联赛 正赛 Dynasty vs XG BO3 第二场 2月2日
2021/03/11 DOTA
python实现类似ftp传输文件的网络程序示例
2014/04/08 Python
python实现将汉字转换成汉语拼音的库
2015/05/05 Python
Python Paramiko模块的安装与使用详解
2016/11/18 Python
Windows 8.1 64bit下搭建 Scrapy 0.22 环境
2018/11/18 Python
Python日志logging模块功能与用法详解
2020/04/09 Python
上海奥佳笔试题面试题
2016/11/16 面试题
TCP/IP模型的分界线
2012/12/01 面试题
C#如何判断当前用户是否输入某个域
2015/12/07 面试题
抽奖活动主持词
2014/03/31 职场文书
幼儿园保育员岗位职责
2014/04/13 职场文书
幼儿园小班教师随笔
2015/08/14 职场文书
创业计划书之校园跑腿公司
2019/09/24 职场文书
Redis6.0搭建集群Redis-cluster的方法
2021/05/08 Redis
SpringBoot实现异步事件驱动的方法
2021/06/28 Java/Android