解决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判断、获取一张图片主色调的2个实例
Apr 10 Python
利用Python演示数型数据结构的教程
Apr 03 Python
Python的动态重新封装的教程
Apr 11 Python
Python之re操作方法(详解)
Jun 14 Python
pytorch 数据集图片显示方法
Jul 26 Python
python统计中文字符数量的两种方法
Jan 31 Python
Python3基础教程之递归函数简单示例
Jun 07 Python
python内置模块collections知识点总结
Dec 19 Python
Python的赋值、深拷贝与浅拷贝的区别详解
Feb 12 Python
numpy库reshape用法详解
Apr 19 Python
如何使用Python处理HDF格式数据及可视化问题
Jun 24 Python
降低python版本的操作方法
Sep 11 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判断IP并转跳到相应城市分站的方法
2015/03/25 PHP
windows下安装php的memcache模块的方法
2015/04/07 PHP
Symfony2函数用法实例分析
2016/03/18 PHP
javascript URL锚点取值方法
2009/02/25 Javascript
js中if语句的几种优化代码写法
2011/03/12 Javascript
jquery通过load获取文件的内容并跳到锚点的方法
2015/01/29 Javascript
javascript变量声明实例分析
2015/04/25 Javascript
整理Javascript基础语法学习笔记
2015/11/29 Javascript
JS实现对中文字符串进行utf-8的Base64编码的方法(使其与Java编码相同)
2016/06/21 Javascript
深入分析javascript中的错误处理机制
2016/07/17 Javascript
深入理解vue.js双向绑定的实现原理
2016/12/05 Javascript
jQuery html表格排序插件tablesorter使用方法详解
2017/02/10 Javascript
jQuery动态生成不规则表格(前后端)
2017/02/21 Javascript
妙用缓存调用链实现JS方法的重载
2018/04/30 Javascript
JavaScript+H5实现微信摇一摇功能
2018/05/23 Javascript
Web安全之XSS攻击与防御小结
2018/12/13 Javascript
jquery实现的分页显示功能示例
2019/08/23 jQuery
浅谈Vue3 Composition API如何替换Vue Mixins
2020/04/29 Javascript
Node.js API详解之 Error模块用法实例分析
2020/05/14 Javascript
详解vite+ts快速搭建vue3项目以及介绍相关特性
2021/02/25 Vue.js
[36:43]NB vs Optic 2018国际邀请赛小组赛BO1 B组加赛 8.19
2018/08/21 DOTA
[02:08]2018年度CS GO枪械皮肤设计大赛优秀作者-完美盛典
2018/12/16 DOTA
[01:10:27]DOTA2-DPC中国联赛正赛 SAG vs XG BO3 第二场 3月5日
2021/03/11 DOTA
总结python爬虫抓站的实用技巧
2016/08/09 Python
Python反射和内置方法重写操作详解
2018/08/27 Python
python3.8下载及安装步骤详解
2020/01/15 Python
Python新手学习装饰器
2020/06/04 Python
加拿大最大的书店:Indigo
2017/01/01 全球购物
中国茶叶、茶具一站式网上购物商城:醉品茶城
2018/07/03 全球购物
7 For All Mankind官网:美国加州洛杉矶的高级牛仔服装品牌
2018/12/20 全球购物
中职毕业生自我鉴定
2014/09/13 职场文书
会议邀请函
2015/01/30 职场文书
白鹤梁导游词
2015/02/06 职场文书
校长个人总结
2015/03/03 职场文书
整改通知书
2015/04/20 职场文书
Win11安装受阻怎么办? Windows11安装问题与解决方案汇总
2021/11/21 数码科技