【问题标题】:How to add report_tensor_allocations_upon_oom to RunOptions in Keras如何在 Keras 中将 report_tensor_allocations_upon_oom 添加到 RunOptions
【发布时间】:2018-09-14 21:16:09
【问题描述】:

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

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

听起来不错,但我该怎么做呢? RunOptions 似乎是 Tensorflow 的东西,我能找到的很少文档将它与“会话”相关联。我使用的是 Keras,所以 Tensorflow 隐藏在一个抽象层之下,它的会话隐藏在该抽象层之下。

如何深入了解所有内容以设置此选项以使其生效?

【问题讨论】:

    标签: python tensorflow keras gpu


    【解决方案1】:

    得到了同样的错误,但只是以防万一,训练数据集与我的 GPU 内存大致相同。例如,使用 4 Gb 视频卡内存,我可以使用 ~3.5 GB 数据集训练模型。我的解决方法是使用yieldindiceslookback 创建data_generator 自定义函数。 有人建议我的另一种方法是开始学习真正的 tensorflow 框架和with tf.Session (example)。

    【讨论】:

      【解决方案2】:

      TF1 解决方案:

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

      TF2:

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

      【讨论】:

      • 我使用了 options=run_opts,因为这是一个 kwargs 的东西,而且有效
      • @Matias Valdenegro 我得到ValueError: ('Some keys in session_kwargs are not supported at this time: %s', dict_keys(['options']))。知道我做错了什么吗?
      • 我遇到了同样的问题。使用keras 2.2.4版本……有什么解决办法吗?
      • 另外,我收到了这个错误'Protocol message RunOptions has no "report_tensor_allocations_upon_oom" field.'
      • 由于某种原因导致我出现分段错误:[1] 3957 segmentation fault python oom_net.py
      【解决方案3】:

      OOM 表示内存不足。可能是当时正在使用更多的内存。 显着减小 batch_size。我设置为 16,然后它工作正常

      【讨论】:

      • 这是否可行,以及合适的批量大小将完全取决于相关模型以及数据集。如果尝试调试不依赖于批量大小的内存问题,这根本没有帮助。
      【解决方案4】:

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

      【讨论】:

      • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会失效。
      猜你喜欢
      • 2021-01-19
      • 2023-03-08
      • 2019-03-06
      • 2022-01-17
      • 2022-01-16
      • 1970-01-01
      • 2020-07-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多