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 相关文章推荐
详解如何用OpenCV + Python 实现人脸识别
Oct 20 Python
python决策树之CART分类回归树详解
Dec 20 Python
python cs架构实现简单文件传输
Mar 20 Python
解决Pycharm出现的部分快捷键无效问题
Oct 22 Python
使用python list 查找所有匹配元素的位置实例
Jun 11 Python
Flask框架模板渲染操作简单示例
Jul 31 Python
python 批量修改 labelImg 生成的xml文件的方法
Sep 09 Python
tensorflow之获取tensor的shape作为max_pool的ksize实例
Jan 04 Python
Python图片处理模块PIL操作方法(pillow)
Apr 07 Python
Python二元算术运算常用方法解析
Sep 15 Python
详解Python中第三方库Faker
Sep 25 Python
使用Python+OpenCV进行卡类型及16位卡号数字的OCR功能
Aug 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
在Windows系统上安装PHP运行环境文字教程
2010/07/19 PHP
PHP导出EXCEL快速开发指南--PHPEXCEL的使用详解
2013/06/03 PHP
简单的cookie计数器实现源码
2013/06/07 PHP
浅析Yii2中GridView常见操作
2016/04/22 PHP
form表单传递数组数据、php脚本接收的实例
2017/02/09 PHP
cakephp2.X多表联合查询join及使用分页查询的方法
2017/02/23 PHP
硬盘浏览程序,保存成网页格式便可使用
2006/12/03 Javascript
将字符串转换成gb2312或者utf-8编码的参数(js版)
2013/04/10 Javascript
javascript简单事件处理和with用法介绍
2013/09/16 Javascript
使用js写的一个简易的投票
2013/11/27 Javascript
jQuery中的val()示例应用
2014/02/26 Javascript
jQuery中ajax的get()方法用法实例
2014/12/26 Javascript
node.js操作mysql(增删改查)
2015/07/24 Javascript
js弹出对话框方式小结
2015/11/17 Javascript
Bootstrap CSS组件之按钮下拉菜单
2016/12/17 Javascript
NodeJS、NPM安装配置步骤(windows版本) 以及环境变量详解
2017/05/13 NodeJs
vuex 项目结构目录及一些简单配置介绍
2018/04/08 Javascript
vue柱状进度条图像的完美实现方案
2019/08/26 Javascript
v-slot和slot、slot-scope之间相互替换实例
2020/09/04 Javascript
python通过scapy获取局域网所有主机mac地址示例
2014/05/04 Python
python模拟鼠标拖动操作的方法
2015/03/11 Python
Redis使用watch完成秒杀抢购功能的代码
2018/05/07 Python
Python3显示当前时间、计算时间差及时间加减法示例代码
2019/09/07 Python
django ajax发送post请求的两种方法
2020/01/05 Python
简单了解python filter、map、reduce的区别
2020/01/14 Python
解决python对齐错误的方法
2020/07/16 Python
python生成xml时规定dtd实例方法
2020/09/21 Python
关于VPN
2012/06/10 面试题
物流管理专业毕业生自荐信
2014/03/04 职场文书
教师远程培训感言
2014/03/06 职场文书
人代会简报
2015/07/21 职场文书
公司环境卫生管理制度
2015/08/05 职场文书
Mac环境Nginx配置和访问本地静态资源的实现
2021/03/31 Servers
Python数据分析入门之数据读取与存储
2021/05/13 Python
Python实现PIL图像处理库绘制国际象棋棋盘
2021/07/16 Python
在Windows Server 2012上安装 .NET Framework 3.5 所遇到的问题
2022/04/29 Servers