解决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实现每次处理一个字符的三种方法
Oct 09 Python
在Python中使用第三方模块的教程
Apr 27 Python
Python输出汉字字库及将文字转换为图片的方法
Jun 04 Python
python 全局变量的import机制介绍
Sep 07 Python
python学习笔记之列表(list)与元组(tuple)详解
Nov 23 Python
python tensorflow学习之识别单张图片的实现的示例
Feb 09 Python
anaconda如何查看并管理python环境
Jul 05 Python
python标记语句块使用方法总结
Aug 05 Python
用Python去除图像的黑色或白色背景实例
Dec 12 Python
python实现简单井字棋小游戏
Mar 05 Python
python实现126邮箱发送邮件
May 20 Python
教你用python控制安卓手机
May 13 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
风格模板初级不完全修改教程
2006/10/09 PHP
php图片验证码代码
2008/03/27 PHP
Thinkphp开发--集成极光推送
2017/09/15 PHP
jquery实现的鼠标拖动排序Li或Table
2014/05/04 Javascript
Javascript异步编程模型Promise模式详细介绍
2014/05/08 Javascript
Nodejs异步回调的优雅处理方法
2014/09/25 NodeJs
js实现图片轮播效果
2015/12/19 Javascript
Jquery针对tr td的一些实用操作方法(必看篇)
2016/10/05 Javascript
Easyui Tree获取当前选择节点的所有顶级父节点
2017/02/14 Javascript
jQuery实现单击按钮遮罩弹出对话框效果(2)
2017/02/20 Javascript
JavaScript手风琴页面制作
2017/05/17 Javascript
JS判断Android、iOS或浏览器的多种方法(四种方法)
2017/06/29 Javascript
JS操作时间 - UNIX时间戳的简单介绍(必看篇)
2017/08/16 Javascript
weui框架实现上传、预览和删除图片功能代码
2017/08/24 Javascript
Parcel 打包示例(React HelloWorld)
2018/01/16 Javascript
原生JS实现顶部导航栏显示按钮+搜索框功能
2019/12/25 Javascript
[52:03]DOTA2-DPC中国联赛 正赛 Ehome vs iG BO3 第三场 1月31日
2021/03/11 DOTA
用Python实现换行符转换的脚本的教程
2015/04/16 Python
Python实现查找数组中任意第k大的数字算法示例
2019/01/23 Python
Python元组知识点总结
2019/02/18 Python
PyQt5下拉式复选框QComboCheckBox的实例
2019/06/25 Python
简单了解python协程的相关知识
2019/08/31 Python
Python 3.6 中使用pdfminer解析pdf文件的实现
2019/09/25 Python
Django中提示消息messages的设置方式
2019/11/15 Python
python3注册全局热键的实现
2020/03/22 Python
Otticanet意大利:最顶尖的世界名牌眼镜, 能得到打折季的价格
2019/03/10 全球购物
KELLER SPORTS荷兰:在线订购最好的运动产品
2020/10/13 全球购物
英语自荐信常用语句
2013/12/13 职场文书
旅游项目开发策划书
2014/01/18 职场文书
幼儿园实习生辞职信
2014/01/20 职场文书
电子商务专业毕业生求职信
2014/06/12 职场文书
纪念九一八事变演讲稿:牢记历史,捍卫主权
2014/09/14 职场文书
委托培训协议书
2014/11/17 职场文书
雾霾停课通知
2015/04/24 职场文书
请病假条范文
2015/08/17 职场文书
Win10 和 Win11可以共存吗? win10/11产品生命周期/服务更新介绍
2021/11/21 数码科技