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 相关文章推荐
pygame学习笔记(2):画点的三种方法和动画实例
Apr 15 Python
分享给Python新手们的几道简单练习题
Sep 21 Python
Python将多份excel表格整理成一份表格
Jan 03 Python
python 将字符串转换成字典dict的各种方式总结
Mar 23 Python
解决Django数据库makemigrations有变化但是migrate时未变动问题
May 30 Python
Python闭包思想与用法浅析
Dec 27 Python
python开发之anaconda以及win7下安装gensim的方法
Jul 05 Python
如何获取Python简单for循环索引
Nov 21 Python
Python爬虫获取页面所有URL链接过程详解
Jun 04 Python
Python计算矩阵的和积的实例详解
Sep 10 Python
Python提取视频中图片的示例(按帧、按秒)
Oct 22 Python
python实现ping命令小程序
Dec 28 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
一个可以找出源代码中所有中文的工具
2006/10/25 PHP
php调用google接口生成二维码示例
2014/04/28 PHP
php实现简单的语法高亮函数实例分析
2015/04/27 PHP
php源码分析之DZX1.5随机数函数random用法
2015/06/17 PHP
ThinkPHP3.2框架使用addAll()批量插入数据的方法
2017/03/16 PHP
PHP观察者模式定义与用法实例分析
2019/03/22 PHP
浅谈Laravel模板实体转义带来的坑
2019/10/22 PHP
js计算字符串长度包含的中文是utf8格式
2013/10/15 Javascript
js格式化时间小结
2014/11/03 Javascript
jQuery中:file选择器用法实例
2015/01/04 Javascript
Javascript基于AJAX回调函数传递参数实例分析
2015/12/15 Javascript
JAVA Web实时消息后台服务器推送技术---GoEasy
2016/11/04 Javascript
AngularJS的ng-repeat指令与scope继承关系实例详解
2017/01/21 Javascript
js实现倒计时关键代码
2017/05/05 Javascript
iframe与主框架跨域相互访问实现方法
2017/09/14 Javascript
js中getBoundingClientRect的作用及兼容方案详解
2018/02/01 Javascript
create-react-app安装出错问题解决方法
2018/09/04 Javascript
JSON生成Form表单的方法示例
2018/11/21 Javascript
javascript系统时间设置操作示例
2019/06/17 Javascript
vue从一个页面跳转到另一个页面并携带参数的解决方法
2019/08/12 Javascript
jQuery实现图片切换效果
2020/10/19 jQuery
[01:56]《DOTA2》中文配音CG
2013/04/22 DOTA
[01:59]游戏“zheng”当时试玩会
2019/08/21 DOTA
python3 遍历删除特定后缀名文件的方法
2018/04/23 Python
python的依赖管理的实现
2019/05/14 Python
python 抓取知乎指定回答下视频的方法
2020/07/09 Python
Ann Taylor官方网站:美国最大的女性产品制造商之一
2016/09/14 全球购物
德国网上超市:myTime.de
2019/08/26 全球购物
财务方面个人工作的自我评价
2013/12/28 职场文书
党员批评与自我批评范文
2014/09/23 职场文书
教师党员承诺书2015
2015/01/21 职场文书
2016三严三实专题教育活动心得体会
2016/01/06 职场文书
合同补充协议书
2016/03/24 职场文书
详解JS ES6编码规范
2021/05/07 Javascript
Windows Server 2012 修改远程默认端口3389的方法
2022/04/28 Servers
3050和2060哪个好 性能差多少 差距有多大 谁更有性价比
2022/06/17 数码科技