如何将报告_tensor_allocations_upon_oom添加到Keras中的RunOptions

时间:2018-04-05 06:45:15

标签: python tensorflow keras gpu

我正在尝试使用Keras在GPU上训练神经网络,并且我得到了“资源耗尽:分配张量时的OOM”错误。它试图分配的特定张量不是很大,所以我假设一些先前的张量消耗了几乎所有的VRAM。错误消息附带一个暗示:

  

提示:如果要在OOM发生时查看已分配的张量列表,请将report_tensor_allocations_upon_oom添加到RunOptions以获取当前分配信息。

这听起来不错,但我该怎么做? RunOptions似乎是一个Tensorflow的东西,我能找到的小文档将它与“会话”联系起来。我正在使用Keras,因此Tensorflow隐藏在一个抽象层下,其会话位于另一层下面。

如何在所有内容下挖掘以设置此选项以使其生效?

3 个答案:

答案 0 :(得分:4)

它并不像看起来那么难,你需要知道的是,根据documentation,传递给model.compile的** kwargs参数将被传递给session.run

所以你可以这样做:

import tensorflow as tf
run_opts = tf.RunOptions(report_tensor_allocations_upon_oom = True)

model.compile(loss = "...", optimizer = "...", metrics = "..", options = run_opts)

每次调用session.run时都应该直接传递。

答案 1 :(得分:1)

OOM表示内存不足。可能是当时使用了更多的内存。 大幅减少batch_size。我设置为16,然后工作正常

答案 2 :(得分:0)

当前,无法将选项添加到model.compile。参见:https://github.com/tensorflow/tensorflow/issues/19911