解决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素数检测的方法
May 11 Python
Python中的字符串查找操作方法总结
Jun 27 Python
Python 异常处理的实例详解
Sep 11 Python
浅谈python多进程共享变量Value的使用tips
Jul 16 Python
Python中拆分字符串的操作方法
Jul 23 Python
Python使用itchat 功能分析微信好友性别和位置
Aug 05 Python
Python利用requests模块下载图片实例代码
Aug 12 Python
Python使用matplotlib 模块scatter方法画散点图示例
Sep 27 Python
Pytorch使用MNIST数据集实现CGAN和生成指定的数字方式
Jan 10 Python
Django-Scrapy生成后端json接口的方法示例
Oct 06 Python
Python使用OpenCV和K-Means聚类对毕业照进行图像分割
Jun 11 Python
Django+Celery实现定时任务的示例
Jun 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
如何使用PHP中的字符串函数
2006/11/24 PHP
php中json_encode不兼容JSON_UNESCAPED_UNICODE的解决方案
2016/05/31 PHP
JS获取随机数函数可自定义最小值最大值
2014/05/08 Javascript
jQuery打印图片pdf、txt示例代码
2014/07/22 Javascript
使用 js+正则表达式为关键词添加链接
2014/11/11 Javascript
js获取当前日期时间及其它操作汇总
2015/04/17 Javascript
jQuery+PHP实现可编辑表格字段内容并实时保存
2015/10/09 Javascript
小巧强大的jquery layer弹窗弹层插件
2015/12/06 Javascript
浅谈angularJS中的事件
2016/07/12 Javascript
Javascript使用SWFUpload进行多文件上传
2016/11/16 Javascript
浅析jsopn跨域请求原理及cors(跨域资源共享)的完美解决方法
2017/02/06 Javascript
Javascript 链式作用域详细介绍
2017/02/23 Javascript
Vue-resource拦截器判断token失效跳转的实例
2017/10/27 Javascript
layui递归实现动态左侧菜单
2019/07/26 Javascript
基于JS抓取某高校附近共享单车位置 使用web方式展示位置变化代码实例
2019/08/27 Javascript
解决Vue项目中tff报错的问题
2020/10/21 Javascript
[04:09]显微镜下的DOTA2第十二期—NaVi美如画的团战
2014/06/23 DOTA
Queue 实现生产者消费者模型(实例讲解)
2017/11/13 Python
matplotlib设置legend图例代码示例
2017/12/19 Python
利用scrapy将爬到的数据保存到mysql(防止重复)
2018/03/31 Python
对python append 与浅拷贝的实例讲解
2018/05/04 Python
Scrapy使用的基本流程与实例讲解
2018/10/21 Python
Pandas 按索引合并数据集的方法
2018/11/15 Python
python tkinter之 复选、文本、下拉的实现
2020/03/04 Python
django-orm F对象的使用 按照两个字段的和,乘积排序实例
2020/05/18 Python
Django限制API访问频率常用方法解析
2020/10/12 Python
pytho matplotlib工具栏源码探析一之禁用工具栏、默认工具栏和工具栏管理器三种模式的差异
2021/02/25 Python
HTML5 video 视频标签使用介绍
2014/02/03 HTML / CSS
html5是什么_动力节点Java学院整理
2017/07/07 HTML / CSS
美国瑜伽服装和装备购物网站:Mukha Yoga
2019/02/22 全球购物
Noon埃及:埃及在线购物
2019/11/26 全球购物
澳大利亚家用电器在线商店:Billy Guyatts
2020/05/05 全球购物
售后服务质量承诺书
2015/04/29 职场文书
投诉书格式范本
2015/07/02 职场文书
Python通过m3u8文件下载合并ts视频的操作
2021/04/16 Python
浅谈MySQL next-key lock 加锁范围
2021/06/07 MySQL