【问题标题】:Checkpoint file not found, restoring evaluation graph未找到检查点文件,正在恢复评估图
【发布时间】:2017-03-04 12:01:39
【问题描述】:

我有一个以分布式模式运行 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

【问题讨论】:

  • 您的 GCS 存储桶是区域存储桶还是多区域存储桶?您想使用区域存储桶(请参阅here),因为 GCS 对区域存储桶的一致性保证比多区域存储桶更强。 Cloud ML 的getting started guide 有创建区域存储桶的说明。
  • 我有一个类似的问题:检查点文件里面是什么?检查点是一个引用模型文件的文本文件。就我而言,分布式样本默认使用“--write_to_tmp 1”作为选项,并以不一致的“gs://path/to/checkpoint”结尾。由于该选项,在文本文件中引用了临时文件。我添加了“--write_to_tmp 0”,它解决了我的问题。
  • @Jeremy Lewi:是一个多区域的bucket。
  • @MathiasOrtner: github.com/GoogleCloudPlatform/cloudml-samples/blob/master/… 在我的例子中, output_path 是 gcs 上的路径,所以我假设没有创建本地目录,模型直接保存到 gcs 上。但是有没有办法可以控制这些文件的写入方式?如果完全保存了相当大的〜200MB的模型文件,是否确保保存检查点文件?

标签: tensorflow google-cloud-ml


【解决方案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 文件,然后输出其内容。

【讨论】:

  • 检查点文件有这个:"model_checkpoint_path: "model.ckpt-1485" 这是它在失败之前尝试读取的模型文件。但是,在我的情况下, output_path 在 GCS 上,它不会创建任何本地目录。而在上面的示例中,读取了一个参数,其默认值为 1,这意味着 L426 代码运行。我正在关注这个文件的早期版本,它没有这个参数。
  • 好吧,没关系,你的问题和我的不一样!抱歉打扰了。
  • 感谢您的回复,它仍然有帮助:)。使用区域存储桶尝试训练
猜你喜欢
  • 1970-01-01
  • 2014-08-14
  • 2023-03-31
  • 1970-01-01
  • 2017-07-30
  • 1970-01-01
  • 1970-01-01
  • 2019-04-03
  • 1970-01-01
相关资源
最近更新 更多