pytorch: 四种方法解决RuntimeError: CUDA out of memory. Tried to allocate ... MiB_cuda out of memory. tried to allocate 1.38 gib (gp-程序员宅基地

技术标签: cuda  debug  Bug处理  pytorch  

Bug:RuntimeError: CUDA out of memory. Tried to allocate … MiB

解决方法:

法一:

调小batch_size,设到4基本上能解决问题,如果还不行,该方法pass。

法二:

在报错处、代码关键节点(一个epoch跑完…)插入以下代码(目的是定时清内存):

import torch, gc

gc.collect()
torch.cuda.empty_cache()

法三(常用方法):

在测试阶段和验证阶段前插入代码 with torch.no_grad()(目的是该段程序不计算参数梯度),如下:

def test(model,dataloader):
    model.eval()
    with torch.no_grad(): ###插在此处
        for batch in tqdm(dataloader):
			……

法四(使用的别人的代码时):

如果怎么修改,都会出现题中bug,甚至跑了几轮之后突然出现 cuda out of
memory,查看代码中是否存在一下代码(通常出现在main.py 或者数据加载的py文件中:

kwargs = {
    'num_workers': 6, 'pin_memory': True} if torch.cuda.is_available() else {
    }

将"pin_memory": True改为False,具体原因原博

pin_memory就是锁页内存,创建DataLoader时,设置pin_memory=True,则意味着生成的Tensor数据最开始是属于内存中的锁页内存,这样将内存的Tensor转义到GPU的显存就会更快一些。
主机中的内存,有两种存在方式,一是锁页,二是不锁页,锁页内存存放的内容在任何情况下都不会与主机的虚拟内存进行交换(注:虚拟内存就是硬盘),而不锁页内存在主机内存不足时,数据会存放在虚拟内存中。显卡中的显存全部是锁页内存,当计算机的内存充足的时候,可以设置pin_memory=True。当系统卡住,或者交换内存使用过多的时候,设置pin_memory=False。因为pin_memory与电脑硬件性能有关,pytorch开发者不能确保每一个炼丹玩家都有高端设备,因此pin_memory默认为False。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/xiyou__/article/details/118529350

智能推荐

R语言入门——NA、NAN、Inf(缺失值的识别)_r语言na和nan-程序员宅基地

文章浏览阅读2.7w次,点赞15次,收藏47次。目录00引言1、Inf2、NAN(Not a Number)3、NA与逻辑运算符4、总结00引言这篇的主角是R语言中缺失值(NA)的识别与提取。先介绍NAN、Inf及其运算。在最终介绍缺失值(NA),毕竟重要的都压轴嘛。1、Inf在实数轴上除了确定的有限点,还有两个无限:正无穷、负无穷。用Inf、-Inf表示。> Inf[1] Inf> -Inf[1] -Inf>..._r语言na和nan

Linux CentOS7 安装 Qt 5.9.2-程序员宅基地

文章浏览阅读1.8k次,点赞2次,收藏7次。Linux CentOS7 安装 Qt 5.9.2 参考链接 http://doc.qt.io/qt-5/linux.htmlsudo yum groupinstall "C Development Tools and Libraries"sudo yum install libgl libgl-develsudo yum install mesa-libGL-devel mesa-libG..._centos7 #error "qt requires c++11 support

android studio 报错 AAPT: error: style attribute ‘attr/colorPrimary (aka com._aapt: error: attribute android:style not found.-程序员宅基地

文章浏览阅读1.7w次,点赞5次,收藏4次。是因为把这个 implementation 'androidx.appcompat:appcompat:1.2.0' 给删掉了。dependencies { implementation 'androidx.appcompat:appcompat:1.2.0'}_aapt: error: attribute android:style not found.

2023编程语言趋势_各程序设计语言最新发展趋势-程序员宅基地

文章浏览阅读3.5w次,点赞73次,收藏121次。Python持续霸榜,PHP依旧颓势,Java雄风不再,Rust热度不减,汇编迅速崛起,C语言地位稳固_各程序设计语言最新发展趋势

前方高能!2023开放原子开发者大会亮点攻略,一触即发-程序员宅基地

文章浏览阅读5.1k次,点赞25次,收藏22次。12月16-17日中国 · 无锡。

layui框架学习(35:数据表格_列参数设置)_layui表格-程序员宅基地

文章浏览阅读2.6k次。学习并记录layui框架中内置模块的数据表格模块中与列相关的主要参数设置方式。_layui表格

随便推点

【小白学PyTorch】 2.浅谈训练集验证集和测试集-程序员宅基地

文章浏览阅读2.8k次。文章目录:经验误差与过拟合评估方法 经验误差与过拟合 关键词:错误率(error rate),精度(accuracy)。错误率好理解,就是m个样本中,a个样本分类错误,则错误率E = a..._训练集和验证集精度

jQueryによるフォームのデザインの基礎(前編)-程序员宅基地

文章浏览阅读3.5k次。前回まではjQueryの基本的な使い方である、「セレクターで(X)HTML要素を指定し、イベントが発生したタイミングで(X)HTMLやCSSを書き換える」プログラムの書き方を紹介してきました。jQueryにはほかにも、Webページを使いやすくする便利な機能が用意されています。今回からは、これまでに触れていない特別な機能を紹介していきましょう。 第8回は、「問い合わせフォーム」など、商用サイトに

Delphi-XE5-手势操作-Gestures-使用方法_delphi安卓添加手势-程序员宅基地

文章浏览阅读4.8k次。Delphi-XE5-手势操作-Gestures-使用方法一、首先转载一下别人的方法介绍:今天尝试了TTabControl的使用。在很多Android的app中,首次启动时都使用选项卡模式进行产品介绍,用户通过向左滑动,改变选项卡。在xe5下这项工作由TTabControl控件完成,如下图: 1、TTabControl外观TTabContro_delphi安卓添加手势

cut命令-程序员宅基地

文章浏览阅读3.9k次,点赞7次,收藏27次。cut命令_cut命令

Web3.0时代什么时候到来,Web3.0有什么机会?_社交网络 web3.0-程序员宅基地

文章浏览阅读6.1k次,点赞65次,收藏89次。什么是web3.0?web3.0和web2.0以及web1.0有什么不一样?web3.0需要哪些技术支撑?web3.0有哪些应用场景?web3.0什么时候到来?普通人有哪些机会?开发者需要掌握哪些开发技术?随着科技的飞速发展,互联网也在不断演变。从Web1.0到Web2.0,我们已经见证了互联网从单向信息传递到用户参与互动的转变。而现在,我们正站在迈向Web3.0时代的门槛上。今天本文就来探讨相关话题。_社交网络 web3.0

帆软报表 出现多余空白页_帆软打印出现空白页-程序员宅基地

文章浏览阅读1.1w次。. 描述若您的模板内容明明是一页就可以显示出来,但是分页预览时却出来两页,而第二页却没有数据是空白页,原因是您的模板中有多余的空白格没有删除。这种情况可能由两种原因引起,一种是空白单元格导致使其有多余的空白页,另外一种情况是制作的模板中有多余的空白sheet。2.问题的原因2.1空白单元格导致使其有多余的空白页示例:如:如下您在 H2 单元格填上数据并设置格式后,删除该..._帆软打印出现空白页