Google 云机器学习 FAILED_PRECONDITION
Google Cloud ML FAILED_PRECONDITION
我正在尝试使用 Google Cloud ML 来托管 Tensorflow 模型并获得预测。我有一个已上传到云端的预训练模型,并在我的 Cloud ML 控制台中创建了一个模型和版本。
我按照说明 from here 准备了我的数据以请求在线预测。对于 Python 方法和 glcoud
方法,我得到相同的错误。为简单起见,我将 post gcloud
方法:
I 运行 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}]}
我对模型的输入:
tokens
: tf.placeholder(tf.int32, shape=[None, None])
mask
: tf.placeholder(tf.int32, shape=[None, None])
keep_prob
: tf.placeholder(tf.float32)
beam
: tf.placeholder(tf.int32)
当通过 python 调用时,request_body
只是 test.json
作为字符串。
旁注:您是否首先尝试使用您的模型 "local predict" (https://cloud.google.com/sdk/gcloud/reference/ml-engine/local/predict)?您也许可以先在那里获得更多信息。
在与 Google Cloud ML 支持人员交谈后,我开始使用它。
我注意到的主要问题是 test.json
中的所有数据在发送到您的模型时都包含在一个列表中。我通过从上面文件中的 tokens
和 mask
中删除外部列表来解决这个问题。我还将 keep_prob
和 beam
更改为常量,因为我不希望它们能够针对我所做的每个预测进行更改。
作为一般性建议,通过 Python 调用提供的错误消息对我来说比来自 gcloud ml-engine predict
的错误消息有用得多。还要确保使您的 gcloud
安装保持最新,他们几乎一直在进行修复。
我正在尝试使用 Google Cloud ML 来托管 Tensorflow 模型并获得预测。我有一个已上传到云端的预训练模型,并在我的 Cloud ML 控制台中创建了一个模型和版本。
我按照说明 from here 准备了我的数据以请求在线预测。对于 Python 方法和 glcoud
方法,我得到相同的错误。为简单起见,我将 post gcloud
方法:
I 运行 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}]}
我对模型的输入:
tokens
: tf.placeholder(tf.int32, shape=[None, None])
mask
: tf.placeholder(tf.int32, shape=[None, None])
keep_prob
: tf.placeholder(tf.float32)
beam
: tf.placeholder(tf.int32)
当通过 python 调用时,request_body
只是 test.json
作为字符串。
旁注:您是否首先尝试使用您的模型 "local predict" (https://cloud.google.com/sdk/gcloud/reference/ml-engine/local/predict)?您也许可以先在那里获得更多信息。
在与 Google Cloud ML 支持人员交谈后,我开始使用它。
我注意到的主要问题是 test.json
中的所有数据在发送到您的模型时都包含在一个列表中。我通过从上面文件中的 tokens
和 mask
中删除外部列表来解决这个问题。我还将 keep_prob
和 beam
更改为常量,因为我不希望它们能够针对我所做的每个预测进行更改。
作为一般性建议,通过 Python 调用提供的错误消息对我来说比来自 gcloud ml-engine predict
的错误消息有用得多。还要确保使您的 gcloud
安装保持最新,他们几乎一直在进行修复。