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解析发往本机的数据包示例 (解析数据包)
Jan 16 Python
Python中使用PIL库实现图片高斯模糊实例
Feb 08 Python
python基础入门学习笔记(Python环境搭建)
Jan 13 Python
python实现m3u8格式转换为mp4视频格式
Feb 28 Python
如何安装多版本python python2和python3共存以及pip共存
Sep 18 Python
python3.7简单的爬虫实例详解
Jul 08 Python
对Pytorch中nn.ModuleList 和 nn.Sequential详解
Aug 18 Python
Python使用urllib模块对URL网址中的中文编码与解码实例详解
Feb 18 Python
Pygame的程序开始示例代码
May 07 Python
基于TensorFlow的CNN实现Mnist手写数字识别
Jun 17 Python
Python 实现 T00ls 自动签到脚本代码(邮件+钉钉通知)
Jul 06 Python
pandas使用函数批量处理数据(map、apply、applymap)
Nov 27 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过滤★等特殊符号的正则
2014/01/27 PHP
ThinkPHP的L方法使用简介
2014/06/18 PHP
简单实现PHP留言板功能
2016/12/21 PHP
ppk谈JavaScript style属性
2008/10/10 Javascript
JavaScript动态调整TextArea高度的代码
2010/12/28 Javascript
js字符编码函数区别分析
2011/12/28 Javascript
jq选项卡鼠标延迟的插件实例
2013/05/13 Javascript
解决js数据包含加号+通过ajax传到后台时出现连接错误
2013/08/01 Javascript
js实现的折叠导航示例
2013/11/29 Javascript
jquery实现背景墙聚光灯效果示例分享
2014/03/02 Javascript
jquery常用方法及使用示例汇总
2014/11/08 Javascript
jQuery Ajax()方法使用指南
2014/11/19 Javascript
JS中的THIS和WINDOW.EVENT.SRCELEMENT详解
2015/05/25 Javascript
jquery图片滚动放大代码分享(1)
2015/08/25 Javascript
一步步教大家编写酷炫的导航栏js+css实现
2016/03/14 Javascript
前端编码规范(3)JavaScript 开发规范
2017/01/21 Javascript
JavaScript省市级联下拉菜单实例
2017/02/14 Javascript
Canvas放置反弹效果随机图形(实例)
2017/08/17 Javascript
vue.js模仿京东省市区三级联动的选择组件实例代码
2017/11/22 Javascript
vue中axios实现数据交互与跨域问题
2019/05/12 Javascript
jquery绑定事件 bind和on的用法与区别分析
2020/05/22 jQuery
JS轮播图的实现方法2
2020/08/25 Javascript
在vue中使用inheritAttrs实现组件的扩展性介绍
2020/12/07 Vue.js
python matplotlib坐标轴设置的方法
2017/12/05 Python
Python实现字典的遍历与排序功能示例
2017/12/23 Python
python清除函数占用的内存方法
2018/06/25 Python
python读取TXT每行,并存到LIST中的方法
2018/10/26 Python
python通过robert、sobel、Laplace算子实现图像边缘提取详解
2019/08/21 Python
django自定义非主键自增字段类型详解(auto increment field)
2020/03/30 Python
Python3爬虫中关于中文分词的详解
2020/07/29 Python
Python浮点型(float)运算结果不正确的解决方案
2020/09/22 Python
探索HTML5本地存储功能运用技巧
2016/03/02 HTML / CSS
HTML5 虚拟键盘出现挡住输入框的解决办法
2017/02/14 HTML / CSS
俄罗斯达美乐比萨外送服务:Domino’s Pizza
2020/12/18 全球购物
国际贸易专业个人求职信范文分享
2013/12/14 职场文书
css样式important规则的正确使用方式
2022/06/10 HTML / CSS