4

我正嘗試使用Google Cloud ML託管Tensorflow模型並獲取預測結果。我有一個預先訓練好的模型,我已經上傳到雲端,並且在我的Cloud ML控制檯中創建了一個模型和版本。Google Cloud ML FAILED_PRECONDITION

我按照指示from here來準備我的數據以請求在線預測。對於Python方法和glcoud方法,我都會得到相同的錯誤。爲簡單起見,我會發布的gcloud方法:

我跑gcloud ml-engine predict --model spell_correction --json-instances test.json其中test.json是我輸入的數據文件(JSON數組名爲instances)。我得到以下結果:

ERROR: (gcloud.ml-engine.predict) HTTP request failed. Response: { 
    "error": { 
    "code": 400, 
    "message": "Precondition check failed.", 
    "status": "FAILED_PRECONDITION" 
    } 
} 

我該如何獲得更多細節?當我使用Python進行嘗試時發生同樣的確切錯誤,並且我有一個包含錯誤的googleapiclient.http.HttpRequest對象。我只想知道爲什麼這個錯誤發生以外的其他通用錯誤。有誰知道如何通過Python方法或gcloud方法獲得更多細節?我假設由於它是相同的錯誤,它是相同的根本原因。

輸出的gcloud ml-engine models list

輸出的 gcloud ml-engine versions list --model spell_correction

NAME  DEPLOYMENT_URI 
testing gs://<my-bucket>/output/1/ 

test.json

NAME    DEFAULT_VERSION_NAME 
spell_correction testing 

{"instances": [{"tokens": [[9], [4], [11], [9]], "mask": [[18], [7], [12], [30]], "keep_prob": 1.0, "beam": 64}]}

我輸入到模型:

tokenstf.placeholder(tf.int32, shape=[None, None])

masktf.placeholder(tf.int32, shape=[None, None])

keep_probtf.placeholder(tf.float32)

beamtf.placeholder(tf.int32)

當通過Python調用時,request_body只是test.json爲字符串。

+0

可以運行'gcloud毫升發動機車型list'以及'gcloud毫升引擎版本列表--model spell_correction'驗證模型已成功創建? – rhaertel80

+0

將輸出添加到問題 – jbird

+0

您可以發佈在test.json中發送的內容以及通過python作爲請求發送的內容? – Bhupesh

回答

1

在談到Google Cloud ML支持後,我得到了這個工作。

我注意到的主要問題是test.json中的所有數據在發送到您的模型時會被包裝在一個列表中。我通過從上面的文件中刪除tokensmask的外部列表來解決此問題。我還將keep_probbeam更改爲常量,因爲我不希望它們能夠針對我所做的每個預測進行更改。

作爲一般性建議,通過Python調用提供的錯誤消息比gcloud ml-engine predict的錯誤消息更有用。同時確保您的gcloud安裝保持最新狀態,他們幾乎在不斷地進行修復。

+0

您爲了解決這個問題做了什麼具體的工作?我的數據並不適合您提到的列表情況(我基本上使用[本教程]中的架構(https://cloud.google.com/blog/big-data/2016/12/how-to -classify圖像與 - 使用 - 谷歌云爲機器學習和 - 雲數據流tensorflow-))。在修復之前,您的模型是否可以正確使用'gcloud ml-engine local predict'? – kbhomes

+0

我其實從來沒有通過gcloud命令工作。我只是使用python格式向Cloud ML發出請求。我不知道是否可以調用這樣的本地模型。每當我使用'gcloud ml-engine [local] predict'時,我會得到一個錯誤,如'不正確的類型,0與對象'。從來沒有發現這意味着什麼 – jbird

1

附註:您是否首先嚐試「本地預測」(https://cloud.google.com/sdk/gcloud/reference/ml-engine/local/predict)?您可能首先會在那裏獲得更多信息。

+0

「目前只支持基於debian的系統「。我在Mac上。 googleapiclient.http.HttpRequest對象下只有一個details屬性嗎?這似乎應該有一些內容。 – jbird

+0

嘗試也無妨,得到了''試圖進口cloud.google.ml' – jbird

+0

這不是正式支持MAC OS時ml'命名沒有模塊,但它應該工作。你看到的錯誤是因爲它找不到CloudML SDK(我們正在擺脫)。它應該儘快修復,也許在下一個或兩個gcloud發行版中,然後您應該能夠運行本地預測。 – roger