解决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中dict与set的使用
Aug 10 Python
flask中过滤器的使用详解
Aug 01 Python
Python拼接字符串的7种方法总结
Nov 01 Python
python随机在一张图像上截取任意大小图片的方法
Jan 24 Python
自学python的建议和周期预算
Jan 30 Python
python 执行终端/控制台命令的例子
Jul 12 Python
Jupyter notebook 远程配置及SSL加密教程
Apr 14 Python
Python使用matplotlib绘制圆形代码实例
May 27 Python
PyTorch安装与基本使用详解
Aug 31 Python
Python字符串查找基本操作代码案例
Oct 27 Python
python基于tkinter制作无损音乐下载工具
Mar 29 Python
Python的property属性详细讲解
Apr 11 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计算2点经纬度之间的距离代码
2013/08/12 PHP
yii实现创建验证码实例解析
2014/07/31 PHP
php输出xml必须header的解决方法
2014/10/17 PHP
js中top/parent/frame概述及案例应用
2013/02/06 Javascript
弹出最简单的模式化遮罩层的js代码
2013/12/04 Javascript
JS对象转换为Jquery对象示例
2014/01/26 Javascript
详解JavaScript中setSeconds()方法的使用
2015/06/11 Javascript
JavaScript中反正弦函数Math.asin()的使用简介
2015/06/14 Javascript
牛叉的Jquery——Jquery与DOM对象的互相转换及DOM的三种操作
2015/10/29 Javascript
js轮盘抽奖实例分析
2020/04/17 Javascript
Javascript动画效果(4)
2016/10/11 Javascript
js实现可输入可选择的select下拉框
2016/12/21 Javascript
详解Vue.js自定义tipOnce指令用法实例
2018/12/19 Javascript
vue父组件给子组件的组件传值provide inject的方法
2019/10/23 Javascript
Vue.js实现大屏数字滚动翻转效果
2019/11/29 Javascript
Python内置函数 next的具体使用方法
2017/11/24 Python
用python标准库difflib比较两份文件的异同详解
2018/11/16 Python
用Python写一个模拟qq聊天小程序的代码实例
2019/03/06 Python
python小程序实现刷票功能详解
2019/07/17 Python
如何使用python实现模拟鼠标点击
2020/01/06 Python
Python计算机视觉里的IOU计算实例
2020/01/17 Python
HTML5 embed标签定义和用法详解
2014/05/09 HTML / CSS
美国一家全面的在线零售鞋类公司:SHOEBACCA
2017/01/06 全球购物
西班牙在线宠物食品和配件商店:bitiba
2019/10/11 全球购物
亚洲航空公司官方网站:AirAsia
2019/11/25 全球购物
二手书店创业计划书
2014/01/16 职场文书
党的群众路线教育实践活动宣传方案
2014/02/23 职场文书
餐厅总厨求职信
2014/03/04 职场文书
群众路线自我剖析材料
2014/10/08 职场文书
个人合伙协议书范本
2014/10/14 职场文书
全民创业工作总结
2015/08/13 职场文书
企业内部管理控制:银行存款控制制度范本
2020/01/10 职场文书
简单实现一个手持弹幕功能+文字抖动特效
2021/03/31 HTML / CSS
MySQL 如何分析查询性能
2021/05/12 MySQL
Python数据分析入门之数据读取与存储
2021/05/13 Python
MySQL面试题讲解之如何设置Hash索引
2021/11/01 MySQL