TensorFlow 分布式 master worker 静默保存失败;未创建检查点文件,但未引发异常
Posted
技术标签:
【中文标题】TensorFlow 分布式 master worker 静默保存失败;未创建检查点文件,但未引发异常【英文标题】:TensorFlow distributed master worker save fails silently; the checkpoint file isn't created but no exception is raised 【发布时间】:2016-10-02 07:03:44 【问题描述】:分布在tensorflow环境中。 master worker 保存检查点失败。 saver.save 已返回 ok*(不引发异常并返回存储检查点文件路径)但是,返回检查点文件不存在。 这与 tensorflow api 的描述不一样为什么?如何解决?
=============相关代码如下:
def def_ps(self):
self.saver = tf.train.Saver(max_to_keep=100,keep_checkpoint_every_n_hours=3)
def save(self,idx):
ret = self.saver.save(self.sess,self.save_model_path,global_step=None,write_meta_graph=False)
if not os.path.exists(ret):
msg = "save model for %u path %s not exists."%(idx,ret)
lg.error(msg)
raise Exception(msg);
=============日志如下:
2016-06-02 21:33:52,323 root ERROR save model for 2 path model_path/rl_model_2 not exists.
2016-06-02 21:33:52,323 root ERROR has error:save model for 2 path model_path/rl_model_2 not exists.
Traceback (most recent call last):
File "d_rl_main_model_dist_0.py", line 755, in run_worker
model_a.save(next_model_idx)
File "d_rl_main_model_dist_0.py", line 360, in save
Trainer.save(self,save_idx)
File "d_rl_main_model_dist_0.py", line 289, in save
raise Exception(msg);
Exception: save model for 2 path model_path/rl_model_2 not exists.
===========不符合以下定义 Saver.save 的 tensorflow api:
https://www.tensorflow.org/versions/master/api_docs/python/state_ops.html#Saver
tf.train.Saver.save(sess, save_path, global_step=None, latest_filename=None, meta_graph_suffix='meta', write_meta_graph=True)
返回:
字符串:保存变量的路径。如果保护程序被分片,则此字符串以:'-?????-of-nnnnn' 结尾,其中'nnnnn' 是创建的分片数。
加注:
TypeError:
如果 sess 不是 Session。
ValueError:
如果 latest_filename 包含路径组件。
【问题讨论】:
【参考方案1】:tf.train.Saver.save()
方法在分布式模式下运行时有点……令人惊讶。实际文件由拥有tf.Variable
操作的进程编写,如果您使用示例代码进行设置,该操作通常是"/job:ps"
中的一个进程。这意味着您需要在每台具有变量的远程计算机上查看 save_path
以查找检查点文件。
为什么会这样? Saver API 隐含地假定所有进程都具有共享文件系统的相同视图,例如 NFS 挂载,因为这是我们在 Google 使用的典型设置。我们在最新的 TensorFlow 夜间版本中添加了对 Google Cloud Storage 的支持,并且也是 investigating HDFS support。
【讨论】:
以上是关于TensorFlow 分布式 master worker 静默保存失败;未创建检查点文件,但未引发异常的主要内容,如果未能解决你的问题,请参考以下文章
成为Master,TensorFlow新增对Windows的支持
使用ResNet101作为预训练模型训练Faster-RCNN-TensorFlow-Python3-master