使用自定义容器

如需自定义 AI Platform Prediction 如何从经过训练的机器学习 (ML) 模型提供在线预测服务,您可以在创建模型版本时指定自定义容器(而不是运行时版本)。使用自定义容器时,AI Platform Prediction 会在每个预测节点上运行您选择的 Docker 容器,而不是运行标准运行时版本代码以从 兼容的模型工件提供预测服务。

出于以下任何原因考虑,您可能需要使用自定义容器:

  • 使用 TensorFlow、scikit-learn 或 XGBoost 以外的框架训练的机器学习模型提供预测服务
  • 对预测请求进行预处理或对模型生成的预测进行后处理
  • 运行以您选择的编程语言编写的预测服务器
  • 安装要用于自定义预测的依赖项

本指南介绍如何创建使用自定义容器的模型版本。本指南未提供有关设计和创建 Docker 容器映像的详细说明。如需浏览示例以了解如何创建容器映像并将容器映像与 AI Platform Prediction 结合使用,请参阅使用入门:使用自定义容器提供 PyTorch 预测服务

如需使用自定义容器,您必须为模型版本使用区域性端点Compute Engine (N1) 机器类型

准备容器映像

如需创建使用自定义容器的模型版本,您必须提供 Docker 容器映像作为该容器的基础。此容器映像必须满足自定义容器要求中所述的要求。

如果您计划使用第三方信任的现有容器映像,则可以跳过下面的一到两个部分。

创建容器映像

设计和构建满足容器映像要求的 Docker 容器映像。

如需了解设计和构建 Docker 容器映像的基础知识,请参阅 Docker 文档快速入门

将容器映像推送到 Artifact Registry

将容器映像推送到满足容器映像发布要求Artifact Registry 代码库。

了解如何将容器映像推送到 Artifact Registry

创建模型和模型版本

在创建模型时指定多个配置选项,以确保您以后在模型上创建的所有模型版本都与您的自定义容器兼容。

然后,在创建模型版本时指定大多数容器配置。

创建模型

如需创建模型,请按照创建模型资源的说明操作。您必须在与存储容器映像的 Artifact Registry 代码库地区一致的地区端点上创建模型。如需了解详情,请参阅容器映像发布要求

创建模型版本

在创建使用自定义容器的模型版本时,除了您为模型版本指定的其他字段之外,还请配置以下特定于容器的 API 字段:

以下部分介绍了如何配置这些字段。

此外,请注意在如何配置其他 API 字段方面存在的下列特定于容器的差异:

配置 Version.container

您必须在 Version.container 字段中指定 ContainerSpec 消息。在此消息中,您可以指定以下子字段。如果使用 gcloud beta ai-platform versions create 命令创建模型版本,则可以使用命令行标志来指定每个子字段。

image(必需)

容器映像的 Artifact Registry URI。

gcloud CLI 标志:--image

command(可选)

用于替换容器的 ENTRYPOINT 的可执行文件和参数数组。如需详细了解如何设置此字段的格式以及它如何与 args 字段互动,请参阅 ContainerSpec 的 API 参考文档

gcloud CLI 标志:--command

args(可选)

用于替换容器的 CMD 的可执行文件和参数数组。如需详细了解如何设置此字段的格式以及它如何与 command 字段互动,请参阅 ContainerSpec 的 API 参考文档

gcloud CLI 标志:--args

ports(可选)

端口数组;AI Platform Prediction 会通过列出的第一个端口或者默认的 8080 向您的容器发送活跃性检查、健康检查和预测请求。指定其他端口无效。

gcloud CLI 标志:--ports

env(可选)

容器的 entrypoint 命令以及 commandargs 字段可以引用的一组环境变量。如需详细了解其他字段如何引用这些环境变量,请参阅 ContainerSpec 的 API 参考文档

gcloud CLI 标志:--env-vars

除了您在 Version.container.env 字段中设置的变量之外,AI Platform Prediction 会根据您的配置设置一些其他变量。详细了解如何在这些字段中和容器的 entrypoint 命令中使用这些环境变量

以下示例展示了如何在使用 Google Cloud CLI 创建模型版本时指定这些字段:

gcloud beta ai-platform versions create VERSION \
  --region=REGION \
  --model=MODEL \
  --machine-type=n1-standard-4 \
  --image=IMAGE_URI \
  --command=executable,param1,param2 \
  --args=param3,param4 \
  --ports=8081 \
  --env-vars \
    VAR1='value 1' \
    VAR2='value 2'

替换以下内容:

配置 Version.routes

您可以在 Version.routes 字段中指定 RouteMap 消息。在此消息中,您可以指定以下子字段。如果使用 gcloud beta ai-platform versions create 命令创建模型版本,则可以使用命令行标志来指定每个子字段。

health(可选)

容器的 HTTP 服务器上您想要 AI Platform Prediction 用于发送健康检查的路径。

如果您未指定此字段,则默认为 /v1/models/MODEL/versions/VERSION,其中 MODELVERSION 已分别替换为模型和模型版本的名称。

gcloud CLI 标志:--health-route

predict(可选)

容器的 HTTP 服务器上您想要 AI Platform Prediction 用于转发预测请求的路径。

如果您未指定此字段,则默认为 /v1/models/MODEL/versions/VERSION:predict,其中 MODELVERSION 已分别替换为模型和模型版本的名称。

gcloud CLI 标志:--predict-route

以下示例展示了如何在使用 gcloud CLI 创建模型版本时指定这些字段:

gcloud beta ai-platform versions create VERSION \
  --region=REGION \
  --model=MODEL \
  --machine-type=n1-standard-4 \
  --image=IMAGE_URI \
  --command=executable,param1,param2 \
  --args=param3,param4 \
  --ports=8081 \
  --env-vars \
    VAR1='value 1' \
    VAR2='value 2' \
  --health-route=/health \
  --predict-route=/predict

替换以下内容:

发送预测请求

如需向模型版本发送在线预测请求,您可以按照在线预测指南操作:无论您是否使用自定义容器,此过程都一样。

但是,使用自定义容器时,每个预测请求的正文无需满足使用运行时版本的模型版本的请求正文要求。尽管如此,我们建议您尽可能将容器设计为接受具有标准格式的请求正文。详细了解自定义容器的预测请求和响应要求

后续步骤