snufkin~ 2023-04-04 09:44 采纳率: 33.3%
浏览 27
已结题

RuntimeError: CUDA out of memory.

#问题描述:RuntimeError: CUDA out of memory.Tried to allocate 1.86GiB(GPU 3;23.70 GiB total capacity; 20.81 GiB already allocated; 1.10GiB free;20.92 GiB reserved in total by PyTorch)
#代码图片:
使用yolov7训练AI-TOD数据(大概27G左右),训练几个轮次之后会中断程序并报错。
使用yolov7-tiny结构是可以正常训练,使用yolov7标准版会报错

img

#我的初步解答思路:
1.改batch-size:缩小为8,4,2等,
2.改workers,改为4,2,1等
3.改img-size,将img-size改为【320,320】
以上三种方法可以让训练多几个epochs,但是最多十次左右还是会终止。
4.运行torch.cuda.empty_cache()函数。
放在代码之前没有作用,放在每个epoch后面直接报错
#操作环境及配置
ubuntu系统,3090显卡

img

  • 写回答

4条回答 默认 最新

  • Leodong. 2023-04-04 09:58
    关注

    该回答通过自己思路及引用到各个渠道搜索综合及思考,得到内容具体如下:

    根据您提供的信息,这个错误是由于GPU内存不足引起的。在训练yolov7标准版时,需要更多的GPU内存,而您的GPU内存已经被占用了大约20.81 GiB,只剩下1.10 GiB的空闲内存。因此,您可以尝试以下方法来解决这个问题:
    
    1. 使用更小的batch size。您已经尝试过这个方法了,可以继续缩小batch size,比如将其设置为1或2。
    
    2. 减小模型的复杂度。如果您的模型太复杂,可以尝试减少卷积层的数量或者使用更小的卷积核。
    
    3. 减小输入图片的大小。您已经尝试过这个方法了,可以继续缩小输入图片的大小,比如将其设置为224x224。
    
    4. 使用更少的worker数。您已经尝试过这个方法了,可以继续减少worker数,比如将其设置为1或2。
    
    5. 使用多GPU训练。如果您的电脑有多个GPU,可以尝试使用多GPU训练来增加GPU内存。
    
    6. 使用混合精度训练。可以尝试使用混合精度训练来将模型参数和梯度转换为半精度浮点数,从而减少GPU内存的使用。
    
    7. 减小模型的输入数据维度。可以通过对图片做降采样或裁剪等方式来减小模型的输入数据维度。
    
    8. 在训练过程中定期调用torch.cuda.empty_cache()函数。该函数可以释放一些没有被使用的GPU内存,但是需要在训练代码中适当的位置调用,否则可能会导致程序崩溃。
    
    以上是一些可能有用的解决方法,您可以尝试其中的一些或者多个来解决这个问题。另外,您可以使用nvidia-smi命令来查看GPU内存的使用情况,以便更好地了解训练过程中GPU内存的变化。
    

    如果以上回答对您有所帮助,点击一下采纳该答案~谢谢

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 4月22日
  • 已采纳回答 4月14日
  • 创建了问题 4月4日

悬赏问题

  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分
  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题
  • ¥15 linux驱动,linux应用,多线程