解决pytorch GPU 计算过程中出现内存耗尽的问题


Posted in Python onAugust 19, 2019

Pytorch GPU运算过程中会出现:“cuda runtime error(2): out of memory”这样的错误。通常,这种错误是由于在循环中使用全局变量当做累加器,且累加梯度信息的缘故,用官方的说法就是:"accumulate history across your training loop"。在默认情况下,开启梯度计算的Tensor变量是会在GPU保持他的历史数据的,所以在编程或者调试过程中应该尽力避免在循环中累加梯度信息。

下面举个栗子:

上代码:

total_loss=0
for i in range(10000):
  optimizer.zero_grad()
  output=model(input)
  loss=criterion(output)
  loss.backward()
  optimizer.step()
  total_loss+=loss
  #这里total_loss是跨越循环的变量,起着累加的作用,
  #loss变量是带有梯度的tensor,会保持历史梯度信息,在循环过程中会不断积累梯度信息到tota_loss,占用内存

以上例子的修正方法是在循环中的最后一句修改为:total_loss+=float(loss),利用类型变换解除梯度信息,这样,多次累加不会累加梯度信息。

局部变量逗留导致内存泄露

局部变量通常在变量作用域之外会被Python自动销毁,在作用域之内,不需要的临时变量可以使用del x来销毁。

在设计Linear Layers 的时候,尽量让其规模小点

对于nn.Linear(m,n)这样规模的线性函数,他的空间规模为O(mn),除此规模的空间来容纳参数意外,还需要同样规模的空间来存储梯度,由此很容易造成GPU空间溢出。

相关的进程管理bash cmd

nvidia-smi监控GPU,

watch -n 1 nvidia-smi实时监控GPU,

watch -n 1 lscpu实时监控CPU,

ps -elf进程查看,

ps -elf | grep python查看Python子进程,

kill -9 [PID]杀死进程PID。

Referance:

Pytorch documentations

以上这篇解决pytorch GPU 计算过程中出现内存耗尽的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
举例详解Python中threading模块的几个常用方法
Jun 18 Python
Django使用Celery异步任务队列的使用
Mar 13 Python
windows下python和pip安装教程
May 25 Python
实用自动化运维Python脚本分享
Jun 04 Python
Flask web开发处理POST请求实现(登录案例)
Jul 26 Python
python的turtle库使用详解
May 10 Python
python 抓包保存为pcap文件并解析的实例
Jul 23 Python
python实现批量修改服务器密码的方法
Aug 13 Python
pygame实现俄罗斯方块游戏(AI篇2)
Oct 29 Python
基于Python爬取爱奇艺资源过程解析
Mar 02 Python
Python通过Tesseract库实现文字识别
Mar 05 Python
python框架Django实战商城项目之工程搭建过程图文详解
Mar 09 Python
将Pytorch模型从CPU转换成GPU的实现方法
Aug 19 #Python
pytorch 使用单个GPU与多个GPU进行训练与测试的方法
Aug 19 #Python
在pytorch中为Module和Tensor指定GPU的例子
Aug 19 #Python
pytorch使用指定GPU训练的实例
Aug 19 #Python
关于pytorch多GPU训练实例与性能对比分析
Aug 19 #Python
pytorch 更改预训练模型网络结构的方法
Aug 19 #Python
pytorch打印网络结构的实例
Aug 19 #Python
You might like
第十二节 类的自动加载 [12]
2006/10/09 PHP
php中函数的形参与实参的问题说明
2010/09/01 PHP
php自动加载autoload机制示例分享
2014/02/20 PHP
php修改文件上传限制方法汇总
2015/04/07 PHP
判断浏览器的javascript版本的代码
2010/09/03 Javascript
js编写trim()函数及正则表达式的运用
2013/10/24 Javascript
node.js中的fs.lstat方法使用说明
2014/12/16 Javascript
jQuery模拟新浪微博首页滚动效果的方法
2015/03/11 Javascript
jQuery实现的简单折叠菜单(折叠面板)效果代码
2015/09/16 Javascript
jQuery获得字体颜色16位码的方法
2016/02/20 Javascript
JS中事件冒泡和事件捕获介绍
2016/12/13 Javascript
Javascript blur与click冲突解决办法
2017/01/09 Javascript
jq checkbox 的全选并ajax传参的实例
2017/04/01 Javascript
微信小程序 scroll-view实现锚点滑动的示例
2017/12/06 Javascript
结合Vue控制字符和字节的显示个数的示例
2018/05/17 Javascript
Vue2.x Todo之自定义指令实现自动聚焦的方法
2019/01/08 Javascript
从理论角度讨论JavaScript闭包
2019/04/03 Javascript
微信小程序按钮点击动画效果的实现
2019/09/04 Javascript
浅谈webpack和webpack-cli模块源码分析
2020/01/19 Javascript
详解JavaScript中精度失准问题及解决方法
2020/02/04 Javascript
Javascript原生ajax请求代码实例
2020/02/20 Javascript
javascript设计模式 ? 模板方法模式原理与用法实例分析
2020/04/23 Javascript
Python采集腾讯新闻实例
2014/07/10 Python
python通过exifread模块获得图片exif信息的方法
2015/03/16 Python
利用Tkinter和matplotlib两种方式画饼状图的实例
2017/11/06 Python
python之matplotlib学习绘制动态更新图实例代码
2018/01/23 Python
python 将md5转为16字节的方法
2018/05/29 Python
python Django中models进行模糊查询的示例
2019/07/18 Python
Python编写带选项的命令行程序方法
2019/08/13 Python
HTML5 新事件 小结
2009/07/16 HTML / CSS
小橄榄树:Le Petit Olivier
2018/04/23 全球购物
英国现代家具和装饰网站:PN Home
2018/08/16 全球购物
俄罗斯最大的在线珠宝大卖场:Nebo
2019/12/08 全球购物
如何在存储过程中使用Loop
2016/01/05 面试题
2014党员学习习主席讲话思想汇报
2014/09/15 职场文书
企业法人任命书
2015/09/21 职场文书