2020-09-03

tech2023-01-22  54

RuntimeError: CUDA out of memory. Tried to allocate 58.00 MiB (GPU 0; 6.00 GiB total capacity; 3.97 GiB already allocated; 12.14 MiB free; 4.59 GiB reserved in total by PyTorch)

最近在进行yolov5的时候出现了如上的情况,之前的模型都是采用tensorflow和keras训练模型,这次使用pytorch训练模型,真是坑不少,一般对于CUDA out of memory的情况可以通过如下几种情况解决,

1.使用 nvidia-smi -l 查看当前的显存使用情况

其实当前可以看到整个显卡的使用情况,如果有相应的占用的话,可以通过kill将其关闭。

2.调小batch_size

每个批次处理的图片过大就很容易导致out of memory,对于tensorflow和keras基本可以解决相关的问题,但是对于pytorch的话即使调到最小batch_size=2时,还是不起作用,这时候就需要考虑其他的情况了

3.查看pytorch和cuda的版本是否匹配

使用方法torch.cuda.is_available(),确认pytorch和cuda是否匹配,如果返回False,需要调整一下cuda或torch的版本,确保他两能够一起使用,如果返回True说明pytorch和cuda的版本是没有问题的。

4.cuda.empty_cache()方法

如果使用的是jupyter notebook,遇到错误时显存并不会被释放,可以shutdown一下,确保没有比其他运行的notebook,在网上查到的方法是可用torch.cuda.empty_cache()删除一些不需要的变量,但是我测试的时候并没有太大的作用,还有一些方法是使用torch.no_grad()去不然梯度反向传播,只是对于测试的时候有用,对于训练模型的话并不可以,梯度都不传播了,怎么更新参数呢,我把这种方法也写一下吧,主要是对于模型的预测部分不进行梯度更新,添加如下所示,但是我尝试了之后也没有好用。

with torch.no_grad(): outputs = cnn(x_train)

5.gpu的指定设置

对于tensorflow 使用GPU,可以通过如下设置

os.environ["CUDA_VISIBLE_DEVICES"] = "0" # 多GPU的话 os.environ["CUDA_VISIBLE_DEVICES"] = "0,1,2"

对于pytorch 使用GPU

torch.cuda.set_device(0)

 

6.当前项目代码是否还使用了keras/tensorflow

对于不同的框架对于GPU的设置也是不一样的,可以参照下面这个链接设置

https://zhuanlan.zhihu.com/p/162839659

7.重启电脑

我用的windows10训练yolov5,使用了所有的都没有解决,并且显存也没有占用,重启之后可以训练了,真是泪奔。。。。。

最新回复(0)