【问题标题】:Defining GPU options within Tensorflow Object Detection API在 TensorFlow 对象检测 API 中定义 GPU 选项
【发布时间】:2017-10-09 15:24:45
【问题描述】:

我能够在具有 4 个 1080Ti 的本地机器上进行训练,并且正如其他人所指出的那样,TF 会占用我机器上的所有可用内存。经过一番搜索后,我找到了基本 TF 而不是对象检测 API 的解决方案,例如:

How to prevent tensorflow from allocating the totality of a GPU memory?

如何在对象检测 API 中访问这些类型的选项?如何在 OD API 中对训练进行类似的 TF 风格控制?在 OD API / slim API 中是否有合适的方法?

我尝试在该 training.proto 中添加一条 GPUOptions 消息,但这似乎没有任何影响。

【问题讨论】:

  • 我现在通过在调用 object_detection/train.py 脚本之前定义 CUDA_VISIBLE_DEVICES 找到了一种解决方法。这有点小题大做,在使用 OD API 时失去了 TF 的很多灵活性令人失望,但它现在可以工作。

标签: tensorflow-gpu object-detection-api


【解决方案1】:

我还想添加第二个选项来指示 tensorflow 使用部分可用内存。根据这个guide 有2个选项:

  • gpu_options.per_process_gpu_memory_fraction = 0.xxx

  • gpu_options.allow_growth

对于第一个(正如前面在答案中提到的那样),定义了要使用的整个可用 GPU 内存的百分比,而对于第二个,您指示 tensorflow 仅使用必要的内存。

根据文档,如果我们事先知道必要的内存要求,第一个应该会更好,因为它允许

...通过减少内存碎片,更有效地利用设备上相对宝贵的 GPU 内存资源。

另一方面,如果我们事先不知道 GPU 内存要求,我会更喜欢第二个,即使会稍微牺牲一点性能。

至于在 tensorflow 最近的 API 更改中的实际使用,我已将它们插入如下:

session_config = tf.ConfigProto()
session_config.gpu_options.allow_growth = True
# or use
# session_config.gpu_options.per_process_gpu_memory_fraction = 0.xxx

tf.logging.set_verbosity(tf.logging.INFO)
config = tf.estimator.RunConfig(model_dir=FLAGS.model_dir, session_config=session_config)

main()model_main.py

在 tensorflow 1.12.0 上测试。

【讨论】:

    【解决方案2】:

    我遇到了类似的问题,并将这个属性添加到 trainer.py 中的会话配置中,这减少了使用的视频内存量:

    session_config.gpu_options.per_process_gpu_memory_fraction = 0.6
    

    使用

    确认效果
    watch nvidia-smi
    

    【讨论】:

    • 应该将调用添加到会话创建中,nvidia-smi 调用中也有一个类型。您还可以在 gpu_options 配置中选择现在要使用的 GPU。
    猜你喜欢
    • 2020-06-25
    • 2021-06-08
    • 1970-01-01
    • 1970-01-01
    • 2017-12-02
    • 1970-01-01
    • 1970-01-01
    • 2021-10-05
    • 2018-12-01
    相关资源
    最近更新 更多