【问题标题】:CUDA_ERROR_OUT_OF_MEMORY on Tensorflow#object_detection/train.pyTensorflow#object_detection/train.py 上的 CUDA_ERROR_OUT_OF_MEMORY
【发布时间】:2017-11-27 16:56:45
【问题描述】:

我正在运行 Tensorflow 对象检测 API 来使用 object_detection/train.py 脚本(找到 here)训练我自己的检测器。问题是我不断收到CUDA_ERROR_OUT_OF_MEMORY

我找到了一些减少批量大小的建议,以便训练器消耗更少的内存,但我从 16 减少到 4,但我仍然遇到同样的错误。不同的是,当使用batch_size=16时,错误在~18步抛出,现在在~70步抛出。 编辑: 设置 batch_size=1 并没有解决问题,因为我在 ~2700 步仍然遇到错误。

在我停止训练过程之前,我该怎么做才能让它顺利运行?我真的不需要快速训练。

编辑: 我目前正在为此使用 GTX 750 Ti 2GB。除了训练和提供监视器图像之外,GPU 没有用于其他任何用途。目前,我只使用 80 张图像进行训练,20 张图像进行评估。

【问题讨论】:

  • 添加更多关于您的 GPU 大小、训练数据大小以及您是否在其他任何地方同时使用 GPU 的信息?
  • @SmitShilu 添加了请求的信息。感谢您帮助我!
  • 很抱歉,我无法复制,但如果每张图片都是高分辨率的,则可能是图片尺寸问题或参考此链接github.com/tensorflow/models/issues/1854

标签: python tensorflow object-detection tensorflow-gpu


【解决方案1】:

我认为与batch_size无关,因为您可以首先开始训练。

打开终端并运行

nvidia-smi -l

检查发生此错误时是否有其他进程启动。如果你设置batch_size=16,你可以很快找到。

【讨论】:

    【解决方案2】:

    找到了我的问题的解决方案。 batch_size 不是问题,但更高的batch_size 会使训练内存消耗增加得更快,因为我使用的是config.gpu_options.allow_growth = True 配置。此设置允许 Tensorflow 在需要时增加内存消耗,并尝试使用直到 100% 的 GPU 内存。

    问题是我同时运行eval.py 脚本(如他们的教程中所建议的那样),并且它使用了 GPU 内存的一部分。当train.py 脚本尝试使用全部 100% 时,抛出错误。

    我通过将训练过程的最大使用百分比设置为 70% 来解决这个问题。它还解决了训练时口吃的问题。这可能不是我的 GPU 的最佳值,但可以使用 config.gpu_options.per_process_gpu_memory_fraction = 0.7 设置进行配置,例如。

    【讨论】:

    • 您好@Minoru,您是否在 session_config = tf.ConfigProto(allow_soft_placement=True, log_device_placement=False) 之后将 config.gpu_options.per_process_gpu_memory_fraction = 0.7 放入 trainer.py 中?谢谢。
    • @willSapgreen 我没有注意到关于 session_config 变量的任何内容。刚刚在config.gpu_options.allow_growth = True 行之后使用了config.gpu_options.per_process_gpu_memory_fraction = 0.7
    • 您也可以在代码中执行此操作:import tensorflow as tf;tf.config.gpu.set_per_process_memory_fraction(0.7)。有关更多选项,请参阅here
    【解决方案3】:

    另一种选择是将 GPU 专用于训练并使用 CPU 进行评估

    • 缺点:评估会消耗大部分 CPU,但每次创建训练检查点时只会消耗几秒钟,这种情况并不常见。
    • 优势: 100% 的 GPU 始终用于训练

    要以 CPU 为目标,请在运行评估脚本之前设置此环境变量:

    export CUDA_VISIBLE_DEVICES=-1
    

    您可以在pipeline.config 中将评估批处理作业大小显式设置为 1 以减少内存消耗:

    eval_config: {
      metrics_set: "coco_detection_metrics"
      use_moving_averages: false
      batch_size: 1;
    }
    

    如果您仍然遇到问题,TensorFlow 可能不会在训练运行之间释放 GPU 内存。尝试重新启动终端或 IDE,然后重试。这个answer有更多细节。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-27
      • 2021-06-25
      • 2020-08-06
      • 1970-01-01
      • 1970-01-01
      • 2021-10-25
      相关资源
      最近更新 更多