使用VGG网络训练发生错误RuntimeError: CUDA out of memory解决方案:

简介: 使用VGG网络训练发生错误RuntimeError: CUDA out of memory解决方案:

问题

在使用VGG网络训练Mnisist数据集时,发生错误RuntimeError: CUDA out of memory. Tried to allocate 392.00 MiB (GPU 0; 2.00 GiB total capacity; 1.45 GiB already allocated; 0 bytes free; 1.47 GiB reserved in total by PyTorch) If reserved memory is >> allocated memory try setting max_split_size_mb to avoid fragmentation.  See documentation for Memory Management and PYTORCH_CUDA_ALLOC_CONF。


网络

class VGG(nn.Module):  # 适用于(128,3,224,224)
def __init__(self):

super().__init__()

self.net = nn.Sequential(

          nn.Conv2d(in_channels=1, out_channels=64, kernel_size=3, stride=1, padding=1),

          nn.ReLU(inplace=True),

          nn.MaxPool2d(2),

          nn.Conv2d(in_channels=64, out_channels=128, kernel_size=3, stride=1, padding=1),

          nn.MaxPool2d(2),

          nn.Conv2d(in_channels=128, out_channels=256, kernel_size=3, stride=1, padding=1),

          nn.MaxPool2d(2),

          nn.Conv2d(in_channels=256, out_channels=512, kernel_size=3, stride=1, padding=1),

          nn.Conv2d(in_channels=512, out_channels=512, kernel_size=3, stride=1, padding=1),

          nn.MaxPool2d(2),

          nn.Conv2d(in_channels=512, out_channels=512, kernel_size=3, stride=1, padding=1),

          nn.MaxPool2d(2),

          nn.Flatten(),

          nn.Linear(in_features=512 * 7 * 7, out_features=4096),

          nn.Linear(in_features=4096, out_features=4096),

          nn.Linear(in_features=4096, out_features=1000),

          nn.Linear(in_features=1000, out_features=10),


      )


def forward(self, x):

      out = self.net(x)

return out


报错截图:


方法

尝试1 关闭显卡占用

根据报错(CUDA out of memory.),说明显卡内存不够。于是进入终端查一下memory现在的状态。没有在运行的进程,运行程序错误仍然存在。


尝试2 定时清理内存

在每个训练周期处插入以下代码(定时清内存):

import torch, gc

for epoch in range(100):

...............

gc.collect()

torch.cuda.empty_cache()


尝试3 设置锁页内存pin_memory

pin_memory就是锁页内存,创建DataLoader时,设置pin_memory=True,则意味着生成的Tensor数据最开始是属于内存中的锁页内存,这样将内存的Tensor转义到GPU的显存就会更快一些。

主机中的内存,有两种存在方式,一是锁页,二是不锁页,锁页内存存放的内容在任何情况下都不会与主机的虚拟内存进行交换(注:虚拟内存就是硬盘),而不锁页内存在主机内存不足时,数据会存放在虚拟内存中。显卡中的显存全部是锁页内存,当计算机的内存充足的时候,可以设置pin_memory=True。当系统卡住,或者交换内存使用过多的时候,设置pin_memory=False。因为pin_memory与电脑硬件性能有关,pytorch开发者不能确保每一个人都有高端设备,因此pin_memory默认为False。

尝试4 修改batch_size (问题解决)

最简单最直接的方法就是修改batch_size的大小,从而降低对显卡内存的占用。当将batch_size=4时,程序成功运行。


总结

当网路变得复杂的时候,对计算机硬件资源的要求也会随之变高。在本实验之中,就出现了因为VGG网络模型较为复杂,对计算机GPU的资源要求和消耗也随之变大,于是便出现了CUDA out of memory.GPU内存不够而报错的情况。在计算机硬件资源有限的情况下,只有选择降低batch_size的大小,从而达到计算机处理数据的能力之类。但是当batch_size过低训练出来的模型也会因为实际模型的需求出现一定的问题。简而言之batch size过小,需要花费更多时间,同时梯度震荡严重,不利于收敛;batch size过大,不同batch的梯度方向没有任何变化,容易陷入局部极小值。


这里提供一个免费使用高性能GPU的路径,在计算机资源有限前提下,如果能够使用上Google服务器可以将代码上传到Google Calab(Google colab是一个免费的 Jupyter 笔记本环境,不需要进行任何设置就可以使用,并且完全在云端运行。并且可以免费使用Google的GPU)训练,再将训练好结果下载。

