解决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中使用pprint函数进行格式化输出的教程
Apr 07 Python
在Python中使用base64模块处理字符编码的教程
Apr 28 Python
python实现在windows服务中新建进程的方法
Jun 30 Python
R语言 vs Python对比:数据分析哪家强?
Nov 17 Python
django中静态文件配置static的方法
May 20 Python
python opencv读mp4视频的实例
Dec 07 Python
ERLANG和PYTHON互通实现过程详解
Jul 05 Python
Numpy中对向量、矩阵的使用详解
Oct 29 Python
python 循环数据赋值实例
Dec 02 Python
Pytorch 实现权重初始化
Dec 31 Python
python字符串下标与切片及使用方法
Feb 13 Python
python自动计算图像数据集的RGB均值
Jun 18 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加速 eAccelerator配置和使用指南
2009/06/05 PHP
MayFish PHP的MVC架构的开发框架
2009/08/13 PHP
PHP设计模式之装饰者模式
2012/02/29 PHP
hadoop中一些常用的命令介绍
2013/06/19 PHP
php分页原理 分页代码 分页类制作教程
2016/09/23 PHP
php获取访问者浏览页面的浏览器类型
2017/01/23 PHP
JS获取客户端IP地址、MAC和主机名的7个方法汇总
2014/07/21 Javascript
jQuery中remove()方法用法实例
2014/12/25 Javascript
神级程序员JavaScript300行代码搞定汉字转拼音
2017/05/20 Javascript
详解webpack进阶之loader篇
2017/08/23 Javascript
在vue项目中集成graphql(vue-ApolloClient)
2018/09/08 Javascript
jquery实现自定义树形表格的方法【自定义树形结构table】
2019/07/12 jQuery
vuex实现像调用模板方法一样调用Mutations方法
2019/11/06 Javascript
javascript实现弹幕墙效果
2019/11/28 Javascript
vue如何搭建多页面多系统应用
2020/06/17 Javascript
vue切换菜单取消未完成接口请求的案例
2020/11/13 Javascript
用Python制作简单的钢琴程序的教程
2015/04/01 Python
在Python的web框架中配置app的教程
2015/04/30 Python
python PIL模块与随机生成中文验证码
2016/02/27 Python
Python入门_条件控制(详解)
2017/05/16 Python
python保存文件方法小结
2018/07/27 Python
PYQT5实现控制台显示功能的方法
2019/06/25 Python
Python使用uuid库生成唯一标识ID
2020/02/12 Python
自定义Django_rest_framework_jwt登陆错误返回的解决
2020/10/18 Python
CSS3中线性颜色渐变的一些实现方法
2015/07/14 HTML / CSS
英国儿童家具专卖店:GLTC
2016/09/24 全球购物
美国隐形眼镜销售网站:ContactsDirect
2017/10/28 全球购物
Tirendo比利时:在线购买轮胎
2018/10/22 全球购物
工作自我评价分享
2013/12/01 职场文书
中学生团员自我评价分享
2013/12/07 职场文书
创业计划书的写作技巧及要点
2014/01/31 职场文书
乡镇干部个人对照检查材料思想汇报(原创篇)
2014/09/28 职场文书
世界气象日活动总结
2015/02/27 职场文书
初三毕业感言
2015/07/31 职场文书
Keras多线程机制与flask多线程冲突的解决方案
2021/05/28 Python
matplotlib如何设置坐标轴刻度的个数及标签的方法总结
2021/06/11 Python