问题描述
我已经使用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 文件路径作为环境变量 - 这是出于安全目的。)