解决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中的split()函数的使用方法
Apr 07 Python
详解Python的Flask框架中的signals信号机制
Jun 13 Python
python用装饰器自动注册Tornado路由详解
Feb 14 Python
python matplotlib中文显示参数设置解析
Dec 15 Python
Python利用turtle库绘制彩虹代码示例
Dec 20 Python
python smtplib模块自动收发邮件功能(二)
May 22 Python
Python3使用pandas模块读写excel操作示例
Jul 03 Python
pytorch: tensor类型的构建与相互转换实例
Jul 26 Python
python requests post多层字典的方法
Dec 27 Python
Python bytes string相互转换过程解析
Mar 05 Python
PyCharm Anaconda配置PyQt5开发环境及创建项目的教程详解
Mar 24 Python
python中判断数字是否为质数的实例讲解
Dec 06 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
使用php判断网页是否gzip压缩
2013/06/25 PHP
zf框架的session会话周期及次数限制使用示例
2014/03/13 PHP
如何把php5.3版本升级到php5.4或者php5.5
2015/07/31 PHP
javascript 播放器 控制
2007/01/22 Javascript
js更优雅的兼容
2010/08/12 Javascript
JavaScript常用对象的方法和属性小结
2012/01/24 Javascript
JS对select控件option选项的增删改查示例代码
2013/10/21 Javascript
JS创建自定义表格具体实现
2014/02/11 Javascript
js清理Word格式示例代码
2014/02/13 Javascript
JavaScript中九种常用排序算法
2014/09/02 Javascript
js改变embed标签src值的方法
2015/04/10 Javascript
js实现汉字排序的方法
2015/07/23 Javascript
JavaScript动态提示输入框输入字数的方法
2015/07/27 Javascript
Java遍历集合方法分析(实现原理、算法性能、适用场合)
2016/04/25 Javascript
BootStrap智能表单实战系列(十一)级联下拉的支持
2016/06/13 Javascript
bootstrap PrintThis打印插件使用详解
2017/02/20 Javascript
性能优化之代码优化页面加载速度
2017/03/01 Javascript
Javascript中八种遍历方法的执行速度深度对比
2017/04/25 Javascript
js时间戳与日期格式之间转换详解
2017/12/11 Javascript
JS排序算法之希尔排序与快速排序实现方法
2017/12/12 Javascript
javascript代码优化的8点总结
2018/01/29 Javascript
python算法表示概念扫盲教程
2017/04/13 Python
Python 图像处理: 生成二维高斯分布蒙版的实例
2019/07/04 Python
python绘制直方图和密度图的实例
2019/07/08 Python
Django {{ MEDIA_URL }}无法显示图片的解决方式
2020/04/07 Python
Python爬虫爬取微博热搜保存为 Markdown 文件的源码
2021/02/22 Python
美国第二大团购网站:LivingSocial
2016/07/24 全球购物
雷曼兄弟的五金店:Lehman’s Hardware Store
2019/04/10 全球购物
德国玩具商店:Planet Happy DE
2021/01/16 全球购物
成语的广告词
2014/03/19 职场文书
卖房协议书样本
2014/10/30 职场文书
党员承诺书格式范文
2015/04/28 职场文书
公司费用报销管理制度
2015/08/04 职场文书
爱国主义主题班会
2015/08/14 职场文书
《猴王出世》教学反思
2016/02/23 职场文书
MySQL 使用SQL语句修改表名的实现
2021/04/07 MySQL