为啥带有 TensorFlow 的 Keras 没有使用所有 GPU 内存

Posted

技术标签:

【中文标题】为啥带有 TensorFlow 的 Keras 没有使用所有 GPU 内存【英文标题】:Why Keras with TensorFlow is not using all GPU memory为什么带有 TensorFlow 的 Keras 没有使用所有 GPU 内存 【发布时间】:2018-02-11 21:47:40 【问题描述】:

我在 Windows 10 中使用 Keras 2.0.8 和 TensorFlow 1.3.0。 你知道为什么不使用所有的内存吗?或者至少接近它。

开始运行进程时的输出:

找到具有属性的设备 0:

名称:GeForce GTX 1060

主要:6 次要:1 memoryClockRate (GHz) 1.6705 pciBusID 0000:01:00.0

总内存:6.00GiB

可用内存:4.96GiB

在此示例中(当它因 OOM 崩溃时)显示限制为 5 GB 而不是 6 GB。为什么?

限制:5016036966

使用中:5008119296

最大使用量:5015917568

NumAllocs:329

MaxAllocSize:3879002624

感谢您的帮助!

警察:这是NVIDIA-SMI 结果,而没有运行任何东西,而它

【问题讨论】:

【参考方案1】:

因为它不需要使用所有内存。您的数据保存在您的 RAM 内存中,并且每个批次都复制到您的 GPU 内存中。因此,增加批量大小将增加 GPU 的内存使用量。此外,您的模型大小会影响 Tensorflow 的 GPU 内存使用情况。

如果您想同时运行多个 tensorflow 会话,则不分配所有 GPU 内存实际上非常方便。但是,您也可以决定在 tensorflow 会话中设置 GPU 内存的比例。有关固定 GPU 内存比例或动态内存使用情况的信息,请查看this 问题。

如果您想知道为什么您的 GPU 没有 100% 使用它的计算能力,请查看this 问题。

【讨论】:

Tensorflow 会分配所有 GPU 内存,即使不需要它以加快计算速度。 groups.google.com/forum/#!topic/keras-users/MFUEY9P1sc8。即使我运行一个小型网络,我总是分配相同的 4.96GB,为什么不更多? 显然 tensorflow 不会在您的情况下分配所有内存。我不知道您为什么要分配所有内存,因为您不会获得任何速度。但是,如果您愿意,只需将 tf.GPUOptions 中的 per_process_gpu_memory_fraction 设置为 1(在您开始会话之前) 这似乎是我的问题social.technet.microsoft.com/Forums/windows/en-US/… 将per_process_gpu_memory_fraction 设置为 1 次崩溃,限制为 0.89 并在 6144MiB 中分配 5244MiB【参考方案2】:

请检查您是否安装了keras GPU版本。否则,它将自动检测 cpu 并在其上进行处理。您可以为此使用 Anaconda 平台。 conda install -c anaconda keras-gpu 通过此命令安装 keras GPU。

【讨论】:

以上是关于为啥带有 TensorFlow 的 Keras 没有使用所有 GPU 内存的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Keras (Tensorflow 2.0) 模型在绘制时不包含矩阵乘法的变量?

为啥keras安装以后导入失败?

带有 TensorFlow 后端的 Keras 不使用 GPU

为啥在同一数据集上使用 tensorflow 和 keras 重新训练的 Inception V3 显示出不同的准确性?

带有 TensorFlow 2.4+ 错误的 SHAP DeepExplainer

在 keras(tensorflow 后端)中计算梯度时出错