本页面介绍如何使用 Vertex AI 将 AutoML 表格模型导出到 Cloud Storage,将模型下载到本地服务器或由其他云服务提供商托管的服务器,然后使用 Docker 提供模型以执行预测。
如需了解如何导出图片和视频 Edge 模型,请参阅导出 AutoML Edge 模型。
导出表格模型后,如果要将其重新导入 Vertex AI,请参阅将模型导入 Vertex AI。
限制
导出 AutoML 表格模型存在以下限制:
您只能导出 AutoML 表格分类和回归模型。不支持导出 AutoML 表格预测模型。
使用导出的表格模型时无法使用 Vertex Explainable AI。如果您需要使用 Vertex Explainable AI,则必须使用 Vertex AI 托管的模型提供预测。
导出的表格模型只能在支持 Advanced Vector Extensions (AVX) 指令集的 x86 架构 CPU 上运行。
导出过程
以下为模型导出步骤:
- 设置您的环境。
- 导出模型。
- 拉取并运行模型服务器。
- 请求预测。
准备工作
在完成此任务之前,您必须首先完成以下任务:
- 按照设置云环境中的说明设置您的项目。
- 训练您要下载的模型。
- 在将用于运行导出的模型的服务器上安装并初始化 Google Cloud CLI。
- 在服务器上安装 Docker。
导出模型
控制台
REST
您可以使用 models.export 方法将模型导出到 Cloud Storage。在使用任何请求数据之前,请先进行以下替换:
- LOCATION:您的区域。
- PROJECT:您的项目 ID。
- MODEL_ID:要导出的模型的 ID。
-
GCS_DESTINATION:Cloud Storage 中的目标文件夹。例如
gs://export-bucket/exports
。您无法将模型导出到顶级存储桶。您必须至少使用一级文件夹。
该文件夹必须符合存储桶要求。
为获得最佳效果,请新建一个文件夹。您将在后续步骤中复制该文件夹的全部内容。
HTTP 方法和网址:
POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT/locations/LOCATION/models/MODEL_ID:export
请求 JSON 正文:
{ "outputConfig": { "exportFormatId": "tf-saved-model", "artifactDestination": { "outputUriPrefix": "GCS_DESTINATION" } } }
如需发送请求,请选择以下方式之一:
curl
将请求正文保存在名为 request.json
的文件中,然后执行以下命令:
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT/locations/LOCATION/models/MODEL_ID:export"
PowerShell
将请求正文保存在名为 request.json
的文件中,然后执行以下命令:
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT/locations/LOCATION/models/MODEL_ID:export" | Select-Object -Expand Content
您应该收到类似以下内容的 JSON 响应:
{ "name": "projects/PROJECT_NUMBER/locations/LOCATION/models/MODEL_ID/operations/OPERATION_ID", "metadata": { "@type": "type.googleapis.com/google.cloud.aiplatform.v1.ExportModelOperationMetadata", "genericMetadata": { "createTime": "2020-10-12T20:53:40.130785Z", "updateTime": "2020-10-12T20:53:40.130785Z" }, "outputInfo": { "artifactOutputUri": "gs://OUTPUT_BUCKET/model-MODEL_ID/EXPORT_FORMAT/YYYY-MM-DDThh:mm:ss.sssZ" } } }
Java
在尝试此示例之前,请按照《Vertex AI 快速入门:使用客户端库》中的 Java 设置说明执行操作。 如需了解详情,请参阅 Vertex AI Java API 参考文档。
如需向 Vertex AI 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Node.js
在尝试此示例之前,请按照《Vertex AI 快速入门:使用客户端库》中的 Node.js 设置说明执行操作。 如需了解详情,请参阅 Vertex AI Node.js API 参考文档。
如需向 Vertex AI 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Python
如需了解如何安装或更新 Vertex AI SDK for Python,请参阅安装 Vertex AI SDK for Python。 如需了解详情,请参阅 Python API 参考文档。
获取导出操作的状态
某些请求会启动需要一些时间才能完成的长时间运行的操作。这些请求会返回操作名称,您可以使用该名称查看操作状态或取消操作。Vertex AI 提供辅助方法来调用长时间运行的操作。如需了解详情,请参阅使用长时间运行的操作。
拉取并运行模型服务器
在此任务中,您将从 Cloud Storage 下载已导出的模型并启动 Docker 容器,以使您的模型可以接收预测请求。
如需拉取并运行模型服务器,请执行以下操作:
在要运行模型的计算机上,切换到要保存导出模型的目录。
下载导出的模型:
gcloud storage cp <var>gcs-destination</var> . --recursive
其中,gcs-destination 是 Cloud Storage 中导出模型的位置路径。
模型会复制到您的当前目录,即位于以下路径下:
./model-<model-id>/tf-saved-model/<export-timestamp>
路径可以包含
tf-saved-model
或custom-trained
。重命名目录,以移除时间戳。
mv model-<model-id>/tf-saved-model/<export-timestamp> model-<model-id>/tf-saved-model/<new-dir-name>
此时间戳会导致该目录对 Docker 无效。
拉取模型服务器 Docker 映像。
sudo docker pull MODEL_SERVER_IMAGE
要拉取的模型服务器映像位于导出的模型目录的
environment.json
文件中。该文件应具有以下路径:./model-<model-id>/tf-saved-model/<new-dir-name>/environment.json
如果不存在 environment.json 文件,请使用:
MULTI_REGION-docker.pkg.dev/vertex-ai/automl-tabular/prediction-server-v1
将
MULTI_REGION
替换为us
、europe
或asia
,然后选择要从哪个 Docker 代码库拉取 Docker 映像。每个代码库都提供相同的 Docker 映像,但选择最靠近运行 Docker 的机器的 Artifact Registry 多区域可能会缩短延迟时间。使用您刚创建的目录名启动 Docker 容器:
docker run -v `pwd`/model-<model-id>/tf-saved-model/<new-dir-name>:/models/default -p 8080:8080 -it MODEL_SERVER_IMAGE
您随时可以使用 Ctrl-C
停止模型服务器。
更新模型服务器 Docker 容器
因为您在导出模型时下载模型服务器 Docker 容器,所以必须明确更新模型服务器以获取更新和问题修复。您应该使用以下命令定期更新模型服务器:
docker pull MODEL_SERVER_IMAGE
确保 Docker 映像 URI 与您之前拉取的 Docker 映像的 URI 匹配。
从已导出的模型进行预测
Vertex AI 映像容器中的模型服务器处理预测请求并返回预测结果。
批量预测不适用于导出的模型。
预测数据的格式
您对预测请求提供的数据(payload
格式)应具有以下 JSON 格式:
{ "instances": [ { "column_name_1": value, "column_name_2": value, … } , … ] }
以下示例展示了一个包含三列的请求:分类列、数值数组和结构体。该请求包含两行。
{ "instances": [ { "categorical_col": "mouse", "num_array_col": [ 1, 2, 3 ], "struct_col": { "foo": "piano", "bar": "2019-05-17T23:56:09.05Z" } }, { "categorical_col": "dog", "num_array_col": [ 5, 6, 7 ], "struct_col": { "foo": "guitar", "bar": "2019-06-17T23:56:09.05Z" } } ] }
发出预测请求
将您的请求数据放入文本文件,例如
tmp/request.json
。预测请求中的数据行数(称为小批次大小)会影响预测延迟时间和吞吐量。小批次大小越大,延迟时间就越长且吞吐量就越高。要缩短延迟时间,请降低小批次大小。要提高吞吐量,请增加小批次大小。最常用的小批次大小是 1、32、64、128、256、512 和 1024。
请求预测:
curl -X POST --data @/tmp/request.json http://localhost:8080/predict
预测结果的格式
结果的格式取决于模型目标。
分类模型结果
分类模型(二元和多类别)的预测结果会为目标列的每个可能值返回一个概率分数。您必须确定如何使用这些分数。 例如,要通过提供的分数获得二元分类,您需要确定阈值。假设有“A”和“B”这两类,如果“A”的得分大于所选阈值,则应将示例归为“A”类,否则应归为“B”类。对于不平衡数据集,阈值可能接近 100% 或 0%。
分类模型的结果负载类似于以下示例:
{ "predictions": [ { "scores": [ 0.539999994635582, 0.2599999845027924, 0.2000000208627896 ], "classes": [ "apple", "orange", "grape" ] }, { "scores": [ 0.23999999463558197, 0.35999998450279236, 0.40000002086278963 ], "classes": [ "apple", "orange", "grape" ] } ] }
回归模型结果
为预测请求的每个有效行返回预测值。对于导出的模型,不会返回预测间隔。
回归模型的结果负载类似于以下示例:
{ "predictions": [ { "value": -304.3663330078125, "lower_bound": -56.32196807861328, "upper_bound": 126.51904296875 }, { "value": -112.3663330078125, "lower_bound": 16.32196807861328, "upper_bound": 255.51904296875 } ] }
后续步骤