[]关于解决pytorch训练神经网络时显存一直增长的问题

这篇具有很好参考价值的文章主要介绍了[]关于解决pytorch训练神经网络时显存一直增长的问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

@[原创]关于解决pytorch训练神经网络时显存一直增长的问题

问题描述

在训练自定义loss和自定义网络结构的一个模型的时候,发现模型和数据都比较简单的情况下,在训练过程中居然把24g的显卡拉爆了显存。

然后使用nvidia-smi -l观察显存变化,发现是有规律的显存一直增加,直到OOM。

问题解决思路

在这个过程中尝试询问了chatgpt,但是发现它提供的解决方案,诸如torch.cuda.memory_cached()/del data 等命令放在每次循环后面并不能解决问题。

所以后面尝试在谷歌进行搜索,找到了下面这篇的知乎的博客:
链接: link.

这篇文章的四种方法其实都没有解决我的问题,但是它的第一种情况给了我一点启发,此外chatgpt在最开始提到的原因也是关键,促成了后面问题的解决。

在直接尝试各种解决手段无果后,我决定自行去查看代码段和显存的使用情况,主要是使用下面这个命令:

print("Memory Allocated:", torch.cuda.memory_allocated() / (1024 ** 2), "MB")

这个相当于代码内部的nvidia-smi可以查看代码运行到这里的时候显存的占用量(这里说的并不严谨,因为还有memory_cached这个命令查看缓存的显存,但是先这么肤浅的使用吧。)

随后我发现了显存的一直增长来自于下面这个语句:

self._update_stats({'Loss/total': loss_iter.item(), 'PSNR/initial': psnr_initial}, batch_size, loader)

回想起之前的那篇知乎博客的第一点解决方案,我把psnr_initial改为了psnr_initial.item(),随后发现占用的内存不会再随着循环的迭代而增长了。

分析

总结来说在_update_stats()这个函数中,它会使用psnr_initial这个tensor,所以如果不适用item()做隔离的话,相当于gpu上有数据一直在被其他函数调用,所以主循环里每一次迭代都无法释放上一次的显存,但是用了item()就可以跟gpu上的数据隔离开,帮助主循环迭代过程的显存正常释放。

所以在遇到同样的问题的时候,朋友们可以主要检查一下每次迭代结束是否有gpu上的数据仍然在被其他的函数调用,比如loss的记录函数。文章来源地址https://www.toymoban.com/news/detail-629871.html

到了这里,关于[]关于解决pytorch训练神经网络时显存一直增长的问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • DHVT:在小数据集上降低VIT与卷积神经网络之间差距,解决从零开始训练的问题

    VIT在归纳偏置方面存在空间相关性和信道表示的多样性两大缺陷。所以论文提出了动态混合视觉变压器(DHVT)来增强这两种感应偏差。 在空间方面,采用混合结构,将卷积集成到补丁嵌入和多层感知器模块中,迫使模型捕获令牌特征及其相邻特征。 在信道方面,引入了MLP中的

    2024年02月08日
    浏览(35)
  • 神经网络训练算法的调用,神经网络中的矩阵运算

    反向传播算法(Backpropagation)是目前用来训练人工神经网络(Artificial Neural Network,ANN)的最常用且最有效的算法。其主要思想是: (1)将训练集数据输入到ANN的输入层,经过隐藏层,最后达到输出层并输出结果,这是ANN的前向传播过程; (2)由于ANN的输出结果与实际结果

    2023年04月08日
    浏览(37)
  • openmv云端训练神经网络自动生成openmv的神经网络模型

    打开openmv工具栏如图所示,点击新数据集  弹出如下界面,这里我选择的是我自己新建的new date文件夹,你们选择自己新建的文件夹即可  接下来我们点击左边红框框起来的地方,可得到中间那个界面,可自己创建名称  左上角就是我创建好的两个,接下来我们点击下面红框

    2024年02月12日
    浏览(27)
  • 利用GPU训练神经网络

    确实训练得要快多了 如果不确定是否有GPU,这种写法更好 判断一下,如果有再执行;这样才在CPU或者GPU上都能跑,优先GPU 修改部分代码 其实模型和损失函数不需另外赋值,但训练和测试部分需要

    2024年01月16日
    浏览(26)
  • 神经网络-pytorch版本

    torch和numpy torch的数学运算 在PyTorch中, Variable 在早期版本中用于自动求导(autograd)的功能,但从PyTorch 0.4.0版本开始, Variable 已经被弃用,取而代之的是 Tensor 的功能。因此,如果你使用的是PyTorch 0.4.0或更新版本,你不再需要使用 Variable 。 以下是 Variable 和普通的变量(如

    2024年02月07日
    浏览(43)
  • 【Pytorch】神经网络搭建

    在之前我们学习了如何用Pytorch去导入我们的数据和数据集,并且对数据进行预处理。接下来我们就需要学习如何利用Pytorch去构建我们的神经网络了。 目录 基本网络框架Module搭建 卷积层 从conv2d方法了解原理 从Conv2d方法了解使用 池化层 填充层 非线性层 线性层 Pytorch里面有一

    2023年04月17日
    浏览(26)
  • 神经网络变得轻松(第二部分):网络训练和测试

    概述 在上一篇名为神经网络变得轻松的文章中,我们曾研究过利用 赫兹量化交易软件配合完全连接的神经网络一起操作的 CNet 构造原理。 在本文中,我将演示一个示例,说明如何在 EA 中利用该类,并在实际条件下评估该类。 1. 定义问题 在开始创建智能交易系统之前,必须

    2024年02月16日
    浏览(31)
  • 机器学习18:训练神经网络-最佳实践

    在【 机器学习17 】中, 笔者介绍了 反向传播算法。反向传播算法 是神经网络最常见的训练算法。它使得梯度下降对于多层神经网络来说是可行的。 TensorFlow 可以自动处理反向传播,因此我们不需要深入了解该算法。要了解其工作原理,请阅读 【 机器学习17

    2024年02月12日
    浏览(34)
  • 神经网络小结:训练的全过程

    这一节我们主要是将之前的知识穿起来,形成一个整体。如果之前的没看过可以回翻一下专栏。但是在整体回归之前,我们还需要学习一个小知识点——随机初始化 在神经网络中,我们大致的训练流程就是:通过前向传播得出当前 θ theta θ 下的假设结果,使用代价函数对比

    2024年02月10日
    浏览(32)
  • PyTorch 神经网络搭建模板

    在 PyTorch 中, Dataset 和 DataLoader 是用来处理数据的重要工具。它们的作用分别如下: Dataset : Dataset 用于存储数据样本及其对应的标签。在使用神经网络训练时,通常需要将原始数据集转换为 Dataset 对象,以便能够通过 DataLoader 进行批量读取数据,同时也可以方便地进行数据

    2023年04月08日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包