【问题标题】:How to solve ""RuntimeError: CUDA out of memory."? Is there a way to free more memory?如何解决““RuntimeError: CUDA out of memory.”?有没有办法释放更多的内存?
【发布时间】:2019-12-11 03:49:41
【问题描述】:

在这种情况下,我在 VM 上使用 jupyter notebook 来训练一些 CNN 模型。 VM 有 16v CPU 和 60GB 内存。我刚刚安装了 NVIDIA TESLA P4 以获得更好的性能。但它总是给出像"RuntimeError: CUDA out of memory. Tried to allocate 196.00 MiB (GPU 0; 7.43 GiB total capacity; 2.20 GiB already allocated; 180.44 MiB free; 226.01 MiB cached)"这样的错误

为什么会这样?系统很干净。我想知道为什么我只有这么少的可用内存?

我认为GPU设置没有错误

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 440.33.01    Driver Version: 440.33.01    CUDA Version: 10.2     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  Tesla P4            Off  | 00000000:00:04.0 Off |                    0 |
| N/A   38C    P0    22W /  75W |      0MiB /  7611MiB |      2%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+

【问题讨论】:

  • 为您的问题添加更多描述。您正在使用哪个库 - TensorFlow、Keras 或任何其他库。共享您指定 GPU 的代码段(如果您是)。对于 TensorFlow,您可以通过传递“per_process_gpu_memory_fraction”标志来限制 GPU 内存使用。
  • 尝试减小批量大小?可能到 2 或 8,只是一个命中和试验,如果它是 GPU 问题或代码问题?

标签: python tensorflow jupyter-notebook gpu


【解决方案1】:

当一个进程在 GPU 上分配内存时,该内存只能由该进程或在它终止时释放。如果您看到 CUDA 内存不足错误但没有其他任何东西在运行,那么我建议您使用 nvtop 之类的工具来确定谁在占用您的 CUDA 内存。它看起来像这样:

在底部您可以看到 GPU 内存和进程命令行。在上面的示例中,突出显示的绿色进程占用了 84% 的 GPU RAM。您可以使用向上/向下箭头选择进程并按 F9 终止该进程。有时,当我运行训练脚本时,它们不会被终止,并且会显示在此处占用 CUDA 内存。

注意:nvtop 安装在 Ubuntu 18 上有点涉及,但您可以使用的其他工具是 gpustat,它只显示 pid。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-24
    • 2019-06-19
    • 2022-12-12
    • 2022-09-28
    • 2019-04-28
    • 1970-01-01
    • 2019-11-25
    • 1970-01-01
    相关资源
    最近更新 更多