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中__call__方法示例分析
Oct 11 Python
Django中使用locals()函数的技巧
Jul 16 Python
Python元组操作实例分析【创建、赋值、更新、删除等】
Jul 24 Python
Tensorflow 自带可视化Tensorboard使用方法(附项目代码)
Feb 10 Python
Python使用pyodbc访问数据库操作方法详解
Jul 05 Python
在Python 中实现图片加框和加字的方法
Jan 26 Python
这可能是最好玩的python GUI入门实例(推荐)
Jul 19 Python
细数nn.BCELoss与nn.CrossEntropyLoss的区别
Feb 29 Python
详解python tkinter 图片插入问题
Sep 03 Python
python openssl模块安装及用法
Dec 06 Python
pytest进阶教程之fixture函数详解
Mar 29 Python
Python编程中内置的NotImplemented类型的用法
Mar 23 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 ? EasyUI DataGrid 资料存的方式介绍
2012/11/07 PHP
CodeIgniter框架提示Disallowed Key Characters的解决办法
2014/04/21 PHP
PHP实现多图片上传类实例
2014/07/26 PHP
PHP之浮点数计算比较以及取整数不准确的解决办法
2015/07/29 PHP
在WordPress中使用PHP脚本来判断访客来自什么国家
2015/12/10 PHP
redirect_uri参数错误的解决方法(必看)
2017/02/16 PHP
对google个性主页的拖拽效果的js的完整注释[转]
2007/04/10 Javascript
用JAVASCRIPT如何给<textarea></textarea>赋值
2007/04/20 Javascript
为JavaScript提供睡眠功能(sleep) 自编译JS引擎
2010/08/16 Javascript
prettify 代码高亮着色器google出品
2010/12/28 Javascript
jQuery jqgrid 对含特殊字符json 数据的 Java 处理方法
2011/01/01 Javascript
给jQuery方法添加回调函数一款插件的应用
2013/01/21 Javascript
js Date概念详细介绍
2013/11/22 Javascript
javascript实现客户端兼容各浏览器创建csv并下载的方法
2015/03/23 Javascript
正则中的回溯定义与用法分析【JS与java实现】
2016/12/27 Javascript
微信小程序App生命周期详解
2018/01/31 Javascript
layui 优化button按钮和弹出框的方法
2018/08/15 Javascript
Vue(定时器)解决mounted不能获取到data中的数据问题
2020/07/30 Javascript
Python实现豆瓣图片下载的方法
2015/05/25 Python
Python写的一个简单监控系统
2015/06/19 Python
Python在Windows和在Linux下调用动态链接库的教程
2015/08/18 Python
Python编程中对文件和存储器的读写示例
2016/01/25 Python
Python矩阵常见运算操作实例总结
2017/09/29 Python
python学习笔记之列表(list)与元组(tuple)详解
2017/11/23 Python
python 遍历列表提取下标和值的实例
2018/12/25 Python
django使用graphql的实例
2020/09/02 Python
Move Free官方海外旗舰店:美国骨关节健康专业品牌
2017/12/06 全球购物
世界上第一个创建了罩杯系统的美国内衣品牌:Maidenform
2019/03/23 全球购物
销售文员的岗位职责
2013/11/20 职场文书
军训自我鉴定100字
2014/02/13 职场文书
心理健康课教学反思
2014/02/13 职场文书
沙滩主题婚礼活动策划方案
2014/09/15 职场文书
客服专员岗位职责范本
2015/04/07 职场文书
2015年销售助理工作总结
2015/05/11 职场文书
幼儿园小班班务总结
2015/08/03 职场文书
Win10服务主机占用内存怎么办?Win10服务主机进程占用大量内存解决方法
2022/09/23 数码科技