torch.cuda.OutOfMemoryError: CUDA out of memory. Tried to allocate 50.00 MiB (GPU 0; 23.69 GiB total

问题描述

        这个问题的出现还是比较常见:torch.cuda.OutOfMemoryError: CUDA out of memory. Tried to allocate 50.00 MiB (GPU 0; 23.69 GiB total capacity; 15.74 GiB already allocated; 2.44 MiB free; 15.87 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

原因分析及解决办法

        这个错误信息表明PyTorch应用程序在尝试分配额外的GPU内存时发生了CUDA内存不足错误。错误消息提供了一些有关当前GPU内存状态的信息,以及一些建议的解决方法。以下是一些可能的原因和解决方法:

  1. 内存耗尽原因

    • 已分配内存过多:你的应用程序已经在GPU上分配了相当数量的内存,导致GPU内存不足。这可以是由于模型、张量、缓冲区或其他资源占用了大量内存引起的。
  2. 解决办法

    • 减小批量大小:减少每个批次的大小,以降低GPU内存使用。
    • 模型优化:使用更小的模型或压缩模型以减少内存占用。
    • 释放未使用的内存:确保在使用完张量或模型之后及时释放它们,可以使用del关键字或torch.cuda.empty_cache()来释放内存。
    • 使用梯度累积:如果你的模型对于给定的批次大小内存不足,你可以考虑使用梯度累积,将多个小批次的梯度相加,以减少内存占用。
  3. max_split_size_mb设置

    • 错误消息中提到了 "max_split_size_mb",这是一个用于避免内存碎片化的设置。你可以尝试调整这个值,但通常情况下,不需要手动设置它。根据你的应用程序和硬件情况,它可能需要设置为更大或更小的值。
  4. 内存管理

    • 阅读PyTorch的内存管理文档,了解如何更有效地管理GPU内存,包括使用torch.cuda.empty_cache()来显式释放未使用的内存。
  5. 硬件问题

    • 有时,内存不足的问题可能与硬件相关。确保你的GPU驱动程序和CUDA版本与PyTorch兼容,且没有硬件故障。

        总之,解决这个问题通常需要仔细管理你的模型和数据,以确保在GPU上有效地使用内存。根据你的具体情况,你可能需要组合多种解决方法来克服内存不足问题。

        我的解决办法是直接把batchsize减半即可解决

扩展阅读

         CUDA out of memory引发的原因:GPU显存占用率和存入的数据尺寸成正相关,越大的数据占用显存越多,这其实是废话,但是把这句话反过来:越小的数据占用显存越小吗?答案是否的。事实上,这是因为CUDA运行时,其固件会占用一定的显存,在本机软硬件环境下是448M,不同的CUDA版本或显卡型号固件显存不同。换言之,只要使用了GPU,就至少会占x xx M的显存,且这部分显存无法被释放。

【已解决】探究CUDA out of memory背后原因,如何释放GPU显存?_cuda清理指定gpu内存-CSDN博客文章浏览阅读2.9w次,点赞49次,收藏120次。本文探究CUDA的内存管理机制,总结RuntimeError: CUDA out of memory的背后原因,并给出解决方案_cuda清理指定gpu内存https://blog.csdn.net/frigidwinter/article/details/130033162———————————————
版权声明:本文为CSDN博主「Mr.Winter`」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/frigidwinter/article/details/130033162

完结撒花

        如果看不到远方,我就会相信我的人生本就该一片祥和

  • 11
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值