2017-03-13 191 views
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