您必须先将训练好的模型部署到端点,然后才能通过该模型进行在线预测。为此,您可以使用 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 部署模型时,您必须先创建专用或共享端点,然后将模型部署到该端点。有关详情,请参阅:
将模型部署到 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
以处理预期的基准流量。
更新扩缩配置
如果您在部署模型时指定了 DedicatedResources
或 AutomaticResources
,您可以通过调用 mutateDeployedModel
来更新扩缩配置,而无需重新部署模型。
例如,以下请求会更新 max_replica
、autoscaling_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_replica
、max_replica
、required_replica
和AutoscalingMetricSpec
(仅限DedicatedResources
)。 - 您必须在
updateMask
中列出要更新的每个字段。不公开列出的字段会被忽略。 - DeployedModel 必须处于
DEPLOYED
状态。每个已部署的模型最多只能有一个活跃的变更操作。 mutateDeployedModel
还可让您启用或停用容器日志记录。如需了解详情,请参阅在线预测日志记录。
后续步骤
- 选择端点类型。
- 使用 Google Cloud 控制台部署模型。
- 了解专用端点和 Private Service Connect 端点的预测请求-响应日志记录。
- 了解如何获取在线预测结果。
- 了解如何更改预测日志记录的默认设置。