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复制文件操作实例详解
Nov 10 Python
CentOS 6.5中安装Python 3.6.2的方法步骤
Dec 03 Python
TensorFlow实现非线性支持向量机的实现方法
Apr 28 Python
Python中利用xpath解析HTML的方法
May 14 Python
Python批处理更改文件名os.rename的方法
Oct 26 Python
对Python3 pyc 文件的使用详解
Feb 16 Python
利用Python进行图像的加法,图像混合(附代码)
Jul 14 Python
python 3.74 运行import numpy as np 报错lib\site-packages\numpy\__init__.py
Oct 06 Python
Python二元赋值实用技巧解析
Oct 25 Python
Python 中使用 PyMySQL模块操作数据库的方法
Nov 10 Python
解决Django响应JsonResponse返回json格式数据报错问题
Aug 09 Python
python 利用openpyxl读取Excel表格中指定的行或列教程
Feb 06 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二分查找二种实现示例
2014/03/12 PHP
yii的CURD操作实例详解
2014/12/04 PHP
PHP保存带BOM文件的方法
2015/02/12 PHP
TP5框架实现一次选择多张图片并预览的方法示例
2020/04/04 PHP
理解Javascript_08_函数对象
2010/10/15 Javascript
javascript权威指南 学习笔记之变量作用域分享
2011/09/28 Javascript
JavaScript NaN和Infinity特殊值 [译]
2012/09/20 Javascript
JavaScript创建一个欢迎cookie弹出窗实现代码
2013/03/15 Javascript
JS简单实现元素复制示例附图
2013/11/19 Javascript
js获取日期:昨天今天和明天、后天
2014/06/11 Javascript
jQuery简单实现禁用右键菜单
2015/03/10 Javascript
Bootstrap基本样式学习笔记之表格(2)
2016/12/07 Javascript
vue.js指令和组件详细介绍及实例
2017/04/06 Javascript
js+html5实现半透明遮罩层弹框效果
2020/08/24 Javascript
Vue-cropper 图片裁剪的基本原理及思路讲解
2018/04/17 Javascript
微信小程序日历组件使用方法详解
2018/12/29 Javascript
详解vue中this.$emit()的返回值是什么
2019/04/07 Javascript
Javascript实现鼠标移入方向感知
2020/06/24 Javascript
python实现逆序输出一个数字的示例讲解
2018/06/25 Python
详解Django3中直接添加Websockets方式
2020/02/12 Python
Python sklearn库实现PCA教程(以鸢尾花分类为例)
2020/02/24 Python
自定义Django Form中choicefield下拉菜单选取数据库内容实例
2020/03/13 Python
Python实现常见的几种加密算法(MD5,SHA-1,HMAC,DES/AES,RSA和ECC)
2020/05/09 Python
澳大利亚人信任的清洁平台,您的私人管家:Jarvis
2020/12/25 全球购物
乌克兰网上珠宝商店:GoldSoveren
2020/03/31 全球购物
物业管理员岗位职责范文
2013/11/25 职场文书
《再见了,亲人》教学反思
2014/02/26 职场文书
高中班级口号
2014/06/09 职场文书
银行贷款委托书范本
2014/10/11 职场文书
信息简报范文
2015/07/21 职场文书
大队委员竞选演讲稿
2015/11/20 职场文书
导游词之新疆-喀纳斯
2019/10/10 职场文书
fastdfs+nginx集群搭建的实现
2021/03/31 Servers
SQL实现LeetCode(197.上升温度)
2021/08/07 MySQL
Qt自定义Plot实现曲线绘制的详细过程
2021/11/02 Python
Redis特殊数据类型Geospatial地理空间
2022/06/01 Redis