如何将导出的Google AutoML计算机发布为API?

问题描述

我已经使用Google的AutoML Tables界面建立了机器学习模型。训练好模型后,我按照Google官方文档页面https://cloud.google.com/automl-tables/docs/model-export上详述的步骤,将其在docker容器中导出到了本地计算机。现在,在我的机器上,它存在于Docker容器中,我可以使用以下命令成功运行它:

docker run -v exported_model:/models/default/0000001 -p 8080:8080 -it gcr.io/cloud-automl-tables-public/model_server

一旦通过Docker作为本地主机运行,我就能使用以下python代码进行预测:

import requests
import json

vector = [1,1,2,1]
input = {"instances": [{"column_1": vector[0],"column_2": vector[1],"column_3": vector[2],"column_4": vector[3],"column_5": vector[4],"column_6": vector[5],"column_7": vector[6]}]}
jsonData = json.dumps(input)
response = requests.post("http://localhost:8080/predict",jsonData)
print(response.json())

我需要将此模型发布为客户端要使用的API。我已经考虑过AWS EC2和Azure功能,但是到目前为止,我还没有取得任何成功。理想情况下,我计划使用FastAPI接口,但不知道如何在dockerized上下文中执行此操作。

解决方法

我已经解决了这个问题,但是,这是有代价的。可以从 GCP 部署 AutoML 模型,但随着时间的推移会产生少量费用。我认为没有办法解决这个问题,否则 Google 会失去收入。

模型启动并运行后,可使用以下 Python 代码进行预测:

from google.cloud import automl_v1beta1 as automl

project_id = 'chatbot-286a1'
compute_region = 'us-central1'
model_display_name = 'DNALC_4p_global_20201112093636'
inputs = {'sessionDuration': 60.0,'createdStartDifference': 1206116.042162,'confirmedStartDifference': 1206116.20255,'createdConfirmedDifference': -0.160388}

client = automl.TablesClient(project=project_id,region=compute_region)
feature_importance = False
if feature_importance:
    response = client.predict(
        model_display_name=model_display_name,inputs=inputs,feature_importance=True,)
else:
    response = client.predict(
        model_display_name=model_display_name,inputs=inputs
    )

print("Prediction results:")
for result in response.payload:
    print(
        "Predicted class name: {}".format(result.tables.value)
    )
    print("Predicted class score: {}".format(result.tables.score))
    break

为了使代码正常工作,以下资源可能会有所帮助:

在 python 中安装 AutoML:

How to install google.cloud automl_v1beta1 for python using anaconda?

在 python 中验证 AutoML:

https://cloud.google.com/docs/authentication/production

(请记住将身份验证令牌的 json 文件路径作为环境变量 - 这是出于安全目的。)