#问题描述: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数据(遥感目标检测数据集,训练集大概10g左右,特点是单张图片中目标小且多),训练几个轮次之后会中断程序并报错。
使用yolov7-tiny结构是可以正常训练,使用yolov7标准版会报错,加了注意力机制的yolov7-tiny也会报错
#我的初步解决思路:
1.改batch-size:缩小为8,4,2等,
2.改workers,改为4,2,1等
3.改img-size,将img-size改为【320,320】
以上三种方法可以让训练多几个epochs,但是最多十次左右还是会终止。
4.运行torch.cuda.empty_cache()函数。
在代码中提示报错的位置373行(计算损失函数之前)以及398行添加
if hasattr(torch.cuda, 'empty_cache'): #hasattr() 函数用于判断对象是否包含对应的属性。
torch.cuda.empty_cache()
此时在使用yolov7网络,选择loss_ota作为计算损失函数,选择低batch-size可训练。
这个时候显存的利用率显示较低,但是稍稍提高batch-size,训练一半程序还是会突然报错。
5.超参数的选择,将超参数loss_ota置于0,同时使用方法4的时候,使用yolov7标准版网络可以低batch-size运行,但是训练精度会降低。
另外,网络结构稍复杂一点,或者改进后的网络还是会报错。
#操作环境及配置
ubuntu系统,3090显卡
这是爆内存了,你还是换专业卡吧