相关实践学习
部署Stable Diffusion玩转AI绘画(GPU云服务器)
本实验通过在ECS上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。
目录
相关文章
|
1月前
|
机器学习/深度学习 PyTorch 算法框架/工具
目标检测实战(一):CIFAR10结合神经网络加载、训练、测试完整步骤
这篇文章介绍了如何使用PyTorch框架,结合CIFAR-10数据集,通过定义神经网络、损失函数和优化器,进行模型的训练和测试。
86 2
目标检测实战(一):CIFAR10结合神经网络加载、训练、测试完整步骤
|
1月前
|
机器学习/深度学习 数据可视化 计算机视觉
目标检测笔记(五):详细介绍并实现可视化深度学习中每层特征层的网络训练情况
这篇文章详细介绍了如何通过可视化深度学习中每层特征层来理解网络的内部运作,并使用ResNet系列网络作为例子,展示了如何在训练过程中加入代码来绘制和保存特征图。
56 1
目标检测笔记(五):详细介绍并实现可视化深度学习中每层特征层的网络训练情况
|
2月前
|
传感器 运维 物联网
蓝牙Mesh网络:连接未来的智能解决方案
蓝牙Mesh网络:连接未来的智能解决方案
260 12
|
9天前
|
存储 安全 网络安全
云计算与网络安全:探索云服务中的信息安全挑战与解决方案
【10月更文挑战第33天】在数字化时代的浪潮中,云计算以其灵活性、可扩展性和成本效益成为企业数字化转型的核心动力。然而,随之而来的网络安全问题也日益突出,成为制约云计算发展的关键因素。本文将深入探讨云计算环境中的网络安全挑战,分析云服务的脆弱性,并提出相应的信息安全策略和最佳实践。通过案例分析和代码示例,我们将展示如何在云计算架构中实现数据保护、访问控制和威胁检测,以确保企业在享受云计算带来的便利的同时,也能够维护其信息系统的安全和完整。
|
18天前
|
存储 安全 网络安全
云计算与网络安全:技术、挑战与解决方案
【10月更文挑战第24天】随着云计算技术的飞速发展,越来越多的企业和个人开始将数据和应用迁移到云端。然而,云服务的安全性问题也日益凸显,成为制约云计算发展的重要因素。本文将深入探讨云计算与网络安全之间的关系,分析当前面临的主要安全挑战,并提出相应的解决方案。通过阅读本文,读者将能够更好地理解云计算环境下的安全问题,并掌握应对策略。
|
1月前
|
机器学习/深度学习 数据采集 算法
目标分类笔记(一): 利用包含多个网络多种训练策略的框架来完成多目标分类任务(从数据准备到训练测试部署的完整流程)
这篇博客文章介绍了如何使用包含多个网络和多种训练策略的框架来完成多目标分类任务,涵盖了从数据准备到训练、测试和部署的完整流程,并提供了相关代码和配置文件。
46 0
目标分类笔记(一): 利用包含多个网络多种训练策略的框架来完成多目标分类任务(从数据准备到训练测试部署的完整流程)
|
1月前
|
机器学习/深度学习 算法 TensorFlow
深度学习笔记(五):学习率过大过小对于网络训练有何影响以及如何解决
学习率是深度学习中的关键超参数,它影响模型的训练进度和收敛性,过大或过小的学习率都会对网络训练产生负面影响,需要通过适当的设置和调整策略来优化。
271 0
深度学习笔记(五):学习率过大过小对于网络训练有何影响以及如何解决
|
1月前
|
存储 监控 安全
解释网络切片:安全挑战与解决方案
解释网络切片:安全挑战与解决方案
48 4
|
1月前
|
机器学习/深度学习 算法
【机器学习】揭秘反向传播:深度学习中神经网络训练的奥秘
【机器学习】揭秘反向传播:深度学习中神经网络训练的奥秘
|
2月前
|
机器学习/深度学习 数据采集 数据可视化
深度学习实践:构建并训练卷积神经网络(CNN)对CIFAR-10数据集进行分类
本文详细介绍如何使用PyTorch构建并训练卷积神经网络(CNN)对CIFAR-10数据集进行图像分类。从数据预处理、模型定义到训练过程及结果可视化,文章全面展示了深度学习项目的全流程。通过实际操作,读者可以深入了解CNN在图像分类任务中的应用,并掌握PyTorch的基本使用方法。希望本文为您的深度学习项目提供有价值的参考与启示。