Pytorch GPU内存占用很高,但是利用率很低如何解决


Posted in Python onJune 01, 2021

1.GPU 占用率,利用率

输入nvidia-smi来观察显卡的GPU内存占用率(Memory-Usage),显卡的GPU利用率(GPU-util)

GPU内存占用率(Memory-Usage) 往往是由于模型的大小以及batch size的大小,来影响这个指标 显卡的GPU利用率(GPU-util) 往往跟代码有关,有更多的io运算,cpu运算就会导致利用率变低。

比如打印loss, 输出图像,等等

Pytorch GPU内存占用很高,但是利用率很低如何解决

这个时候发现,有一块卡的利用率经常跳到1%,而其他三块卡经常维持在70%以上

2.原因分析

当没有设置好CPU的线程数时,Volatile GPU-Util参数是在反复的跳动的,0%,20%,70%,95%,0%。

这样停息1-2 秒然后又重复起来。其实是GPU在等待数据从CPU传输过来,当从总线传输到GPU之后,GPU逐渐起计算来,利用率会突然升高,但是GPU的算力很强大,0.5秒就基本能处理完数据,所以利用率接下来又会降下去,等待下一个batch的传入。

因此,这个GPU利用率瓶颈在内存带宽和内存介质上以及CPU的性能上面。

最好当然就是换更好的四代或者更强大的内存条,配合更好的CPU。

3.解决方法:

(1)为了提高利用率,首先要将num_workers(线程数)设置得体,4,8,16是几个常选的几个参数。本人测试过,将num_workers设置的非常大,例如,24,32,等,其效率反而降低,因为模型需要将数据平均分配到几个子线程去进行预处理,分发等数据操作,设高了反而影响效率。当然,线程数设置为1,是单个CPU来进行数据的预处理和传输给GPU,效率也会低。其次,当你的服务器或者电脑的内存较大,性能较好的时候,建议打开pin_memory打开,就省掉了将数据从CPU传入到缓存RAM里面,再给传输到GPU上;为True时是直接映射到GPU的相关内存块上,省掉了一点数据传输时间。

(2) 另外的一个方法是,在PyTorch这个框架里面,数据加载Dataloader上做更改和优化,包括num_workers(线程数),pin_memory,会提升速度。解决好数据传输的带宽瓶颈和GPU的运算效率低的问题。在TensorFlow下面,也有这个加载数据的设置。

(3) 修改代码(我遇到的问题)

每个iteration 都写文件了,这个就会导致cpu 一直运算,GPU 等待

Pytorch GPU内存占用很高,但是利用率很低如何解决

造成GPU利用率低还有其他原因

1. CPU数据读取更不上:读到内存+多线程+二进制文件(比如tf record)

2. GPU温度过高,使用功率太大:每次少用几个GPU,降低功耗(但是多卡的作用何在?)

以上为个人经验,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python的爬虫程序编写框架Scrapy入门学习教程
Jul 02 Python
python搭建虚拟环境的步骤详解
Sep 27 Python
有趣的python小程序分享
Dec 05 Python
python 将字符串转换成字典dict的各种方式总结
Mar 23 Python
Django 浅谈根据配置生成SQL语句的问题
May 29 Python
对numpy中二进制格式的数据存储与读取方法详解
Nov 01 Python
对Python中plt的画图函数详解
Nov 07 Python
Python 实现中值滤波、均值滤波的方法
Jan 09 Python
Python代码实现删除一个list里面重复元素的方法
Apr 02 Python
pytorch标签转onehot形式实例
Jan 02 Python
python生成并处理uuid的实现方式
Mar 03 Python
使用python实现下载我们想听的歌曲,速度超快
Jul 09 Python
Python爬取英雄联盟MSI直播间弹幕并生成词云图
如何判断pytorch是否支持GPU加速
Jun 01 #Python
pytorch 两个GPU同时训练的解决方案
Jun 01 #Python
使用Django实现商城验证码模块的方法
Jun 01 #Python
pytorch通过训练结果的复现设置随机种子
Jun 01 #Python
matplotlib画混淆矩阵与正确率曲线的实例代码
Jun 01 #Python
详细介绍python类及类的用法
You might like
在任意字符集下正常显示网页的方法一
2007/04/01 PHP
PHP中ini_set和ini_get函数的用法小结
2014/02/18 PHP
让你的PHP7更快之Hugepage用法分析
2016/05/31 PHP
php使用escapeshellarg时中文被过滤的解决方法
2016/07/10 PHP
Centos 6.5下PHP 5.3安装ffmpeg扩展的步骤详解
2017/03/02 PHP
PHP实现动态获取函数参数的方法示例
2018/04/02 PHP
PHP中的自动加载操作实现方法详解
2019/08/06 PHP
使用jQuery向asp.net Mvc传递复杂json数据-ModelBinder篇
2010/05/07 Javascript
java与javascript之间json格式数据互转介绍
2013/10/29 Javascript
jQuery使用hide方法隐藏指定元素class样式用法实例
2015/03/30 Javascript
简述AngularJS的控制器的使用
2015/06/16 Javascript
JavaScript Array对象详解
2016/03/01 Javascript
JavaScript必知必会(三) String .的方法来自何方
2016/06/08 Javascript
微信小程序富文本渲染引擎的详解
2017/09/30 Javascript
Layui 设置select下拉框自动选中某项的方法
2018/08/14 Javascript
js实现跳一跳小游戏
2020/07/31 Javascript
vue-simple-uploader上传成功之后的response获取代码
2020/09/07 Javascript
[00:52]DOTA2国际邀请赛
2020/02/21 DOTA
Python复制目录结构脚本代码分享
2015/03/06 Python
python中随机函数random用法实例
2015/04/30 Python
5种Python单例模式的实现方式
2016/01/14 Python
分享8个非常流行的 Python 可视化工具包
2019/06/05 Python
移动端Web页面的CSS3 flex布局快速上手指南
2016/05/31 HTML / CSS
详解CSS3媒体查询响应式布局bootstrap 框架原理实战(推荐)
2020/11/16 HTML / CSS
Clarins娇韵诗美国官网:法国天然护肤品牌
2016/09/26 全球购物
1688平价精选商城:阿里集团旗下,工厂出厂价格直销
2017/04/24 全球购物
英国外籍人士的在线超市:British Corner Shop
2019/06/03 全球购物
日语专业求职信
2014/07/04 职场文书
装饰技术负责人岗位职责
2015/04/13 职场文书
奖励申请报告范文
2015/05/15 职场文书
学习委员竞选稿
2015/11/20 职场文书
《山中访友》教学反思
2016/02/24 职场文书
2016孝老爱亲模范事迹材料
2016/02/26 职场文书
用 Python 元类的特性实现 ORM 框架
2021/05/19 Python
告别网页搜索!教你用python实现一款属于自己的翻译词典软件
2021/06/03 Python
JDK8中String的intern()方法实例详细解读
2022/09/23 Java/Android