0

我有一個在本地工作的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耐心地坐在並等待創建模型檢查點。

enter image description here

另一個想法可能是,檢查點莫名其妙地被上傳過程中被損壞。我們可以從頭開始測試繞過和訓練。

在的.config

from_detection_checkpoint: false 

其產生的相同的前提條件的錯誤,所以它不能被該模型。

+0

當試圖打開train_config文件時,它似乎失敗。這很難解碼,但錯誤信息有一個「。「這使得我認爲它試圖讀取本地目錄作爲配置文件,你的代碼如何設置文件名? – rhaertel80

+0

整個配置文件是從命令行設置的--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

+0

我看着在代碼中的邏輯: 如果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

回答

0

根本原因是輕微的錯字:

--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} 
+0

感嘆。對於那些想知道「先決條件」將空間當作當前工作目錄的人,所以只解析了「」,因此train.py正在尋找名爲「」的配置。好傷心。 – bw4sz

相關問題