解决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 输出时去掉列表元组外面的方括号与圆括号的方法
Dec 24 Python
对python调用RPC接口的实例详解
Jan 03 Python
Python快速转换numpy数组中Nan和Inf的方法实例说明
Feb 21 Python
利用python实现周期财务统计可视化
Aug 25 Python
解决python 读取excel时 日期变成数字并加.0的问题
Oct 08 Python
Python线程障碍对象Barrier原理详解
Dec 02 Python
python实现简单的购物程序代码实例
Mar 03 Python
使用Python构造hive insert语句说明
Jun 06 Python
python中pandas库中DataFrame对行和列的操作使用方法示例
Jun 14 Python
python输出结果刷新及进度条的实现操作
Jul 13 Python
scrapy头部修改的方法详解
Dec 06 Python
python 中的jieba分词库
Nov 23 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
cache_lite试用
2007/02/14 PHP
PHP 作用域解析运算符(::)
2010/07/27 PHP
PHP读取大文件的多种方法介绍
2016/04/04 PHP
CentOS7.0下安装PHP5.6.30服务的教程详解
2018/09/29 PHP
javascript对象的property和prototype是这样一种关系
2007/03/24 Javascript
javascript学习网址备忘
2007/05/29 Javascript
javascript 拖放效果实现代码
2010/01/22 Javascript
JS维吉尼亚密码算法实现代码
2010/11/09 Javascript
jQuery EasyUI API 中文文档 - Pagination分页
2011/09/29 Javascript
js去除输入框中所有的空格和禁止输入空格的方法
2014/06/09 Javascript
用console.table()调试javascript
2014/09/04 Javascript
JS实现alert中显示换行的方法
2015/12/17 Javascript
AngularJS模块学习之Anchor Scroll
2016/01/19 Javascript
微信小程序 form组件详解
2016/10/25 Javascript
Bootstrap Modal遮罩弹出层代码分享
2016/11/21 Javascript
BootstrapTable refresh 方法使用实例简单介绍
2017/02/20 Javascript
实例讲解DataTables固定表格宽度(设置横向滚动条)
2017/07/11 Javascript
为jquery的ajax请求添加超时timeout时间的操作方法
2018/09/04 jQuery
js实现消灭星星(web简易版)
2020/03/24 Javascript
原生小程序封装跑马灯效果
2020/10/21 Javascript
Nuxt 项目性能优化调研分析
2020/11/07 Javascript
Python使用xlrd模块操作Excel数据导入的方法
2015/05/26 Python
Python实现将罗马数字转换成普通阿拉伯数字的方法
2017/04/19 Python
Python将多个excel表格合并为一个表格
2021/02/22 Python
numpy中loadtxt 的用法详解
2018/08/03 Python
对python条件表达式的四种实现方法小结
2019/01/30 Python
python中import与from方法总结(推荐)
2019/03/21 Python
Python编写带选项的命令行程序方法
2019/08/13 Python
django 模版关闭转义方式
2020/05/14 Python
HTML5实现页面切换激活的PageVisibility API使用初探
2016/05/13 HTML / CSS
纯HTML5+CSS3制作生日蛋糕(代码易懂)
2016/11/16 HTML / CSS
CheapTickets香港机票预订网站:CheapTickets.hk
2019/06/26 全球购物
财务会计专业求职信范文
2013/12/31 职场文书
预备党员思想汇报范文
2014/01/11 职场文书
消防应急演练方案
2014/02/12 职场文书
大课间体育活动方案
2014/03/12 职场文书