4

我可以在具有 4x 1080Ti 的本地机器上进行训练,并且正如其他人所指出的那样,TF 会抓取我机器上的所有可用内存。在四处寻找大多数搜索后,我找到了基本 TF 而不是对象检测 API 的解决方案,例如:

如何防止 tensorflow 分配整个 GPU 内存?

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

我尝试在该 training.proto 中添加一条 GPUOptions 消息,但这似乎没有什么不同。

4

2 回答 2

4

我还想添加第二个选项来指示 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 上测试。

于 2019-01-07T13:27:18.167 回答
2

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

session_config.gpu_options.per_process_gpu_memory_fraction = 0.6

使用确认效果

watch nvidia-smi
于 2018-04-04T14:43:29.043 回答