我成功地训练了网络,但在验证过程中得到了这个错误:
运行时错误: CUDA 错误: 内存不足
发生错误是因为 GPU 内存不足。
解决这个问题的一种方法是减小批量大小,直到代码运行时没有出现此错误。
可能出于一些原因,我尝试在以下列表中报告:
biggest_batch_first
此外,我建议您查看官方 PyTorch 文档: https://pytorch.org/docs/stable/notes/faq.html
1.. When you only perform validation not training, 你不需要计算向前和向后阶段的梯度。 在这种情况下,您的代码可以位于
with torch.no_grad(): ... net=Net() pred_for_validation=net(input) ...
以上代码不使用 GPU 内存
如果在代码中使用 + = 运算符, 它可以在您的梯度图中不断累积梯度。 在这种情况下,需要像下面的站点那样使用 float () Https://pytorch.org/docs/stable/notes/faq.html#my-model-reports-cuda-runtime-error-2-out-of-memory
即使 docs 指南使用 float () ,对于我来说,item ()也是这样工作的
entire_loss=0.0 for i in range(100): one_loss=loss_function(prediction,label) entire_loss+=one_loss.item()
如果在训练代码中使用 for 循环, 数据可以持续到整个 for 循环结束。 因此,在这种情况下,可以在执行 Optimizer.step ()之后显式删除变量
for one_epoch in range(100): ... optimizer.step() del intermediate_variable1,intermediate_variable2,...
最好的办法是找到启用 gpu 内存的进程,然后关闭它:
查找 python 进程的 PID:
nvidia-smi
复制 PID 并通过以下方式杀死它:
sudo kill -9 pid
如果有人因为 fast.ai 到达这里,那么像 ImageDataLoaders这样的装载机的批量大小可以通过 bs=N来控制,其中 N 是批量的大小。
ImageDataLoaders
bs=N
我的专用 GPU 仅限于2GB 内存,在下面的例子中使用 bs=8可以解决我的问题:
bs=8
from fastai.vision.all import * path = untar_data(URLs.PETS)/'images' def is_cat(x): return x[0].isupper() dls = ImageDataLoaders.from_name_func( path, get_image_files(path), valid_pct=0.2, seed=42, label_func=is_cat, item_tfms=Resize(244), num_workers=0, bs=) learn = cnn_learner(dls, resnet34, metrics=error_rate) learn.fine_tune(1)
我的电脑也遇到了同样的问题。您所需要做的就是定制适合您的计算机的 cfg 文件。原来我的计算机采取的图像大小低于600 X 600,当我调整相同的配置文件,程序运行顺利
我也有同样的问题,这个代码对我很有用:
import gc gc.collect() torch.cuda.empty_cache()
我是个火炬使用者。在我的案例中,这个错误信息的原因实际上不是由于 GPU 内存,而是由于 Pytorch 和 CUDA 之间的版本不匹配。
检查原因是否真的是由于你的 GPU 内存,通过以下代码。
import torch foo = torch.tensor([1,2,3]) foo = foo.to('cuda')
如果上面的代码仍然出现错误,最好根据 CUDA 版本重新安装 Python。(就我而言,这解决了问题。) 安装链接
类似的情况也会发生在 Tensorflow/Kera。
下面的代码解决了这个问题:
import os os.environ['CUDA_VISIBLE_DEVICES']='2, 3'
如果你在 Google Colab 中得到这个错误,请使用以下代码:
import torch torch.cuda.empty_cache()
在根文件夹的 Terminal 中键入 sudo reboot,等待5分钟,然后再次运行它。
sudo reboot
不知道这个对你有没有帮助,但是这个解决了我的问题:
export PYTORCH_CUDA_ALLOC_CONF=max_split_size_mb:128
这个帖子里的其他东西都没用。
对我来说,我删除了一些文件在 c 驱动器,以获得更多的自由空间,它解决了这个问题。
根据我的经验,这不是一个典型的 CUDA OOM 错误,因为 PyTorch 试图在 GPU 上分配比目前更多的内存。
泄露的信息是错误消息中明显缺少以下文本。
尝试分配 XXX GiB (GPU Y; XXX GiB 总容量; yyy MiB 已经分配; zzz GiB free; PyTorch 保留的 aaa MiB 总容量)
根据我的经验,这是 Nvidia 驱动程序的问题。对我来说,重新启动总是解决了这个问题,但有时候重新启动是不可能的。
重新启动的一个替代方案是关闭所有 Nvidia 进程并手动重新加载驱动程序。我总是参考 Comzyh写的 这个问题的 不被接受的 强 > 答案时,执行的驱动程序周期。希望这能帮助陷入困境的人。