【问题标题】:GPU underutilized training a CNNGPU 未充分利用训练 CNN
【发布时间】:2018-04-18 08:26:14
【问题描述】:

我想做的是重新训练 VGG16 使用带有 Tensorflow 后端的 Keras 识别新型图像数据。

但训练过程对我来说似乎很慢,在任务管理器中检查我的 GPU 性能后,我觉得我的 GPU 几乎没有被使用。

这是我的代码:https://hastebin.com/pepozayutu.py

这是我控制台中的输出:https://hastebin.com/uhonugenej.md

这是我的任务管理器在训练期间的样子:https://imgur.com/a/jRJ66

正如您所见,GPU 几乎没有做任何事情,为什么我的训练这么慢?尝试不同的设置很痛苦,因为每次训练需要 20-60 分钟,具体取决于 epoch 的数量。

我已经安装了 Tensorflow-gpu 1.7.0、cuDNN 7.0.5、CUDA 9.0 和 Keras 2.1.5。我正在运行 NVIDIA GeForce 940MX

编辑:我解决了!问题似乎是我的 GPU 只使用了很短的时间,原因是瓶颈实际上是在图像中加载。我将我的图像存储为 3000x4000 像素的 jpgs,即使我将它们缩小到 150x150 或有时为 CNN 缩小到 64x64。减小磁盘上图像的大小似乎摆脱了瓶颈

【问题讨论】:

  • 你用的是哪台笔记本电脑?
  • 为了完整起见,您的 CPU 利用率是多少?
  • @PhilipCouling 我将它与我的 GPU 利用率一起发布在 imgur 相册中。它在 ~25-50% 之间反弹
  • @Lcukerd a lenovo thinkpad t470p
  • 如果您解决了自己的问题,请将解决方案作为答案发布,而不是作为问题的编辑。

标签: tensorflow keras


【解决方案1】:

将批量大小增加到 512。批量大小 30 太小了。

【讨论】:

  • 我已将它增加到 150,如果我使用太大的批量大小,我会收到 OOM 错误。看起来现在它使用了我更多的记忆,但它非常尖锐。它在每一步很短的时间内使用大量内存,然后有很长的停顿。 imgur.com/dkpPXgE
【解决方案2】:

新的 TF.data.dataset API 非常适合构建以异步方式向模型提供数据的管道。因此,在计算您的图形时,管道将在下一个图形执行周期开始时预取准备就绪的数据。使用 tf.estimators,您也可以使用 TF.data.dataset 管道运行 keras 模型。一个例子:

https://www.dlology.com/blog/an-easy-guide-to-build-new-tensorflow-datasets-and-estimator-with-keras-model/

【讨论】:

    【解决方案3】:

    我解决了!问题似乎是我的 GPU 只使用了很短的时间,原因是瓶颈实际上是在图像中加载。我将我的图像存储为 3000x4000 像素的 jpgs,即使我将它们缩小到 150x150 或有时为 CNN 缩小到 64x64。减小磁盘上图像的大小似乎摆脱了瓶颈

    【讨论】: