我有一个模型,它以分布式模式运行4000步 . 每120秒后计算一次精度(如提供的例子中所做的那样) . 但是,有时找不到最后一个检查点文件 .
错误:
无法匹配检查点gs的文件://path-on-gcs/train/model.ckpt-1485
检查点文件出现在该位置 . 2000步的本地运行完美运行 .
last_checkpoint = tf.train.latest_checkpoint(train_dir(FLAGS.output_path))
我假设检查点仍处于保存过程中,并且实际上并未写入文件 . 尝试在精确度计算之前引入等待 . 然而,这似乎最初起作用,该模型仍然以类似的问题失败 .
saver.save(session, sv.save_path, global_step)
time.sleep(2) #wait for gcs to be updated
1 回答
从你的评论我想我明白发生了什么 . 我可能错了 .
默认情况下,cloud_ml分布式示例https://github.com/GoogleCloudPlatform/cloudml-samples/blob/master/mnist/hptuning/trainer/task.py#L426使用临时文件 . 因此,它在
/tmp
本地工作 . 培训完成后,它会将结果复制到gs://
,但它不会更正checkpoint
文件,该文件仍然包含对/tmp
上本地模型文件的引用 . 基本上,这是一个错误 .为避免这种情况,您应该使用
--write_to_tmp 0
启动培训过程,或直接修改task.py
文件以禁用此选项 . 然后,Tensorflow将直接在gs://
上运行,因此生成的检查点将保持一致 . 至少它对我有用 .检查我的假设是否正确的一种方法是使用
gsutils
在本地文件系统上从gs://
复制生成的checkpoint
文件,然后输出其内容 .