在Tensorflow Object Detection API中定义GPU选项

时间:2017-10-09 15:24:46

标签: tensorflow-gpu object-detection-api

我能够在具有4x 1080Ti的本地机器上进行训练,而其他人已经注意到TF抓住了我机器上的所有可用内存。经过一番搜索后,大多数搜索引导我找到基本TF的解决方案,而不是Object Detection API,例如:

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

如何在Object Detection API中访问这些选项?如何在OD API中对培训进行类似的TF样式控制?在OD API / slim API中是否有正确的方法?

我尝试向该training.proto添加GPUOptions消息,但这似乎没有什么区别。

2 个答案:

答案 0 :(得分:1)

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

session_config.gpu_options.per_process_gpu_memory_fraction = 0.6

使用

确认效果
watch nvidia-smi

答案 1 :(得分:1)

我还想添加第二个选择,以指示张量流使用部分可用内存。根据此guide,有2个选项:

  • gpu_options.per_process_gpu_memory_fraction = 0.xxx

  • gpu_options.allow_growth

在第一个中(如前面在答案中已经提到的那样),定义了要使用的全部可用GPU内存的百分比,而在第二个中,您指示tensorflow只使用必要的内存。

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

  

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

另一方面,如果我们事先不知道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()的{​​{1}}中。

在tensorflow 1.12.0上测试。