我有一个模型,它以分布式模式运行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
答案 0 :(得分:0)
从你的评论我想我明白发生了什么。我可能错了。
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://
上运行,因此生成的检查点将保持一致。至少它对我有用。
检查我的假设是否正确的一种方法是使用checkpoint
将gs://
文件从gsutils
复制到本地文件系统上,然后输出其内容。