tf.train.MonitoredTrainingSession 中的 tf.train.CheckpointSaverHook 是不是会在检查点或异步完成时阻止训练?

Posted

技术标签:

【中文标题】tf.train.MonitoredTrainingSession 中的 tf.train.CheckpointSaverHook 是不是会在检查点或异步完成时阻止训练?【英文标题】:Does tf.train.CheckpointSaverHook in tf.train.MonitoredTrainingSession block training while checkpointing or it is done asynchronously?tf.train.MonitoredTrainingSession 中的 tf.train.CheckpointSaverHook 是否会在检查点或异步完成时阻止训练? 【发布时间】:2018-07-07 00:08:02 【问题描述】:

我是 TensorFlow 的新手。我目前很想跟踪检查点的 IO 时间和带宽(最好是检查点训练过程中所用 IO 时间的百分比),这是由高级 tf.train.MonitoredTrainingSession 提供的内部检查点机制执行的,可以通过添加 @ 来实现987654322@ 同时初始化tf.train.MonitoredTrainingSession

我正在考虑使用tf.train.CheckpointSaverListener(即使用before_saveafter_save 方法)来记录时间和跟踪IO。但我有一个问题,我正在考虑的这种日志记录技术会给我一个适当的百分比计算(即Time taken for checkpointing IO / Time taken for Training * 100%)吗?

我怀疑,这个检查点是通过与训练不同的线程异步完成的。我一直在研究 TensorFlow 代码以找出答案,但我认为在这里提出这个问题可以加速我的探索。

我对使用任何其他替代技术(例如使用 TensorBoard、IO 分析工具等)的任何建议持开放态度

【问题讨论】:

【参考方案1】:

我相信会的。

检查点不是异步完成的。您希望检查点包含变量/参数的一致快照,因此不希望检查点与可能更新参数值的其他操作异步。

CheckpointSaverHook 显式使用Session 执行保存检查点(source code)并等待它完成的操作(它基本上是在调用tf.train.Saver.save)。

因此,您想到的 CheckpointSaverListener 应该可以正常工作 - 以您程序中任何其他 CheckpointSaverListeners 所花费的时间为模。

希望对您有所帮助。

【讨论】:

以上是关于tf.train.MonitoredTrainingSession 中的 tf.train.CheckpointSaverHook 是不是会在检查点或异步完成时阻止训练?的主要内容,如果未能解决你的问题,请参考以下文章