在云计算机学习引擎上运行时,Tensorflow对象检测train.py失败
我有一个在本地工作的tensorflow对象检测API的小实例。一切看起来不错。我的目标是使用他们的脚本在Google机器学习引擎中运行,我之前已经广泛使用它。我正在关注这些docs。在云计算机学习引擎上运行时,Tensorflow对象检测train.py失败
声明一些相关的变量
declare PROJECT=$(gcloud config list project --format "value(core.project)")
declare BUCKET="gs://${PROJECT}-ml"
declare MODEL_NAME="DeepMeerkatDetection"
declare FOLDER="${BUCKET}/${MODEL_NAME}"
declare JOB_ID="${MODEL_NAME}_$(date +%Y%m%d_%H%M%S)"
declare TRAIN_DIR="${FOLDER}/${JOB_ID}"
declare EVAL_DIR="${BUCKET}/${MODEL_NAME}/${JOB_ID}_eval"
declare PIPELINE_CONFIG_PATH="${FOLDER}/faster_rcnn_inception_resnet_v2_atrous_coco_cloud.config"
declare PIPELINE_YAML="/Users/Ben/Documents/DeepMeerkat/training/Detection/cloud.yml"
我YAML看起来像
trainingInput:
runtimeVersion: "1.0"
scaleTier: CUSTOM
masterType: standard_gpu
workerCount: 5
workerType: standard_gpu
parameterServerCount: 3
parameterServerType: standard
相关的路径在配置设置,如
fine_tune_checkpoint: "gs://api-project-773889352370-ml/DeepMeerkatDetection/checkpoint/faster_rcnn_inception_resnet_v2_atrous_coco_11_06_2017/model.ckpt"
我已经打包的对象检测和苗条使用setup.py
运行
gcloud ml-engine jobs submit training "${JOB_ID}_train" \
--job-dir=${TRAIN_DIR} \
--packages dist/object_detection-0.1.tar.gz,slim/dist/slim-0.1.tar.gz \
--module-name object_detection.train \
--region us-central1 \
--config ${PIPELINE_YAML} \
-- \
--train_dir=${TRAIN_DIR} \
--pipeline_config_path= ${PIPELINE_CONFIG_PATH}
产生一个tensorflow(进口?)错误。它有点神秘
insertId: "1inuq6gg27fxnkc"
logName: "projects/api-project-773889352370/logs/ml.googleapis.com%2FDeepMeerkatDetection_20171017_141321_train"
receiveTimestamp: "2017-10-17T21:38:34.435293164Z"
resource: {…}
severity: "ERROR"
textPayload: "The replica ps 0 exited with a non-zero status of 1. Termination reason: Error.
Traceback (most recent call last):
File "/usr/lib/python2.7/runpy.py", line 162, in _run_module_as_main
"__main__", fname, loader, pkg_name)
File "/usr/lib/python2.7/runpy.py", line 72, in _run_code
exec code in run_globals
File "/root/.local/lib/python2.7/site-packages/object_detection/train.py", line 198, in <module>
tf.app.run()
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/platform/app.py", line 44, in run
_sys.exit(main(_sys.argv[:1] + flags_passthrough))
File "/root/.local/lib/python2.7/site-packages/object_detection/train.py", line 145, in main
model_config, train_config, input_config = get_configs_from_multiple_files()
File "/root/.local/lib/python2.7/site-packages/object_detection/train.py", line 127, in get_configs_from_multiple_files
text_format.Merge(f.read(), train_config)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/lib/io/file_io.py", line 112, in read
return pywrap_tensorflow.ReadFromStream(self._read_buf, length, status)
File "/usr/lib/python2.7/contextlib.py", line 24, in __exit__
self.gen.next()
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/errors_impl.py", line 466, in raise_exception_on_not_ok_status
pywrap_tensorflow.TF_GetCode(status))
FailedPreconditionError: .
我已经看到了有关预测的机器学习引擎等questions这个错误,可能提示这个错误(?)不直接与对象相关的检测代码,但感觉像它没有正确打包,缺少依赖关系?我已将我的gcloud更新到最新版本。
Bens-MacBook-Pro:research ben$ gcloud --version
Google Cloud SDK 175.0.0
bq 2.0.27
core 2017.10.09
gcloud
gsutil 4.27
很难看到其相关的在这里
FailedPreconditionError when running TF Object Detection API with own model
这个问题为什么代码需要在云初始化不同?
更新#1。
好奇的是,eval.py工作正常,所以它不能成为配置文件的路径,或train.py和eval.py共享的任何路径。 Eval.py耐心地坐在并等待创建模型检查点。
另一个想法可能是,检查点莫名其妙地被上传过程中被损坏。我们可以从头开始测试绕过和训练。
在的.config
from_detection_checkpoint: false
其产生的相同的前提条件的错误,所以它不能被该模型。
根本原因是轻微的错字:
--pipeline_config_path= ${PIPELINE_CONFIG_PATH}
有一个额外的空间。试试这个:
gcloud ml-engine jobs submit training "${JOB_ID}_train" \
--job-dir=${TRAIN_DIR} \
--packages dist/object_detection-0.1.tar.gz,slim/dist/slim-0.1.tar.gz \
--module-name object_detection.train \
--region us-central1 \
--config ${PIPELINE_YAML} \
-- \
--train_dir=${TRAIN_DIR} \
--pipeline_config_path=${PIPELINE_CONFIG_PATH}
感叹。对于那些想知道“先决条件”将空间当作当前工作目录的人,所以只解析了“”,因此train.py正在寻找名为“”的配置。好伤心。 – bw4sz
当试图打开train_config文件时,它似乎失败。这很难解码,但错误信息有一个“。“这使得我认为它试图读取本地目录作为配置文件,你的代码如何设置文件名? – rhaertel80
整个配置文件是从命令行设置的--pipeline_config_path = $ {PIPELINE_CONFIG_PATH},它是gs:// api-project-773889352370-ml/DeepMeerkatDetection/faster_rcnn_inception_resnet_v2_atrous_coco_cloud.config,我也认为这会是一个路径错误,但是eval.py脚本也可以接受这个参数,并且没有问题,好的,但是关键是不认为这是一个错误cloudml,但一些内部调试 – bw4sz
我看着在代码中的逻辑: 如果FLAGS.pipeline_config_path: model_config,train_config,input_config = get_configs_from_pipeline_file() 其他: model_config,train_config,input_config = get_configs_from_multiple_files () 您发送的堆栈跟踪包含get_configs_from_multiple_files。但是根据你的评论中的信息,你正试图设置'--pipeline_config_path',所以我认为你希望* get_configs_from_pipeline_file()代替运行。 很明显,Flags有一个问题。回答如下。 – rhaertel80