如何在Keras的RunOptions中添加report_tensor_allocations_upon_oom

30
我正在使用Keras在GPU上训练神经网络,但遇到“Resource exhausted: OOM when allocating tensor”错误。它尝试分配的特定张量并不是很大,因此我认为先前的某个张量消耗了几乎所有的VRAM。这个错误消息带有一个提示,建议如下:
提示:如果您想在OOM发生时查看已分配的张量列表,请将report_tensor_allocations_upon_oom添加到RunOptions以获取当前分配信息。
听起来很好,但我该怎么做呢?RunOptions似乎是Tensorflow的东西,我能找到的很少的文档将其与“session”联系起来。我正在使用Keras,因此Tensorflow被隐藏在抽象层下,并且其会话位于另一层之下。
我该如何深入到所有内容下面设置此选项,以便它会生效?
5个回答

19

TF1解决方案:

它并不像看起来那么难,你需要知道的是,根据文档,传递给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时,应该直接传递它。

TF2:

上面的解决方案仅适用于tf1。对于tf2,不幸的是,目前似乎还没有简单的解决方案。


1
我使用了options=run_opts,因为它是一个kwargs的东西,而且这个方法可行。 - dspeyer
6
@Matias Valdenegro 我遇到了ValueError: ('Some keys in session_kwargs are not supported at this time: %s', dict_keys(['options']))的错误。你知道我做错了什么吗? - Amila
1
我曾经遇到过完全相同的问题。使用keras版本2.2.4...有什么解决方案吗? - zwep
@zwep 这个问题在2.2.4版本中已经解决了。您确定您已经更新了吗? - Dan Grahn
1
由于某种原因,这导致了一个分段错误:[1] 3957 segmentation fault python oom_net.py - Zaccharie Ramzi
显示剩余3条评论

4

4
虽然这个链接可能回答了问题,但最好在此处包含答案的重要部分并提供链接以供参考。仅有链接的答案如果链接页面发生更改可能会失效。 - Enea Dume

3

OOM指的是内存不足。可能是在那个时候使用了更多的内存。 将batch_size显著降低。我将其设置为16,然后问题就解决了。


2
这是否可行,以及适当的批处理大小,完全取决于所涉及的模型和数据集。如果试图调试不依赖于批处理大小的内存问题,则这并没有任何帮助。 - Adam Azarchs

0

遇到了同样的错误,但只有在训练数据集与我的GPU内存大小相当的情况下才会出现。例如,使用4GB显卡内存时,我可以使用约3.5GB的数据集来训练模型。对我而言的解决方法是创建一个带有yieldindiceslookback的自定义数据生成器函数。

另一种建议是开始学习真正的TensorFlow框架,并使用with tf.Session示例)。


-2

OOM指的是“内存不足”

当TensorFlow在将批次加载到内存中时,如果它耗尽了vRAM,则会抛出此错误。

我试图在CIFAR-100数据集上训练视觉Transformer

GPU: GTX 1650 w/ 4GB vRAM

最初,我将batch_size设置为256,这对于这样的GPU来说完全是疯狂的,我一直收到相同的OOM错误

我将其调整为batch_size = 16(或更低,取决于您的GPU),则训练可以正常进行。

因此,如果您正在笔记本电脑或中端GPU上进行训练,请始终选择较小的batch_size。


1
这通常是一个好建议,但并没有回答 OP 实际的问题。有时减小批量大小会产生不良影响(例如对比学习),因此其他减少内存使用的方法可能更为理想。 - starbeamrainbowlabs
我做了同样的事情。我将batch_size从32减少到16,现在出现了一个内部错误。有什么办法可以解决这个问题吗? - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接