Google Colab 上的 GPU 内存不足错误消息

Posted

技术标签:

【中文标题】Google Colab 上的 GPU 内存不足错误消息【英文标题】:GPU out of memory error message on Google Colab 【发布时间】:2020-05-04 10:36:49 【问题描述】:

我在 Google Colab 上使用 GPU 来运行一些深度学习代码。

我已经完成了 70% 的培训,但现在我不断收到以下错误:

RuntimeError: CUDA out of memory. Tried to allocate 2.56 GiB (GPU 0; 15.90 GiB total capacity; 10.38 GiB already allocated; 1.83 GiB free; 2.99 GiB cached)

我试图理解这意味着什么。它是在谈论RAM内存吗?如果是这样,代码应该和一直在做的一样运行,不是吗?当我尝试重新启动它时,内存消息立即出现。为什么我今天启动它时会使用比我昨天或前一天启动它时更多的 RAM?

或者这个消息是关于硬盘空间的?我可以理解,因为代码会在执行过程中保存内容,因此硬盘使用量是累积的。

任何帮助将不胜感激。


因此,如果只是 GPU 内存不足 - 有人可以解释为什么错误消息显示 10.38 GiB already allocated - 当我开始运行某些东西时,怎么可能已经分配了内存。会不会被别人使用?我只需要等待稍后再试吗?

这是我运行代码时 GPU 使用情况的屏幕截图,就在它耗尽内存之前:


我发现this post 中人们似乎遇到了类似的问题。当我运行该线程上建议的代码时,我看到:

Gen RAM Free: 12.6 GB  | Proc size: 188.8 MB
GPU RAM Free: 16280MB | Used: 0MB | Util   0% | Total 16280MB

这似乎表明有 16 GB 的可用 RAM。

我很困惑。

【问题讨论】:

"GPU 0" 应该是一个非常明显的线索——你的 GPU 内存用完了 @talonmies GPU0 指第一个逻辑 GPU(GPU0、GPU1、GPU2 等) 【参考方案1】:

您的 GPU 内存不足。如果您正在运行 python 代码,请尝试在您的代码之前运行此代码。它将显示您拥有的内存量。请注意,如果您尝试加载大于总内存的图像,它将失败。

# memory footprint support libraries/code
!ln -sf /opt/bin/nvidia-smi /usr/bin/nvidia-smi
!pip install gputil
!pip install psutil
!pip install humanize

import psutil
import humanize
import os
import GPUtil as GPU

GPUs = GPU.getGPUs()
# XXX: only one GPU on Colab and isn’t guaranteed
gpu = GPUs[0]
def printm():
    process = psutil.Process(os.getpid())
    print("Gen RAM Free: " + humanize.naturalsize(psutil.virtual_memory().available), " |     Proc size: " + humanize.naturalsize(process.memory_info().rss))
    print("GPU RAM Free: 0:.0fMB | Used: 1:.0fMB | Util 2:3.0f% | Total     3:.0fMB".format(gpu.memoryFree, gpu.memoryUsed, gpu.memoryUtil*100, gpu.memoryTotal))
printm()

【讨论】:

【参考方案2】:

Google Colab 资源分配是动态的,基于用户过去的使用情况。假设如果一个用户最近使用的资源比较多,而一个新用户使用 Colab 的频率较低,那么他在资源分配上会相对优先。

因此,要充分利用 Colab,请关闭所有 Colab 选项卡和所有其他活动会话,然后重新启动您要使用的运行时。你肯定会得到更好的 GPU 分配。

如果您正在训练 NN,但仍然面临同样的问题,请尝试减少批量大小。

【讨论】:

关闭所有其他活动的 Colab 选项卡 结合将批量大小从 16 减少到 8 对我有用。荣誉,伙计!【参考方案3】:

尝试将批量大小减少到 8 或 16。它对我有用

【讨论】:

【参考方案4】:

就像对使用 Google Colab 的其他人的回答一样。当我将它用于我的深度学习课程时,我经常遇到这个问题。我开始为 Google Colab 付费,它立即开始允许我运行我的代码。然而,这并不能完全阻止问题。我开始使用 Google Colab 进行研究并再次遇到此错误!我开始在 Google Colabs 网站上进行研究,发现即使为 Google Colab 付费的人也存在 GPU 使用限制。为了测试这一点,我尝试使用我很少使用的辅助 gmail 帐户。果然完美运行……

简而言之。与辅助电子邮件共享您的代码或设置新的电子邮件帐户。使用辅助帐户登录 Colab。如果这对你们中的任何人有用,请在下面发表评论,以便人们意识到这一点。我发现它非常令人沮丧,并且为此错误浪费了很多时间。

【讨论】:

您是否为您的辅助帐户订阅了 Google Colab?【参考方案5】:

当出现 CUDA 内存不足错误时,我正尝试使用经过训练的模型来预测测试数据集(约 17,000 个条目)。

减少批处理大小 32 > 4 对我不起作用,我能够看到运行操作所需的内存并没有减少,即使批处理大小发生了变化。

对我有用的是将测试数据集大小减小为更小的块,然后将预测输出合并回组合数据帧。

【讨论】:

【参考方案6】:

解决这个问题的技术很少:

    减少批量大小,假设你有 1000 减少到 700 或 500,重新启动运行时 进入运行时-> 恢复出厂设置运行时 减少 num_worker

【讨论】:

以上是关于Google Colab 上的 GPU 内存不足错误消息的主要内容,如果未能解决你的问题,请参考以下文章

如何确保所有 PyTorch 代码充分利用 Google Colab 上的 GPU

Google colab 上的结果与本地结果不同

Colab Pro+ 没有额外的内存

colab使用总结

Google colab查看gpu

如何查找 Google COLAB GPU 中的内核数?