我可以在具有 4x 1080Ti 的本地机器上进行训练,并且正如其他人所指出的那样,TF 会抓取我机器上的所有可用内存。在四处寻找大多数搜索后,我找到了基本 TF 而不是对象检测 API 的解决方案,例如:
如何在对象检测 API 中访问这些类型的选项?如何在 OD API 中对训练进行类似的 TF 风格控制?OD API / slim API中是否有适当的方法?
我尝试在该 training.proto 中添加一条 GPUOptions 消息,但这似乎没有什么不同。
我可以在具有 4x 1080Ti 的本地机器上进行训练,并且正如其他人所指出的那样,TF 会抓取我机器上的所有可用内存。在四处寻找大多数搜索后,我找到了基本 TF 而不是对象检测 API 的解决方案,例如:
如何在对象检测 API 中访问这些类型的选项?如何在 OD API 中对训练进行类似的 TF 风格控制?OD API / slim API中是否有适当的方法?
我尝试在该 training.proto 中添加一条 GPUOptions 消息,但这似乎没有什么不同。
我还想添加第二个选项来指示 tensorflow 使用一部分可用内存。根据本指南,有 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 上测试。
我遇到了类似的问题,并将这个属性添加到 trainer.py 中的会话配置中,这减少了使用的视频内存量:
session_config.gpu_options.per_process_gpu_memory_fraction = 0.6
使用确认效果
watch nvidia-smi