【问题标题】:Error when Submitting Job Training in Google Cloud ML在 Google Cloud ML 中提交作业培训时出错
【发布时间】:2017-07-25 00:18:06
【问题描述】:

我目前正在尝试使用 Facenet(用于人脸识别的 Tensorflow 库)提交关于 Google Cloud ML 的工作培训。我目前正在尝试这个 (link is here) 库的一部分,它对模型进行训练。

转到 Google Cloud ML,我正在关注本教程 (link is here) ,它会教您如何提交培训。

我能够成功地向 Google Cloud ML 提交工作培训,但出现了错误。 以下是一些错误图片:

这是来自 Google Cloud Jobs 日志的错误

这里有更多关于 Google Cloud Job 日志的详细图片

提交作业请求是成功的,它甚至在等待 Tensorflow 启动,但之后就出现了该错误。

我用来运行它的命令在这里:

gcloud ml-engine jobs submit training facetraining_test4 \
--package-path=/Users/myname/Documents/projects/tf-projects/facenet/src/ \
--module-name=/Users/myname/Documents/projects/tf-projects/facenet/src/facenet_train_classifier.py \
--staging-bucket=gs://facenet-training-test \
--region=asia-east1 \
--config=/Users/myname/Documents/projects/tf-projects/facenet/none_config.yml  \
-- \
--logs_base_dir=/Users/myname/Documents/projects/tf-projects/logs/facenet/ \
--models_base_dir=/Users/myname/Documents/projects/tf-projects/models/facenet/ \
--data_dir=/Users/myname/Documents/projects/tf-projects/facenet_datasets/employee_dataset/employee/employee_maxpy_mtcnnpy_182/ \
--image_size=160 \
--model_def=models.inception_resnet_v1 \
--lfw_dir=/Users/myname/Documents/projects/tf-projects/facenet_datasets/lfw/lfw_mtcnnpy_160/ \
--optimizer=RMSPROP \
--learning_rate -1  \
--max_nrof_epochs=80 \
--keep_probability=0.8 \
--learning_rate_schedule_file=/Users/myname/Documents/projects/tf-projects/facenet/data/learning_rate_schedule_classifier_casia.txt \
--weight_decay=5e-5  \
--center_loss_factor=1e-4  \

关于如何解决此问题的任何建议?谢谢!

【问题讨论】:

  • 如果您转至console.cloud.google.com/mlengine/jobs,您将看到作业列表和日志链接。在那里查找错误并报告您发现的内容。
  • 您确定没有在训练脚本结束时返回非零状态代码吗?如果没有,我只需将一些日志记录语句添加到您的 .py 文件中,然后检查 console.cloud.google.com/mlengine/jobs 中的日志以了解您的工作崩溃的位置。
  • @rhaertel80 我添加了更多图片以便更详细地查看错误。
  • @AmirHormati 我对 Google Cloud ML 还是很陌生。我很难理解这些错误。我添加了图片以更详细地查看错误。如果你能帮助我理解错误,那就太好了!
  • @Mikebarson 你有可以在 Cloud ML 上运行的重构版本吗?

标签: tensorflow google-cloud-ml google-cloud-ml-engine


【解决方案1】:

当您在 Cloud ML Engine 上运行时,您是在远程环境中运行;所以文件路径不会与本地环境相同。如果你需要导入 python 模块,你需要将它们包含在你构建的 Python 包中,然后使用包名导入它们。

关于如何构建包的文档请参考SetupTools docs

这是 30 秒的版本

  1. 按如下方式组织您的代码

    my_package/__init__.py
    my_package/moduleA.py
    my_package/moduleB.py
    my_package/...
    setup.py
  1. 你的 setup.py 文件以这个开头
从 setuptools 导入 find_packages 从 setuptools 导入设置 REQUIRED_PACKAGES = [] 设置( 名称='我的包', 版本='0.1.1', 作者='作者', author_email='author@gmail.com', install_requires=REQUIRED_PACKAGES, 包=查找包(), 描述='描述', 需要=[],)
  1. 如下构建包
python ./setup.py sdist
  1. 在 Cloud ML Engine 中安装软件包后,您将能够将代码导入为
从 my_package 导入模块A

【讨论】:

  • 我明白了!所以这适用于它尝试在 facenet_train_classifier.py 下导入的所有模块。那些像“--log_base_dirs=...”这样的文件呢?那些是 [USER_ARGS] 部分。我也需要打包吗?
  • @Mikebarson:是的,他们需要远程访问。从这些特定参数的名称来看,它们看起来像输出目录,GCS 上的路径也应该如此。有一个记录不足的 gcloud 命令行参数 --job-dir。该目录将作为命令行参数“--job-dir”传递给您的程序。从那里您可以构建路径,例如“日志”和“模型”。
  • @rhaertel80 所以你的意思是我应该把那些'--log_base_dirs'和'--models_base_dirs'放在一个文件中。然后将该文件传递给'--job_dir'?我应该如何格式化文件中的这些命令以及我应该调用什么扩展名?
  • @Mikebarson。有两个问题。 (1) 输出目录需要是 GCS 上的位置 (2) 与如何将它们传递到 CloudML 引擎无关。您可以继续使用自己的命令行参数('--log_base_dirs'、'--models_base_dirs'),只要确保它们指向有效的 GCS 存储桶,例如“gs://my-ml-bucket/工作_x/日志”。考虑使用相同的存储桶,但不同的“子目录”作为您的输入数据。
  • @rhaertel80 我明白了。我实际上是这样做的。但谷歌云找不到它。我会再尝试。那么'--job-dir'有什么用呢?
【解决方案2】:

查看上面的错误消息,您的问题似乎与来自 Python 的“ImportError: import by filename is not supported”错误有关。如果不查看您的 python 源代码,我无法确切告诉您如何修复它,但以下链接应该可以解决您的问题:

Python / ImportError: Import by filename is not supported

一般来说,使用文件路径查找您正在导入的位置,并确保您正确使用了这些函数。

【讨论】:

  • 会不会是谷歌找不到文件?这在我的本地终端中正常工作。
  • 当您在 Cloud ML Engine 上运行时,您是在远程环境中运行;所以文件路径不会与本地环境相同。如果您需要导入您编写的 Python 模块,您需要将它们包含在您构建的 Python 包中,然后使用包名导入它们。
  • @JeremyLewi 你能给我举个例子吗?那真的很有帮助!谢谢! :D
  • 我添加了一个包含更多细节的答案。
  • 谢谢! @JeremyLewi 我很快就会测试你的解决方案。
猜你喜欢
  • 2017-03-09
  • 1970-01-01
  • 2018-11-26
  • 2018-01-06
  • 2018-04-10
  • 2018-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多