将模型部署到端点

您必须先将训练好的模型部署到端点,然后才能通过该模型进行在线预测。为此,您可以使用 Google Cloud 控制台、Google Cloud CLI 或 Vertex AI API。

本文档介绍了将模型部署到端点的过程。

部署模型时发生的情况

部署模型会将物理资源与模型相关联,以便以低延迟方式执行在线预测。

您可以将多个模型部署到一个端点,也可以将同一模型部署到多个端点。如需了解详情,请参阅将多个模型部署到同一端点的原因

准备将模型部署到端点

在模型部署期间,您要针对如何运行在线预测做出以下重要决策:

已创建的资源 在创建资源时指定的设置
端点 运行预测的位置
模型 要使用的容器 (ModelContainerSpec)
DeployedModel 用于在线预测的计算资源

将模型部署到端点后,这些部署设置便无法更改。如需更改这些设置,您必须重新部署模型。

部署流程的第一步是确定要使用哪种类型的端点。如需了解详情,请参阅选择端点类型

接下来,确保模型在 Vertex AI Model Registry 中可见。必须执行此操作,模型才能部署。如需了解 Model Registry(包括如何导入模型制品或直接在 Model Registry 中创建模型制品),请参阅 Vertex AI Model Registry 简介

接下来要做的决定是,要使用哪些计算资源来提供模型。模型的训练类型(AutoML 或自定义)和 (AutoML) 数据类型决定了模型可用的物理资源类型。部署模型后,您可以 mutate 其中一些资源,而无需创建新部署。

端点资源提供用于请求预测的服务端点(网址)。例如:

   https://us-central1-aiplatform.googleapis.com/v1/projects/{project}/locations/{location}/endpoints/{endpoint}:predict

将模型部署到端点

您可以通过使用 Google Cloud 控制台使用 gcloud CLI 或 Vertex AI API 将模型部署到端点。

使用 Google Cloud 控制台将模型部署到公共端点

在 Google Cloud 控制台中,您可以将模型部署到现有的专用或共享公共端点,也可以在部署过程中创建新的端点。如需了解详情,请参阅使用 Google Cloud 控制台部署模型

使用 gcloud CLI 或 Vertex AI API 将模型部署到公共端点

使用 gcloud CLI 或 Vertex AI API 部署模型时,您必须先创建专用或共享端点,然后将模型部署到该端点。有关详情,请参阅:

  1. 创建专用或共享公共端点
  2. 使用 gcloud CLI 或 Vertex AI API 部署模型

将模型部署到 Private Service Connect 端点

如需了解详情,请参阅使用 Private Service Connect 端点进行在线预测

使用滚动部署更新已部署的模型

您可以使用滚动部署将已部署的模型替换为同一模型的新版本。新模型会重复使用上一个模型的计算资源。如需了解详情,请参阅使用滚动部署替换已部署的模型

取消部署模型并删除端点

您可以取消部署模型并删除端点。如需了解详情,请参阅取消部署模型并删除端点

将多个模型部署到同一端点的原因

将两个模型部署到同一端点后,您可以逐步替换其中一个模型。例如,假设您正在使用某个模型,然后找到一种方法可通过新训练数据来提高该模型的准确率。但是,您不希望将应用更新为指向新的端点网址,也不希望应用发生突然的变化。您可以将新模型添加到同一端点,处理一小部分流量,然后逐渐增加新模型的流量分配比例,直到新模型处理所有流量。

由于资源与模型(而非端点)关联,您可以将不同类型的模型部署到同一端点。但是,最佳做法是将某个特定类型的模型(例如,AutoML 表格或自定义训练)部署到一个端点。此配置更易于管理。

将一个模型部署到多个端点的原因

您可能需要针对不同的应用环境(例如测试和生产)部署具有不同资源的模型。您可能还需要为预测请求支持不同的 SLO。也许您的某一个应用的性能需求明显高于其他应用。在这种情况下,您可以将该模型部署到具有更多机器资源的高性能端点。如需优化费用,您还可以将模型部署到具有较少机器资源的低性能端点。

扩缩行为

将用于在线预测的模型部署为 DeployedModel 时,您可以将预测节点配置为自动扩缩。为此,请将 dedicatedResources.maxReplicaCount 设置为大于 dedicatedResources.minReplicaCount 的值。

配置 DeployedModel 时,您必须将 dedicatedResources.minReplicaCount 设置为至少 1。换句话说,您不能将 DeployedModel 配置为在未使用时缩减为 0 个预测节点。

默认情况下,只有在预测节点数量在部署请求超时值之前达到 dedicatedResources.minReplicaCount 时,部署操作才会被视为成功。否则,系统会将部署标记为失败,并释放底层资源。

部署和更改部分成功

您可以通过将 dedicatedResources.requiredReplicaCount 设置为小于 dedicatedResources.minReplicaCount 的值来修改默认部署行为。在这种情况下,当预测节点数量达到 dedicatedResources.requiredReplicaCount 时,系统会将部署操作标记为成功,即使该操作尚未完成也是如此。部署会持续到达到 dedicatedResources.minReplicaCount 为止。如果在部署请求时间之前未达到 dedicatedResources.minReplicaCount,操作仍会成功,但 DeployedModel.status.message 中会返回失败副本的错误消息。

自定义模型服务的配额根据已部署模型的计算资源的实时用量计算。如果项目中所有部署的 maxReplicaCount 总和超过项目的配额,则某些部署可能会因配额用尽而无法自动扩缩。

