使用Pytorch训练模型出现RuntimeError: CUDA out of memory Tried to allocate 3.47GiB (GPU 0; 8 GiB total capacity; ....
训练: 由于GPU显存资源有限,训练输入的batchsize不能过大,过大会导致out of memory错误。
方案一: 将batch_size减小
显卡RTX2080,8G内存,发现将batch_size从16--->8-->6 都出现各种内存不足错误,最后改成4才正常。然而针对yolo5x模型训练一个epoch需要大约两个多小时,yolo5x6就更慢了接近3小时,这太慢了,无法忍受。
看上去也没有发挥计算的最大性能。
方案二:调整数据加载线程数
(--workers 即 maximum number of dataloader worker
因为我的电脑CPU是12核心线程,所以我为了提速,用了全部12线程,这在mxnet框架训练时非常有效,能明显提高训练速度;然而在pytorch训练时,发现很容易出现OOM错误。
将batch_size从4改为8,worker数据加载线程数从12改为8,终于顺利了!!而且速度明显提高一倍,一个epoch大约70分钟。
Epoch gpu_mem box obj cls total targets img_size
0/299 5.66G 0.0527 0.05836 0.05643 0.1675 46 640: 57%|█████▋ | 8494/14897 [39:47<29:21, 3.63it/s]