【问题标题】:Caffe | Check failed: error == cudaSuccess (2 vs. 0) out of memory咖啡 |检查失败:错误 == cudaSuccess (2 vs. 0) 内存不足
【发布时间】:2016-02-20 19:07:54
【问题描述】:

我正在尝试在 Caffe 上训练一个网络。我的图像尺寸为 512x640。批量大小为 1。我正在尝试实现 FCN-8s

我目前在具有 4GB GPU 内存的 Amazon EC2 实例 (g2.2xlarge) 上运行它。但是当我运行求解器时,它会立即抛出一个错误

Check failed: error == cudaSuccess (2 vs. 0)  out of memory
*** Check failure stack trace: ***
Aborted (core dumped)

有人可以帮我从这里继续吗?

【问题讨论】:

  • 两种解决方案:一,你可以尝试减小你的batch size,但是你的batch size=1,没用,然后你可以rezize你的图片,减小你的图片大小会很有用;二,你可以购买更好的 GPU。

标签: amazon-web-services neural-network deep-learning caffe


【解决方案1】:

您得到的错误确实是内存不足,但不是 RAM,而是 GPU 内存(请注意,错误来自 CUDA)。
通常,当 caffe 内存不足时 - 首先要做的是减小批量大小(以gradient accuracy 为代价),但由于您已经处于批量大小 = 1...
您确定 TRAIN 和 TEST 阶段的批量大小为 1?

【讨论】:

  • 我猜是的。是的,训练和测试阶段的批量大小都是 1。我想我已经将训练图像的大小调整为更小的东西并尝试一下。但是为什么 4GB 的 GPU 内存会变得更少空间呢?上面写着The total number of bytes read was 537399810,比 4GB 小得多。
  • 我只是将图像和标签的大小缩小到大约 256x320。它运行成功。我看到它使用了大约 3.75 GB 的 GPU 内存。感谢您的帮助。
  • 如果batch_size已经为1,添加dropout层有用吗? @Shai
  • @thigi 这无关。即使 batch_size 为 1,您也可以添加 dropout,dropout 不会丢弃整个样本,而是修剪一些输出神经元。您可以使用iter_size 获得大于 1 的实际批量大小。见this thread
  • 这与我的问题无关,但您的回答提示了我为什么内存不足。我的测试批次大小大于我的训练批次大小,因此使测试批次大小更小修复了我的错误。谢谢你!
【解决方案2】:

Caffe 可以使用多个 GPU。这仅在 C++ 接口中受支持,在 python 中不支持。您还可以启用 cuDNN 以减少内存占用。

https://github.com/BVLC/caffe/blob/master/docs/multigpu.md

【讨论】:

    【解决方案3】:

    在具有以下配置的 PC 上运行 Deeplab v2 时,我遇到了类似的问题:

    ----------
    OS: Ubuntu 18.04.3 LTS (64-bit)
    ----------
    Processor: Intel Core i7-6700k CPU @ 4.00 GHz x 8
    ----------
    GPU: GeForce GTX 780 (3022 MiB)
    ----------
    RAM : 31.3 GiB
    ----------
    

    将测试和训练批次大小都更改为 1 对我没有帮助。但是,改变输出图像的尺寸确实做到了!

    【讨论】: