Google Cloud ML FAILED_PRECONDITION

时间:2017-03-13 14:22:55

标签: python tensorflow gcloud tensorflow-serving google-cloud-ml

我正在尝试使用Google Cloud ML来托管Tensorflow模型并获得预测。我有一个已经上传到云端的预训练模型,我在Cloud ML控制台中创建了一个模型和版本。

我按照说明from here准备我的数据以请求在线预测。对于Python方法和glcoud方法,我得到了相同的错误。为简单起见,我将发布gcloud方法:

我运行gcloud ml-engine predict --model spell_correction --json-instances test.json其中test.json是我的输入数据文件(名为instances的JSON数组)。我得到以下结果:

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的输出:

NAME              DEFAULT_VERSION_NAME
spell_correction  testing

gcloud ml-engine versions list --model spell_correction

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

test.json{"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字符串。

2 个答案:

答案 0 :(得分:1)

附注:您是否首先尝试使用您的模型进行“本地预测”(https://cloud.google.com/sdk/gcloud/reference/ml-engine/local/predict)?您可能首先可以获得更多信息。

答案 1 :(得分:1)

在与Google Cloud ML支持人员交谈后,我得到了这个功能。

我注意到的主要问题是test.json中的所有数据在发送到您的模型时都会包含在列表中。我通过删除上面文件中tokensmask的外部列表来解决这个问题。我还将keep_probbeam更改为常量,因为我不希望它们能够针对我做出的每个预测进行更改。

作为一般建议,通过Python调用提供的错误消息对我来说比来自gcloud ml-engine predict的错误消息更有用。同时确保您的gcloud安装保持最新状态,他们几乎不断修复。