解决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中的exec、eval使用实例
Sep 23 Python
基于python的Tkinter编写登陆注册界面
Jun 30 Python
Python图形绘制操作之正弦曲线实现方法分析
Dec 25 Python
django+xadmin+djcelery实现后台管理定时任务
Aug 14 Python
对pandas处理json数据的方法详解
Feb 08 Python
Python上下文管理器类和上下文管理器装饰器contextmanager用法实例分析
Nov 07 Python
利用python实现冒泡排序算法实例代码
Dec 01 Python
YUV转为jpg图像的实现
Dec 09 Python
使用python脚本自动生成K8S-YAML的方法示例
Jul 12 Python
Python使用urlretrieve实现直接远程下载图片的示例代码
Aug 17 Python
python制作一个简单的gui 数据库查询界面
Nov 19 Python
Pytorch - TORCH.NN.INIT 参数初始化的操作
Feb 27 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中计算程序运行时间的类代码
2012/11/03 PHP
php数组合并的二种方法
2014/03/21 PHP
PHP数字字符串左侧补0、字符串填充和自动补齐的几种方法
2014/05/10 PHP
在Mac OS上自行编译安装Apache服务器和PHP解释器
2015/12/24 PHP
thinkphp5 模型实例化获得数据对象的教程
2019/10/18 PHP
javascript eval函数深入认识
2009/02/21 Javascript
js 上传图片预览问题
2010/12/06 Javascript
jquery focus(fn),blur(fn)方法实例代码
2011/12/16 Javascript
制作jquery遮罩层效果导航菜单代码分享
2013/12/25 Javascript
JQuery对表格进行操作的常用技巧总结
2014/04/23 Javascript
JavaScript中输出标签的方法
2014/08/27 Javascript
同步文本框内容JS代码实现
2016/08/04 Javascript
nodejs+websocket实时聊天系统改进版
2017/05/18 NodeJs
vue.js如何将echarts封装为组件一键使用详解
2017/10/10 Javascript
webpack项目调试以及独立打包配置文件的方法
2018/02/28 Javascript
Angular8 Http拦截器简单使用教程
2019/08/20 Javascript
js实现图片区域可点击大小随意改变(适用移动端)代码实例
2019/09/11 Javascript
wxPython 入门教程
2008/10/07 Python
Python中使用wxPython开发的一个简易笔记本程序实例
2015/02/08 Python
全面分析Python的优点和缺点
2018/02/07 Python
PyTorch读取Cifar数据集并显示图片的实例讲解
2018/07/27 Python
python后端接收前端回传的文件方法
2019/01/02 Python
python运行时强制刷新缓冲区的方法
2019/01/14 Python
详解Python数据可视化编程 - 词云生成并保存(jieba+WordCloud)
2019/03/26 Python
python django框架中使用FastDFS分布式文件系统的安装方法
2019/06/10 Python
pytorch 图像中的数据预处理和批标准化实例
2020/01/15 Python
Node.js 和 Python之间该选择哪个?
2020/08/05 Python
html5实现移动端适配完美写法
2017/11/16 HTML / CSS
英国最大的滑板品牌选择:Route One
2019/09/22 全球购物
一份软件工程师的面试试题
2016/02/01 面试题
大学生最常用的自我评价
2013/12/07 职场文书
高中竞选班长演讲稿
2014/04/24 职场文书
2014年前台文员工作总结
2014/12/08 职场文书
小学语文教学随笔
2015/08/14 职场文书
教你使用Python pypinyin库实现汉字转拼音
2021/05/27 Python
CSS巧用渐变实现高级感背景光动画
2021/12/06 HTML / CSS