簡體   English   中英

Google Cloud Platform - AI Platform:為什么調用 API 時會收到不同的響應正文?

[英]Google Cloud Platform - AI Platform: why do I get different response body when calling API?

我在 Google Cloud AI Platform 上創建了 2 個模型,我想知道為什么在使用 Python 調用 REST API 時會得到不同的響應體?
更加具體:

  • 在第一種情況下,我得到 2 個字典(鍵:“predictions”和“dense_1”,后者是我的 tensorflow 模型的 output 層名稱)
    {'predictions': [{'dense_1': [9.130606807519459e-23, 4.872276949885089e-23, 0.002939987927675247, 0.957423210144043, 0.0, 7.103511528994133e-11, 6.0420668887672946e-05, 0.039576299488544464, 3.989315388447379e-12, 8.409963248741903e-32]}]}
  • 在第二種情況下,我得到 1 個字典(鍵:“預測”)。
    {'predictions': [[9.13060681e-23, 4.87227695e-23, 0.00293998793, 0.95742321, 0.0, 7.10351153e-11, 6.04206689e-05, 0.0395763, 3.98931539e-12, 8.40996325e-32]]}

這很奇怪,因為我使用的是與 GCS 完全相同的 model。 這兩種型號之間的唯一區別是第二種型號在歐洲有一個區域端點,並且它們不在相同的機器類型上運行(但我認為與我的問題沒有聯系)。

編輯:這是我的請求方法。 我在案例1中使用了regional_endpoint = None ,在案例2中使用了regional_endpoint = "europe-west1"

project_id = "my_project_id"
model_id = "my_model_id"
version_id = None # if None, default version is used
regional_endpoint = None # "europe-west1"

def predict(project, model, instances, version=None, regional_endpoint=None):
'''
Send JSON data to a deployed model for prediction.
Args:
    - project (str): Project ID where the AI Platform model is deployed
    - model (str): Model ID
    - instances (tensor): model's expected inputs
    - version (str): Optional. Version ID
    - regional_endpoint (str): Optional. See https://cloud.google.com/dataflow/docs/concepts/regional-endpoints
Returns:
    - dictionary of prediction results

'''
input_data_json = {"signature_name": "serving_default", "instances": instances.tolist()}

model_path = "projects/{}/models/{}".format(project_id, model_id)
if version is not None:
    model_path += "/versions/{}".format(version)

if regional_endpoint is not None:
    endpoint = 'https://{}-ml.googleapis.com'.format(regional_endpoint)
    regional_endpoint = ClientOptions(api_endpoint=endpoint)

ml_ressource = googleapiclient.discovery.build("ml", "v1", client_options=regional_endpoint).projects()

request = ml_ressource.predict(name=model_path, body=input_data_json)
response = request.execute()

if "error" in response:
    raise RuntimeError(response["error"])

return response["predictions"]

我使用 gcloud 命令得到了相同的結果:

$ gcloud ai-platform predict --model=my_model_id --json-request=data.json --region=europe-west1
Using endpoint [https://europe-west1-ml.googleapis.com/]
[[5.64439188e-06, 1.11136234e-09, 4.66703168e-05, 1.34729596e-08, 2.34136132e-05, 1.52856941e-07, 0.999924064, 3.328397e-10, 3.32789263e-08, 3.37864092e-09]]

$ gcloud ai-platform predict --model=my_model_id --json-request=data.json
Using endpoint [https://ml.googleapis.com/]
DENSE_1
[5.644391876558075e-06, 1.1113623354930269e-09, 4.6670316805830225e-05, 1.3472959636828818e-08, 2.341361323487945e-05, 1.528569413267178e-07, 0.9999240636825562, 3.328397002455574e-10, 3.327892628135487e-08, 3.378640922591103e-09]

我已經重現了相同的行為。
從端點列表中,我已經測試了以下內容:

  • 歐洲西部1
  • 亞洲-東1
  • 我們東1
  • 澳大利亞-東南1

並且它們都沒有像全局端點那樣返回 output 層的名稱。

我已經將此行為通知了 AI Platform 產品團隊,並在 issuetracker 上創建了一個公共問題來跟蹤他們的進度。
因此,我建議所有關於它的未來溝通都應該在 issuetracker 上完成。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM