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 相关文章推荐
Linux下使用python调用top命令获得CPU利用率
Mar 10 Python
Python字典及字典基本操作方法详解
Jan 30 Python
python实现聚类算法原理
Feb 12 Python
Python实现将json文件中向量写入Excel的方法
Mar 26 Python
浅谈python编译pyc工程--导包问题解决
Mar 20 Python
Python pandas自定义函数的使用方法示例
Nov 20 Python
Python3.7黑帽编程之病毒篇(基础篇)
Feb 04 Python
python爬虫开发之使用Python爬虫库requests多线程抓取猫眼电影TOP100实例
Mar 10 Python
Python实现计算图像RGB均值方式
Jun 04 Python
Python读取Excel数据并生成图表过程解析
Jun 18 Python
Python max函数中key的用法及原理解析
Jun 26 Python
python常见的占位符总结及用法
Jul 02 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
PHP实现数组array转换成xml的方法
2016/07/19 PHP
PHP实现抽奖功能实例代码
2020/06/30 PHP
深入聊聊Array的sort方法的使用技巧.详细点评protype.js中的sortBy方法
2007/04/12 Javascript
jQuery AnythingSlider滑动效果插件
2010/02/07 Javascript
JS、CSS以及img对DOMContentLoaded事件的影响
2014/08/12 Javascript
javascript实现数独解法
2015/03/14 Javascript
jquery制作图片时钟特效
2020/03/30 Javascript
AngularJs动态加载模块和依赖注入详解
2016/01/11 Javascript
关于react-router/react-router-dom v4 history不能访问问题的解决
2018/01/08 Javascript
mpvue写一个CPASS小程序的示例
2018/09/04 Javascript
nodejs中实现修改用户路由功能
2019/05/24 NodeJs
微信小程序实现图片压缩
2019/12/03 Javascript
JS前端基于canvas给图片添加水印
2020/11/11 Javascript
python多线程扫描端口示例
2014/01/16 Python
Python 列表(List)操作方法详解
2014/03/11 Python
详解在Python和IPython中使用Docker
2015/04/28 Python
利用numpy和pandas处理csv文件中的时间方法
2018/04/19 Python
Python 使用Numpy对矩阵进行转置的方法
2019/01/28 Python
python sorted方法和列表使用解析
2019/11/18 Python
李维斯德国官方网上商店:Levi’s德国
2016/09/10 全球购物
vivo智能手机官方商城:vivo
2016/09/22 全球购物
美体小铺法国官方网站:The Body Shop法国
2020/06/04 全球购物
数字漫画:comiXology
2020/06/13 全球购物
高级Java程序员面试要点
2013/08/02 面试题
办理信用卡工作证明
2014/01/11 职场文书
法学院方阵解说词
2014/01/29 职场文书
主要负责人任命书
2014/06/06 职场文书
领导干部保密承诺书
2014/08/30 职场文书
优秀教师先进事迹材料
2014/12/15 职场文书
艺术节开幕词
2015/01/28 职场文书
英文自荐信范文
2015/03/25 职场文书
原告离婚代理词
2015/05/23 职场文书
远程教育培训心得体会
2016/01/09 职场文书
一年之计:2019年下半年的计划
2019/05/07 职场文书
关于Mybatis中SQL节点的深入解析
2022/03/19 Java/Android
详细介绍python操作RabbitMq
2022/04/12 Python