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 静默保存失败;未创建检查点文件,但未引发异常的主要内容,如果未能解决你的问题,请参考以下文章

Tensorflow分布式机器学习平台

学习笔记TF041:分布式并行

成为Master,TensorFlow新增对Windows的支持

使用ResNet101作为预训练模型训练Faster-RCNN-TensorFlow-Python3-master

使用ResNet101作为预训练模型训练Faster-RCNN-TensorFlow-Python3-master

Windows10+Faster-RCNN-TensorFlow-Python3-master+VOC2007数据集