完整报错:
RuntimeError: CUDA out of memory. Tried to allocate 160.00 MiB (GPU 0; 10.76 GiB total capacity; 9.58 GiB already allocated; 135.31 MiB free; 9.61 GiB reserved in total by PyTorch)
问题分析:
内存分配不足:需要160MB,,但GPU只剩下135.31MB。
解决办法:
1.减小batch_size
注意batchsize的调整要配合学习率的调整,一般是正比关系,BS增大两倍,LR增大两倍或者根号二倍。减小也是相应更改。
2.更改使用的显卡
这里大多指在服务器上运行,没有制定显卡,都默认使用第一张,或者多人使用,产生的不足。
3.降低num_workers
num_workers参数是加载数据的线程数目,有可能电脑(服务器)的线程数不满足所配置的参数。
如果电脑是8线程,参数调为8就不合适,可相应降低。但num_worker越小,训练越慢,可权衡后调整。
4.运行torch.cuda.empty_cache()函数
适用于batch_size、num_workers已经设置好,但在重新训练时,却显示内存不够的情况
将函数加在训练开始前即可,或者训练前在终端中import torch
后输入
torch.cuda.empty_cache()
外部
ps -ef | grep train.py | awk ‘{print $2}’ | xargs kill -9
(英文引号,直接复制有问题)
5.释放GPU内存,kill掉没用的进程
具体解决办法----参考链接
在我的理解里,方法4、5感觉是一样的,只不过方法步骤不一样,这里需要看一下torch.cuda.empty_cache()函数的具体原理,后续跟进