为啥带有 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) 模型在绘制时不包含矩阵乘法的变量?
带有 TensorFlow 后端的 Keras 不使用 GPU
为啥在同一数据集上使用 tensorflow 和 keras 重新训练的 Inception V3 显示出不同的准确性?