解决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多进程操作实例
Nov 21 Python
Python中的Classes和Metaclasses详解
Apr 02 Python
python实现FTP服务器服务的方法
Apr 11 Python
Python查找两个有序列表中位数的方法【基于归并算法】
Apr 20 Python
python读取excel指定列数据并写入到新的excel方法
Jul 10 Python
python try except 捕获所有异常的实例
Oct 18 Python
Python多重继承之菱形继承的实例详解
Feb 12 Python
推荐8款常用的Python GUI图形界面开发框架
Feb 23 Python
Jmeter HTTPS接口测试证书导入过程图解
Jul 22 Python
详解利用python识别图片中的条码(pyzbar)及条码图片矫正和增强
Nov 17 Python
用Python实现职工信息管理系统
Dec 30 Python
如何使用Python进行PDF图片识别OCR
Jan 22 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
Mysql中limit的用法方法详解与注意事项
2008/04/19 PHP
ajax+php打造进度条 readyState各状态
2010/03/20 PHP
关于Zend Studio 配色方案插件的介绍
2013/06/24 PHP
Thinkphp自定义代码生成工具及用法说明(附下载地址)
2016/05/27 PHP
javascript知识点收藏
2007/02/22 Javascript
JS小功能(onmouseover实现选择月份)实例代码
2013/11/28 Javascript
Javascript中的String对象详谈
2014/03/03 Javascript
使用jQuery动态加载js脚本文件的方法
2014/04/03 Javascript
ajaxFileUpload.js插件支持多文件上传的方法
2014/09/02 Javascript
浅谈JavaScript Array对象
2014/12/29 Javascript
js实现仿京东2级菜单效果(带延时功能)
2015/08/27 Javascript
全面解析JavaScript中的valueOf与toString方法(推荐)
2016/06/14 Javascript
jQuery 表单序列化实例代码
2017/06/11 jQuery
vue子父组件通信的实现代码
2017/07/09 Javascript
vue中的$emit 与$on父子组件与兄弟组件的之间通信方式
2018/05/13 Javascript
electron + vue项目实现打印小票功能及实现代码
2018/11/25 Javascript
记一次vue-webpack项目优化实践详解
2019/02/17 Javascript
原生js添加一个或多个类名的方法分析
2019/07/30 Javascript
layer ui插件显示tips时,修改字体颜色的实现方法
2019/09/11 Javascript
vant 自定义 van-dropdown-item的用法
2020/08/05 Javascript
python socket网络编程步骤详解(socket套接字使用)
2013/12/06 Python
Python中基本的日期时间处理的学习教程
2015/10/16 Python
pytorch cnn 识别手写的字实现自建图片数据
2018/05/20 Python
Python小程序之在图片上加入数字的代码
2019/11/26 Python
通过python 执行 nohup 不生效的解决
2020/04/16 Python
小班评语大全
2014/05/04 职场文书
质量承诺书格式
2014/05/20 职场文书
党的作风建设心得体会
2014/10/22 职场文书
2014超市收银员工作总结
2014/11/13 职场文书
毕业生自荐材料范文
2014/12/30 职场文书
工作证明格式范文
2015/06/15 职场文书
廉洁自律证明
2015/06/24 职场文书
公司董事任命书
2015/09/21 职场文书
2019年励志签名:致拼搏路上的自己
2019/10/11 职场文书
浅谈Nginx 中的两种限流方式
2021/03/31 Servers
字节飞书面试promise.all实现示例
2022/06/16 Javascript