【程序错误-显存不足】RuntimeError: CUDA out of memory. Tried to allocate 4.00 GiB

1. 问题

RuntimeError: CUDA out of memory. Tried to allocate 4.00 GiB
(GPU 0: 23.65 GiB total capacity: 19.43 GiB already allocated:2.41 GiB free;19.49 GiB reserved in total by PyTorch) If reserved memory is allocated memory setting max_split_size_mb to avoid fragmentation.See documentation for Memory Management and PYTORCH_CUDA_ALLOC_CONF

2. 解决方法

2.1 租服务器(试过有用)

在这里插入图片描述

2.2 减小batchsize

减少每次训练或推理时的批次大小,以降低显存的需求。较小的批次大小可能会增加训练时间,但可以减少显存压力。假设,B=1了,那就得想其他方法了。

2.3 减少模型大小

如果你使用的是大型模型,可以尝试减少模型的大小,以减少显存使用量。这可以通过减少网络层数、减少隐藏单元数量或使用更小的嵌入向量等方式实现。

使用更低精度的数据类型:将模型参数和激活值从32位浮点数(float32)转换为16位浮点数(float16),可以减少显存的使用。在PyTorch中,你可以使用.half()方法将模型转换为使用半精度浮点数。

2.3 检查模型本身没有发现错误,最终确认是验证集评估阶段的张量计算非常占用空间。

参考:pytorch运行错误:CUDA out of memory. [已解决]

2.3.1 可以对利用torch.tensor().detach().cpu().numpy()转为numpy,在cpu上进行loss和acc的计算

2.3.2 直接对评估阶段使用with torch.no_grad():

2.4 释放内存

在报错的哪一行代码的上面,加上下面两行代码,释放无关的内存。

if hasattr(torch.cuda, 'empty_cache'):
	torch.cuda.empty_cache()

或者:

import torch

for epoch in range(num_epochs):
    # 在每个epoch开始或结束时释放不必要的内存
    # 在每个batch结束后也可以加上这一行代码
    torch.cuda.empty_cache()

    # 训练循环
    for batch_idx, (data, target) in enumerate(train_loader):
        # 训练模型

# 在训练结束后再次释放内存
torch.cuda.empty_cache()

2.5 使用多卡训练

如果你有多个GPU可用,可以尝试使用多卡训练。这样可以将模型的不同部分分配到不同的GPU上,从而减少单个GPU上的显存需求。

参考

[1] 解决:RuntimeError: CUDA out of memory. Tried to allocate 2.00 MiB
[2] RuntimeError: CUDA out of memory. Tried to allocate 20.00 MiB (GPU 0; 4.00 GiB total capacity; 2.44
[3] 爆显存:RuntimeError: CUDA out of memory. Tried to allocate 5.66 GiB (GPU 0; 12.00 GiB total capacity; 2

  • 20
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这个错误是由于CUDA内存不足导致的。根据引用\[1\]和引用\[2\]的信息,你的GPU总容量为4.00 GiB或10.76 GiB,但已经分配了2.34 GiB或1.82 GiB的内存,剩余的内存不足以分配14.00 MiB的内存。这可能是由于你的模型或数据的规模过大,导致内存不足。你可以尝试减小batch size或者使用更小的模型来减少内存的使用。另外,你还可以尝试设置max_split_size_mb参数来避免内存碎片化。关于内存管理和PYTORCH_CUDA_ALLOC_CONF的更多信息,请参考PyTorch的文档。 此外,根据引用\[3\]的信息,你还可以通过手动杀死占用GPU内存的进程来释放内存。你可以使用kill命令加上进程的PID来终止该进程,例如kill -9 31272。 综上所述,你可以通过减小batch size、使用更小的模型、设置max_split_size_mb参数或手动杀死占用内存的进程来解决CUDA内存不足的问题。 #### 引用[.reference_title] - *1* [已解决yolov5报错RuntimeError: CUDA out of memory. Tried to allocate 14.00 MiB](https://blog.csdn.net/Code_and516/article/details/129798540)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [解决RuntimeError: CUDA out of memory. Tried to allocate 14.00 MiB](https://blog.csdn.net/qq_43733107/article/details/126876755)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值