解决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使用递归解决全排列数字示例
Feb 11 Python
python通过scapy获取局域网所有主机mac地址示例
May 04 Python
Python提取网页中超链接的方法
Sep 18 Python
Python迭代器和生成器定义与用法示例
Feb 10 Python
python numpy 显示图像阵列的实例
Jul 02 Python
python 构造三维全零数组的方法
Nov 12 Python
用Python徒手撸一个股票回测框架搭建【推荐】
Aug 05 Python
python 使用opencv 把视频分割成图片示例
Dec 12 Python
PyQt5实现画布小程序
May 30 Python
Python实现上下文管理器的方法
Aug 07 Python
python 三种方法提取pdf中的图片
Feb 07 Python
Python djanjo之csrf防跨站攻击实验过程
May 14 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中使用preg_replace函数匹配图片并加上链接的方法
2013/02/06 PHP
thinkPHP引入类的方法详解
2016/12/08 PHP
[对联广告] JS脚本类
2006/08/27 Javascript
基于Jquery的文字滚动跑马灯插件(一个页面多个滚动区)
2010/07/26 Javascript
JavaScript类和继承 this属性使用说明
2010/09/03 Javascript
JavaScript实现x秒后自动跳转到一个页面
2013/01/03 Javascript
jquery实现的可隐藏重现的靠边悬浮层实例代码
2013/05/27 Javascript
jquery实现简单的拖拽效果实例兼容所有主流浏览器
2013/06/21 Javascript
js的hasownproperty使用示例
2014/03/02 Javascript
jquery使用slideDown实现模块缓慢拉出效果的方法
2015/03/27 Javascript
基于JS如何实现给字符加千分符(65,541,694,158)
2016/08/03 Javascript
JS日程管理插件FullCalendar中文说明文档
2017/02/06 Javascript
详解webpack+express多页站点开发
2017/12/22 Javascript
vue+axios 前端实现的常用拦截的代码示例
2018/08/23 Javascript
解决vue热替换失效的根本原因
2018/09/19 Javascript
如何使用pm2快速将项目部署到远程服务器
2019/03/12 Javascript
Node.js + express实现上传大文件的方法分析【图片、文本文件】
2019/03/14 Javascript
微信小程序实现获取小程序码和二维码java接口开发
2019/03/29 Javascript
微信小程序监听用户登录事件的实现方法
2019/11/11 Javascript
JavaScript实现随机点名程序
2020/03/25 Javascript
详解element上传组件before-remove钩子问题解决
2020/04/08 Javascript
Python3 串口接收与发送16进制数据包的实例
2019/06/12 Python
解决pycharm 工具栏Tool中找不到Run manager.py Task的问题
2019/07/01 Python
python序列类型种类详解
2020/02/26 Python
pycharm设置python文件模板信息过程图解
2020/03/10 Python
python文件读取失败怎么处理
2020/06/23 Python
通过实例解析python and和or使用方法
2020/11/14 Python
html5页面结构_动力节点Java学院整理
2017/07/10 HTML / CSS
玖熙女鞋美国官网:Nine West
2016/10/06 全球购物
美国咖啡批发网站:Coffee.org
2017/06/29 全球购物
财务方面个人工作的自我评价
2013/12/28 职场文书
雏鹰争章活动总结
2014/05/09 职场文书
体育比赛口号
2014/06/09 职场文书
小区门卫岗位职责范本
2014/08/24 职场文书
2014年文艺部工作总结
2014/11/17 职场文书
浅谈Mysql多表连接查询的执行细节
2021/04/24 MySQL