我能够在具有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消息,但这似乎没有什么区别。
答案 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上测试。