我正在尝试使用Keras在GPU上训练神经网络,并且我得到了“资源耗尽:分配张量时的OOM”错误。它试图分配的特定张量不是很大,所以我假设一些先前的张量消耗了几乎所有的VRAM。错误消息附带一个暗示:
提示:如果要在OOM发生时查看已分配的张量列表,请将report_tensor_allocations_upon_oom添加到RunOptions以获取当前分配信息。
这听起来不错,但我该怎么做? RunOptions似乎是一个Tensorflow的东西,我能找到的小文档将它与“会话”联系起来。我正在使用Keras,因此Tensorflow隐藏在一个抽象层下,其会话位于另一层下面。
如何在所有内容下挖掘以设置此选项以使其生效?
答案 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