端点按机器增加或减少,但配额按 CPU 或 GPU 计算。例如,如果模型部署到 a2-highgpu-2g 机器类型,则每个活跃副本将计为 24 个 CPU 和 2 个 GPU,并计入项目的配额。如需了解详情,请参阅配额和限制

批量预测的预测节点不会自动扩缩。 Vertex AI 会使用 BatchDedicatedResources.startingReplicaCount 并忽略 BatchDedicatedResources.maxReplicaCount

目标使用率和配置

默认情况下,如果您部署没有专用 GPU 资源的模型,则 Vertex AI 会自动增加或减少副本的数量,以使 CPU 使用率与默认的 60% 目标值匹配。

默认情况下,如果您部署具有专用 GPU 资源的模型(如果 machineSpec.accelerator_count 大于 0),则 Vertex AI 会自动增加或减少副本数,以使 CPU 或 GPU 使用率(以较高者为准)与默认的 60% 目标值匹配。因此,如果预测吞吐量导致高 GPU 使用率,但未导致高 CPU 使用率,则 Vertex AI 会扩容,且 CPU 利用率非常低(这将会显示在监控中)。反之,如果自定义容器未充分利用 GPU,但有一个不相关的进程,使 CPU 利用率超过 60%,则 Vertex AI 会扩容,即使可能不需要实现 QPS 和延迟时间目标也是如此。

您可以通过指定 autoscalingMetricSpecs 来替换默认阈值指标和目标。 请注意,如果部署配置为仅根据 CPU 使用率进行扩缩,则即使 GPU 使用率较高,部署也不会扩容。

管理资源使用率

您可以监控端点以跟踪 CPU 和加速器使用率、请求数、延迟时间以及当前和目标副本数等指标。此信息可帮助您了解端点的资源使用率和扩缩行为。

请注意,每个副本只运行一个容器。这意味着,如果预测容器无法充分利用所选的计算资源(例如多核机器的单线程代码,或在执行预测期间调用其他服务的自定义模型),则节点可能不会扩容。

例如,如果您使用的是 FastAPI 或具有可配置数量的工作器或线程的任何模型服务器,则在很多情况下,有多个工作器可以提高资源利用率,从而提高服务自动扩缩副本数的能力。

通常,建议最开始每个核心有一个工作器或线程。如果您发现 CPU 利用率较低,尤其是在负载较高时,或者模型因 CPU 利用率较低而未扩容,则增加工作器数量。另一方面,如果您发现利用率过高,且延迟时间在负载时高于预期,请尝试使用较少的工作器。 如果您已经在只使用单个工作器,请尝试使用更小的机器类型。

扩缩行为和延迟

Vertex AI 每 15 秒使用一次前 5 分钟时段内的数据调整副本数。在每个 15 秒的周期内,系统都会测量一次服务器使用率,并根据以下公式生成目标副本数:

target # of replicas = Ceil(current # of replicas * (current utilization / target utilization))

例如,如果您有两个副本且使用率为 100%,则目标值为 4:

4 = Ceil(3.33) = Ceil(2 * (100% / 60%))

再举一例,如果您有 10 个副本且使用率下降到 1%,则目标值为 1:

1 = Ceil(.167) = Ceil(10 * (1% / 60%))

在每个 15 秒周期结束时,系统都会调整副本数,以匹配上一个 5 分钟时段内的最高目标值。请注意,由于选择了最高目标值,因此如果 5 分钟的时间段内出现使用率高峰,则即使总体使用率非常低,端点也不会缩容。另一方面,如果系统需要纵向扩容,则会在 15 秒内进行扩容,因为选择的是最高目标值而不是平均值。

请注意,即使在 Vertex AI 调整副本的数量后,启动或关闭副本也需要一些时间。因此,在端点可以根据流量做出调整之前,会有额外的延迟。造成延迟的主要因素包括:

  • 预配和启动 Compute Engine 虚拟机的时间
  • 从注册库下载容器的时间
  • 从存储空间加载模型的时间

如需了解模型的实际扩缩行为,最佳方法是运行负载测试并优化对您的模型和用例至关重要的特征。如果自动扩缩器为应用扩容的速度不够快,请预配足够的 min_replicas 以处理预期的基准流量。

更新扩缩配置

如果您在部署模型时指定了 DedicatedResourcesAutomaticResources,您可以通过调用 mutateDeployedModel 来更新扩缩配置,而无需重新部署模型。

例如,以下请求会更新 max_replicaautoscaling_metric_specs,并停用容器日志记录。

{
  "deployedModel": {
    "id": "2464520679043629056",
    "dedicatedResources": {
      "maxReplicaCount": 9,
      "autoscalingMetricSpecs": [
        {
          "metricName": "aiplatform.googleapis.com/prediction/online/cpu/utilization",
          "target": 50
        }
      ]
    },
    "disableContainerLogging": true
  },
  "update_mask": {
    "paths": [
      "dedicated_resources.max_replica_count",
      "dedicated_resources.autoscaling_metric_specs",
      "disable_container_logging"
    ]
  }
}

使用说明:

  • 您不能更改机器类型或从 DedicatedResources 更改为 AutomaticResources,或反之亦然。您只能更改以下扩缩配置字段:min_replicamax_replicarequired_replicaAutoscalingMetricSpec(仅限 DedicatedResources)。
  • 您必须在 updateMask 中列出要更新的每个字段。不公开列出的字段会被忽略。
  • DeployedModel 必须处于 DEPLOYED 状态。每个已部署的模型最多只能有一个活跃的变更操作。
  • mutateDeployedModel 还可让您启用或停用容器日志记录。如需了解详情,请参阅在线预测日志记录

后续步骤