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代码来实现服务器和代理服务器
Jun 23 Python
tensorflow实现简单的卷积网络
May 24 Python
Python实现处理逆波兰表达式示例
Jul 30 Python
python bmp转换为jpg 并删除原图的方法
Oct 25 Python
详解Python下载图片并保存本地的两种方式
May 15 Python
Python3实现配置文件差异对比脚本
Nov 18 Python
python模拟实现斗地主发牌
Jan 07 Python
python logging 日志的级别调整方式
Feb 21 Python
Visual Studio code 配置Python开发环境
Sep 11 Python
matplotlib 三维图表绘制方法简介
Sep 20 Python
celery在python爬虫中定时操作实例讲解
Nov 27 Python
Python first-order-model实现让照片动起来
Jun 25 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
星际争霸中的对战模式介绍
2020/03/04 星际争霸
php miniBB中文乱码问题解决方法
2008/11/25 PHP
PHP简洁函数(PHP简单明了函数语法)
2012/06/10 PHP
PHP获取客户端及服务器端IP的封装类
2016/07/21 PHP
PHP中$GLOBALS与global的区别详解
2019/03/21 PHP
时间戳转换为时间 年月日时间的JS函数
2013/08/19 Javascript
js中运算符&& 和 || 的使用记录
2014/08/21 Javascript
JavaScript实现N皇后问题算法谜题解答
2014/12/29 Javascript
AngularJs学习第八篇 过滤器filter创建
2016/06/08 Javascript
JavaScript实现相册弹窗功能(zepto.js)
2016/06/21 Javascript
AngularJS  ng-table插件设置排序
2016/09/21 Javascript
前端实现文件的断点续传(前端文件提交+后端PHP文件接收)
2016/11/04 Javascript
jQuery实现的五星点评功能【案例】
2019/02/18 jQuery
vue-父子组件和ref实例详解
2019/11/10 Javascript
jQuery实现简易聊天框
2020/02/08 jQuery
[51:26]DOTA2上海特级锦标赛主赛事日 - 2 胜者组第一轮#3Secret VS OG第二局
2016/03/03 DOTA
Python制作刷网页流量工具
2017/04/23 Python
Python中数组,列表:冒号的灵活用法介绍(np数组,列表倒序)
2018/04/18 Python
VPS CENTOS 上配置python,mysql,nginx,uwsgi,django的方法详解
2019/07/01 Python
python中自带的三个装饰器的实现
2019/11/08 Python
Pytorch 实现计算分类器准确率(总分类及子分类)
2020/01/18 Python
Python基于gevent实现高并发代码实例
2020/05/15 Python
html5 canvas fillRect坐标和大小的问题解决方法
2014/03/26 HTML / CSS
如何查看浏览器对html5的支持情况
2020/12/15 HTML / CSS
财务会计人员岗位职责
2013/11/30 职场文书
工作个人的自我评价
2014/01/14 职场文书
《动手做做看》教学反思
2014/04/09 职场文书
租房协议书
2014/04/10 职场文书
合伙协议书
2014/04/23 职场文书
2014年银行年终工作总结
2014/12/19 职场文书
安全先进个人材料
2014/12/29 职场文书
支教个人总结
2015/03/04 职场文书
2015年中职班主任工作总结
2015/05/25 职场文书
2015年加油站站长工作总结
2015/05/27 职场文书
外出听课学习心得体会
2016/01/15 职场文书
详解Python中*args和**kwargs的使用
2022/04/07 Python