您必须先将模型部署到端点,然后才能使用该模型执行在线预测。部署模型会将物理资源与模型相关联,以便以低延迟方式执行在线预测。
要实现可部署,模型必须在 Vertex AI Model Registry 中可见。如需了解 Model Registry(包括如何导入模型制品或直接在 Model Registry 中创建模型制品),请参阅 Vertex AI Model Registry 简介。
您可以将多个模型部署到一个端点,也可以将同一模型部署到多个端点。如需详细了解部署模型的选项和用例,请参阅将多个模型部署到同一端点的原因。
将模型部署到端点
请使用以下方法之一部署模型:
Google Cloud 控制台
在 Google Cloud 控制台的 Vertex AI 部分中,转到模型页面。
点击要部署的模型的名称和版本 ID 以打开其详情页面。
选择部署和测试标签页。
如果模型已部署到任何端点,部署模型 (Deploy your model) 部分中会列出这些端点。
点击部署到端点。
如需将模型部署到新的端点,请选择
创建新端点并为新端点提供名称。如需将模型部署到现有端点,请选择 添加到现有端点,然后从下拉列表中选择端点。您可以将多个模型部署到一个端点,也可以将同一模型部署到多个端点。
如果您将模型部署到已部署有一个或多个模型的现有端点,则必须为要部署的模型和已部署模型更新流量分配比例,以使所有百分比的总和为 100%。
如果您要将模型部署到新端点,请接受 100 的流量分配比例值。否则,请为端点上所有模型调整流量拆分值,使它们的总和为 100。
输入要为模型提供的计算节点数下限。
这是模型始终需要可用的节点数。
您需要为使用的节点(无论是处理预测负载还是备用[最少]节点)付费,即使没有预测流量也是如此。请参阅价格页面。
在需要处理预测流量时计算节点的数量可能会增加,但绝不会超出节点数上限。
如需使用自动扩缩功能,请输入希望 Vertex AI 扩容到的计算节点数上限。
选择机器类型。
较大的机器资源将提高预测性能和增加费用。比较可用的机器类型。
选择加速器类型和加速器数量。
如果您在导入或创建模型时启用了加速器使用,则会显示此选项。
对于加速器数量,请参阅 GPU 表,查看每个 CPU 机器类型的有效 GPU 数量。加速器数量指的是每个节点的加速器数量,而不是部署中的加速器总数。
如果要使用自定义服务账号进行部署,请在服务账号下拉框中选择服务账号。
了解如何更改预测日志记录的默认设置。
为模型点击完成,当所有流量分配百分比均正确无误时,点击继续。
随即将显示在其中部署模型的区域。此区域必须是您在其中创建模型的区域。
点击部署,将模型部署到端点。
API
使用 Vertex AI API 部署模型时,请完成以下步骤:
创建端点
如果要将模型部署到现有端点,您可以跳过此步骤,直接前往获取端点 ID。如需试用专用端点预览版,请跳至创建专用端点。
gcloud
以下示例使用 gcloud ai endpoints create
命令:
gcloud ai endpoints create \
--region=LOCATION_ID \
--display-name=ENDPOINT_NAME
替换以下内容:
- LOCATION_ID:您在其中使用 Vertex AI 的区域。
- ENDPOINT_NAME:端点的显示名称。
Google Cloud CLI 工具可能需要几秒钟才能创建端点。
REST
在使用任何请求数据之前,请先进行以下替换:
- LOCATION_ID:您的区域。
- PROJECT_ID:您的项目 ID。
- ENDPOINT_NAME:端点的显示名称。
HTTP 方法和网址:
POST https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/endpoints
请求 JSON 正文:
{ "display_name": "ENDPOINT_NAME" }
如需发送您的请求,请展开以下选项之一:
您应该收到类似以下内容的 JSON 响应:
{ "name": "projects/PROJECT_NUMBER/locations/LOCATION_ID/endpoints/ENDPOINT_ID/operations/OPERATION_ID", "metadata": { "@type": "type.googleapis.com/google.cloud.aiplatform.v1.CreateEndpointOperationMetadata", "genericMetadata": { "createTime": "2020-11-05T17:45:42.812656Z", "updateTime": "2020-11-05T17:45:42.812656Z" } } }
"done":
true
。
Terraform
以下示例使用 google_vertex_ai_endpoint
Terraform 资源创建端点。
如需了解如何应用或移除 Terraform 配置,请参阅基本 Terraform 命令。
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
如需了解如何安装或更新 Vertex AI SDK for Python,请参阅安装 Vertex AI SDK for Python。 如需了解详情,请参阅 Python 版 Vertex AI SDK API 参考文档。
创建专用端点
如果要将模型部署到现有端点,您可以跳过此步骤。
专用端点是速度更快、更稳定的端点,支持更大的载荷大小和更长的请求超时时间。
REST
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-d '{"display_name": "ENDPOINT_NAME", "dedicatedEndpointEnabled": true}' \
https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/endpoints
替换以下内容:
- ENDPOINT_NAME:端点的显示名称。
- LOCATION_ID:您在其中使用 Vertex AI 的区域。
- PROJECT_ID:您的 Google Cloud项目的项目 ID。
Python
endpoint = aiplatform.Endpoint.create(
display_name="ENDPOINT_NAME",
dedicated_endpoint_enabled=True,
)
替换以下内容:
- ENDPOINT_NAME:端点的显示名称。
获取端点 ID
您需要端点 ID 才能部署模型。
gcloud
以下示例使用 gcloud ai endpoints list
命令:
gcloud ai endpoints list \
--region=LOCATION_ID \
--filter=display_name=ENDPOINT_NAME
替换以下内容:
- LOCATION_ID:您在其中使用 Vertex AI 的区域。
- ENDPOINT_NAME:端点的显示名称。
请注意 ENDPOINT_ID
列中显示的数字。请在以下步骤中使用此 ID。
REST
在使用任何请求数据之前,请先进行以下替换:
- LOCATION_ID:您在其中使用 Vertex AI 的区域。
- PROJECT_ID:您的项目 ID。
- ENDPOINT_NAME:端点的显示名称。
HTTP 方法和网址:
GET https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/endpoints?filter=display_name=ENDPOINT_NAME
如需发送您的请求,请展开以下选项之一:
您应该收到类似以下内容的 JSON 响应:
{ "endpoints": [ { "name": "projects/PROJECT_NUMBER/locations/LOCATION_ID/endpoints/ENDPOINT_ID", "displayName": "ENDPOINT_NAME", "etag": "AMEw9yPz5pf4PwBHbRWOGh0PcAxUdjbdX2Jm3QO_amguy3DbZGP5Oi_YUKRywIE-BtLx", "createTime": "2020-04-17T18:31:11.585169Z", "updateTime": "2020-04-17T18:35:08.568959Z" } ] }
部署模型
在下面选择您的语言或环境对应的标签页:
gcloud
以下示例使用 gcloud ai endpoints deploy-model
命令。
以下示例将 Model
部署到 Endpoint
,但不使用 GPU 来加快预测服务速度,而且未在多个 DeployedModel
资源之间拆分流量:
在使用下面的命令数据之前,请先进行以下替换:
- ENDPOINT_ID:端点的 ID。
- LOCATION_ID:您在其中使用 Vertex AI 的区域。
- MODEL_ID:要部署的模型的 ID。
-
DEPLOYED_MODEL_NAME:
DeployedModel
的名称。您还可以将Model
的显示名用于DeployedModel
。 - MIN_REPLICA_COUNT:此部署的最小节点数。 节点数可根据预测负载的需要而增加或减少,直至达到节点数上限并且绝不会少于此节点数。
-
MAX_REPLICA_COUNT:此部署的节点数上限。
节点数可根据预测负载的需要而增加或减少,直至达到此节点数并且绝不会少于节点数下限。如果您省略
--max-replica-count
标志,则节点数上限将设置为--min-replica-count
的值。
执行 gcloud ai endpoints deploy-model 命令:
Linux、macOS 或 Cloud Shell
gcloud ai endpoints deploy-model ENDPOINT_ID\ --region=LOCATION_ID \ --model=MODEL_ID \ --display-name=DEPLOYED_MODEL_NAME \ --min-replica-count=MIN_REPLICA_COUNT \ --max-replica-count=MAX_REPLICA_COUNT \ --traffic-split=0=100
Windows (PowerShell)
gcloud ai endpoints deploy-model ENDPOINT_ID` --region=LOCATION_ID ` --model=MODEL_ID ` --display-name=DEPLOYED_MODEL_NAME ` --min-replica-count=MIN_REPLICA_COUNT ` --max-replica-count=MAX_REPLICA_COUNT ` --traffic-split=0=100
Windows (cmd.exe)
gcloud ai endpoints deploy-model ENDPOINT_ID^ --region=LOCATION_ID ^ --model=MODEL_ID ^ --display-name=DEPLOYED_MODEL_NAME ^ --min-replica-count=MIN_REPLICA_COUNT ^ --max-replica-count=MAX_REPLICA_COUNT ^ --traffic-split=0=100
拆分流量
上述示例中的 --traffic-split=0=100
标志会将 Endpoint
接收的 100% 预测流量发送到新 DeployedModel
(使用临时 ID 0
表示)。如果您的 Endpoint
已有其他 DeployedModel
资源,那么您可以在新 DeployedModel
和旧资源之间拆分流量。例如,如需将 20% 的流量发送到新 DeployedModel
,将 80% 发送到旧版本,请运行以下命令。
在使用下面的命令数据之前,请先进行以下替换:
- OLD_DEPLOYED_MODEL_ID:现有
DeployedModel
的 ID。
执行 gcloud ai endpoints deploy-model 命令:
Linux、macOS 或 Cloud Shell
gcloud ai endpoints deploy-model ENDPOINT_ID\ --region=LOCATION_ID \ --model=MODEL_ID \ --display-name=DEPLOYED_MODEL_NAME \ --min-replica-count=MIN_REPLICA_COUNT \ --max-replica-count=MAX_REPLICA_COUNT \ --traffic-split=0=20,OLD_DEPLOYED_MODEL_ID=80
Windows (PowerShell)
gcloud ai endpoints deploy-model ENDPOINT_ID` --region=LOCATION_ID ` --model=MODEL_ID ` --display-name=DEPLOYED_MODEL_NAME \ --min-replica-count=MIN_REPLICA_COUNT ` --max-replica-count=MAX_REPLICA_COUNT ` --traffic-split=0=20,OLD_DEPLOYED_MODEL_ID=80
Windows (cmd.exe)
gcloud ai endpoints deploy-model ENDPOINT_ID^ --region=LOCATION_ID ^ --model=MODEL_ID ^ --display-name=DEPLOYED_MODEL_NAME \ --min-replica-count=MIN_REPLICA_COUNT ^ --max-replica-count=MAX_REPLICA_COUNT ^ --traffic-split=0=20,OLD_DEPLOYED_MODEL_ID=80
REST
部署此模型。
在使用任何请求数据之前,请先进行以下替换:
- LOCATION_ID:您在其中使用 Vertex AI 的区域。
- PROJECT_ID:您的项目 ID。
- ENDPOINT_ID:端点的 ID。
- MODEL_ID:要部署的模型的 ID。
-
DEPLOYED_MODEL_NAME:
DeployedModel
的名称。您还可以将Model
的显示名用于DeployedModel
。 -
MACHINE_TYPE:可选。用于此部署的每个节点的机器资源。其默认设置为
n1-standard-2
。详细了解机器类型。 - ACCELERATOR_TYPE:要挂接到机器的加速器类型。如果未指定 ACCELERATOR_COUNT 或为零,则可选。建议不要用于使用非 GPU 映像的 AutoML 模型或自定义训练模型。了解详情。
- ACCELERATOR_COUNT:每个副本要使用的加速器数量。可选。对于使用非 GPU 映像的 AutoML 模型或自定义模型,应该为零或未指定。
- MIN_REPLICA_COUNT:此部署的最小节点数。 节点数可根据预测负载的需要而增加或减少,直至达到节点数上限并且绝不会少于此节点数。此值必须大于或等于 1。
- MAX_REPLICA_COUNT:此部署的节点数上限。 节点数可根据预测负载的需要而增加或减少,直至达到此节点数并且绝不会少于节点数下限。
- REQUIRED_REPLICA_COUNT:可选。此部署被标记为成功所需的节点数。必须大于或等于 1,且小于或等于节点数下限。如果未指定,则默认值为节点数量下限。
- TRAFFIC_SPLIT_THIS_MODEL:流向此端点的要路由到使用此操作部署的模型的预测流量百分比。默认值为 100。所有流量百分比之和必须为 100。详细了解流量拆分。
- DEPLOYED_MODEL_ID_N:可选。如果将其他模型部署到此端点,您必须更新其流量拆分百分比,以便所有百分比之和等于 100。
- TRAFFIC_SPLIT_MODEL_N:已部署模型 ID 密钥的流量拆分百分比值。
- PROJECT_NUMBER:自动生成的项目编号
HTTP 方法和网址:
POST https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/endpoints/ENDPOINT_ID:deployModel
请求 JSON 正文:
{ "deployedModel": { "model": "projects/PROJECT/locations/us-central1/models/MODEL_ID", "displayName": "DEPLOYED_MODEL_NAME", "dedicatedResources": { "machineSpec": { "machineType": "MACHINE_TYPE", "acceleratorType": "ACCELERATOR_TYPE", "acceleratorCount": "ACCELERATOR_COUNT" }, "minReplicaCount": MIN_REPLICA_COUNT, "maxReplicaCount": MAX_REPLICA_COUNT, "requiredReplicaCount": REQUIRED_REPLICA_COUNT }, }, "trafficSplit": { "0": TRAFFIC_SPLIT_THIS_MODEL, "DEPLOYED_MODEL_ID_1": TRAFFIC_SPLIT_MODEL_1, "DEPLOYED_MODEL_ID_2": TRAFFIC_SPLIT_MODEL_2 }, }
如需发送您的请求,请展开以下选项之一:
您应该收到类似以下内容的 JSON 响应:
{ "name": "projects/PROJECT_ID/locations/LOCATION/endpoints/ENDPOINT_ID/operations/OPERATION_ID", "metadata": { "@type": "type.googleapis.com/google.cloud.aiplatform.v1.DeployModelOperationMetadata", "genericMetadata": { "createTime": "2020-10-19T17:53:16.502088Z", "updateTime": "2020-10-19T17:53:16.502088Z" } } }
Java
在尝试此示例之前,请按照《Vertex AI 快速入门:使用客户端库》中的 Java 设置说明执行操作。 如需了解详情,请参阅 Vertex AI Java API 参考文档。
如需向 Vertex AI 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Python 版 Vertex AI SDK
如需了解如何安装或更新 Vertex AI SDK for Python,请参阅安装 Vertex AI SDK for Python。 如需了解详情,请参阅 Python 版 Vertex AI SDK API 参考文档。
Node.js
在尝试此示例之前,请按照《Vertex AI 快速入门:使用客户端库》中的 Node.js 设置说明执行操作。 如需了解详情,请参阅 Vertex AI Node.js API 参考文档。
如需向 Vertex AI 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
了解如何更改预测日志记录的默认设置。
获取操作状态
某些请求会启动需要一些时间才能完成的长时间运行的操作。这些请求会返回操作名称,您可以使用该名称查看操作状态或取消操作。Vertex AI 提供辅助方法来调用长时间运行的操作。如需了解详情,请参阅使用长时间运行的操作。
限制
- 如果您已启用 VPC Service Controls,则部署的模型的容器将无法访问互联网。
配置模型部署
在模型部署期间,您要针对如何运行在线预测做出以下重要决策:
已创建的资源 | 在创建资源时指定的设置 |
---|---|
端点 | 运行预测的位置 |
模型 | 要使用的容器 (ModelContainerSpec ) |
DeployedModel | 用于在线预测的机器 |
在初始创建模型或端点后,您将无法更新上面列出的设置,也无法在在线预测请求中替换这些设置。如果需要更改这些设置,您必须重新部署模型。
部署模型时发生的情况
将模型部署到端点,即会将物理(机器)资源与该模型相关联,以便通过模型进行在线预测。在线预测要求低延时。提前为模型提供资源可缩短延迟时间。
模型的训练类型(AutoML 或自定义)和 (AutoML) 数据类型决定了模型可用的物理资源类型。部署模型后,您可以 mutate
其中一些资源,而无需创建新部署。
端点资源提供用于请求预测的服务端点(网址)。例如:
https://us-central1-aiplatform.googleapis.com/v1/projects/{project}/locations/{location}/endpoints/{endpoint}:predict
将多个模型部署到同一端点的原因
将两个模型部署到同一端点后,您可以逐步替换其中一个模型。例如,假设您正在使用某个模型,然后找到一种方法可通过新训练数据来提高该模型的准确率。但是,您不希望将应用更新为指向新的端点网址,也不希望应用发生突然的变化。您可以将新模型添加到同一端点,处理一小部分流量,然后逐渐增加新模型的流量分配比例,直到新模型处理所有流量。
由于资源与模型(而非端点)关联,您可以将不同类型的模型部署到同一端点。但是,最佳做法是将某个特定类型的模型(例如,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
还可让您启用或停用容器日志记录。如需了解详情,请参阅在线预测日志记录。
使用滚动部署替换已部署的模型
在滚动部署中,已部署的模型会被同一模型的新版本替换。新模型会重复使用上一个模型的计算资源。
在滚动部署请求中,流量分配和 dedicatedResources
值与上一次部署相同。滚动部署完成后,流量分配会更新,以显示来自之前 DeployedModel
的所有流量都已迁移到新部署。
默认情况下,DeployedModel
中的其他可配置字段(例如 serviceAccount
、disableContainerLogging
和 enableAccessLogging
)会设置为与上一个 DeployedModel
相同的值。不过,您可以视需要为这些字段指定新值。
使用滚动部署方式部署模型时,系统会创建新的 DeployedModel
。新的 DeployedModel
会收到一个与之前的 ID 不同的新 ID。它还会在 rolloutOptions
字段中收到新的 revisionNumber
值。
如果有多个滚动部署定位到相同的后备资源,则 revisionNumber
值最高的 DeployedModel
将被视为预期的最终状态。
随着滚动部署的进行,旧版 DeployedModel
的所有现有副本都会替换为新版 DeployedModel
的副本。此过程非常快速,每当部署有足够的可用副本或足够的激增容量来启动其他副本时,副本都会更新。
此外,随着滚动部署的进行,旧 DeployedModel
的流量会逐渐迁移到新 DeployedModel
。流量会按每个 DeployedModel
的待处理副本数量进行负载均衡。
如果滚动部署的新副本因其健康路由始终返回非 200 响应代码而从未准备就绪,则系统不会将流量发送到这些未准备就绪的副本。在这种情况下,滚动部署最终会失败,并且副本会还原为之前的 DeployedModel
。
开始滚动部署
如需启动滚动部署,请在模型部署请求中添加 rolloutOptions
字段,如以下示例所示。
REST
在使用任何请求数据之前,请先进行以下替换:
- LOCATION_ID:您在其中使用 Vertex AI 的区域。
- PROJECT_ID:您的项目 ID。
- ENDPOINT_ID:端点的 ID。
- MODEL_ID:要部署的模型的 ID。
-
PREVIOUS_DEPLOYED_MODEL:同一端点上模型的
DeployedModel
ID。这会指定要重复使用的后备资源的DeployedModel
。您可以调用GetEndpoint
来获取端点上已部署模型的列表及其数字 ID。 - MAX_UNAVAILABLE_REPLICAS:在滚动部署期间可以停用的模型副本数量。
- MAX_SURGE_REPLICAS:在滚动部署期间可以启动的额外模型副本数量。如果将此值设为零,则仅使用现有容量。
HTTP 方法和网址:
POST https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/endpoints/ENDPOINT_ID:deployModel
请求 JSON 正文:
{ "deployedModel": { "model": "projects/PROJECT_ID/locations/LOCATION_ID/models/MODEL_ID", "rolloutOptions": { "previousDeployedModel": "PREVIOUS_DEPLOYED_MODEL", "maxUnavailableReplicas": "MAX_UNAVAILABLE_REPLICAS", "maxSurgeReplicas": "MAX_SURGE_REPLICAS" } } }
如需发送您的请求,请展开以下选项之一:
您应该会收到一个成功的状态代码 (2xx) 和一个空响应。
如果需要,您可以将 maxSurgeReplicas
和/或 maxUnavailableReplicas
替换为百分比值,如以下示例所示。
REST
在使用任何请求数据之前,请先进行以下替换:
- MAX_UNAVAILABLE_PERCENTAGE:在滚动部署期间可以停用的模型副本所占的百分比。
- MAX_SURGE_PERCENTAGE:在滚动部署期间可以启动的额外模型副本所占的百分比。如果将此值设为零,则仅使用现有容量。
HTTP 方法和网址:
POST https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/endpoints/ENDPOINT_ID:deployModel
请求 JSON 正文:
{ "deployedModel": { "model": "projects/PROJECT/locations/LOCATION_ID/models/MODEL_ID", "rolloutOptions": { "previousDeployedModel": "PREVIOUS_DEPLOYED_MODEL", "maxUnavailablePercentage": "MAX_UNAVAILABLE_PERCENTAGE", "maxSurgePercentage": "MAX_SURGE_PERCENTAGE" } } }
如需发送您的请求,请展开以下选项之一:
您应该会收到一个成功的状态代码 (2xx) 和一个空响应。
回滚滚动部署
如需回滚滚动部署,请使用正在进行的滚动部署的 DeployedModel
ID 作为 previousDeployedModel
,启动旧模型的新滚动部署。
如需获取正在进行的部署的 DeployedModel
ID,请在对 GetEndpoint
的调用中设置参数 allDeploymentStates=true
,如以下示例所示。
REST
在使用任何请求数据之前,请先进行以下替换:
- LOCATION_ID:您在其中使用 Vertex AI 的区域。
- PROJECT_ID:您的项目 ID。
- ENDPOINT_ID:端点的 ID。
HTTP 方法和网址:
GET https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/endpoints/ENDPOINT_ID?allDeploymentStates=true
如需发送您的请求,请展开以下选项之一:
您应该收到类似以下内容的 JSON 响应:
{ "name": "projects/PROJECT_ID/locations/LOCATION_ID/endpoints/ENDPOINT_ID", "displayName": "rolling-deployments-endpoint", "deployedModels": [ { "id": "2718281828459045", "model": "projects/PROJECT_ID/locations/LOCATION_ID/models/MODEL_ID@1", "displayName": "rd-test-model", "createTime": "2024-09-11T21:37:48.522692Z", "dedicatedResources": { "machineSpec": { "machineType": "e2-standard-2" }, "minReplicaCount": 5, "maxReplicaCount": 5 }, "modelVersionId": "1", "state": "BEING_DEPLOYED" } ], "etag": "AMEw9yMs3TdZMn8CUg-3DY3wS74bkIaTDQhqJ7-Ld_Zp7wgT8gsEfJlrCOyg67lr9dwn", "createTime": "2024-09-11T21:22:36.588538Z", "updateTime": "2024-09-11T21:27:28.563579Z", "dedicatedEndpointEnabled": true, "dedicatedEndpointDns": "ENDPOINT_ID.LOCATION_ID-PROJECT_ID.prediction.vertexai.goog" }
约束和限制
- 之前的
DeployedModel
必须与新DeployedModel
位于同一端点。 - 您不能使用相同的
previousDeployedModel
创建多个滚动部署。 - 您无法在尚未完全部署的
DeployedModel
上创建滚动部署。例外情况:如果previousDeployedModel
本身就是一项正在进行的滚动部署,则可以在其上创建新的滚动部署。这样,您就可以回滚开始失败的部署。 - 在顺序部署成功完成后,之前的模型不会自动取消部署。您可以手动取消部署模型。
- 对于非专用端点上的滚动部署,新模型的
predictRoute
和healthRoute
必须与之前的模型相同。 - 滚动部署与模型共享托管不兼容。
- 滚动部署不适用于需要在线说明的模型。
取消部署模型并删除端点
请使用以下方法之一取消部署模型并删除端点。
Google Cloud 控制台
gcloud
列出项目中所有端点的 ID:
gcloud ai endpoints list \ --project=PROJECT_ID \ --region=LOCATION_ID
将 PROJECT_ID 替换为您的项目名称,将 LOCATION_ID 替换为您使用 Vertex AI 的区域。
列出已部署到端点的模型的 ID:
gcloud ai endpoints describe ENDPOINT_ID \ --project=PROJECT_ID \ --region=LOCATION_ID
将 ENDPOINT_ID 替换为端点 ID。
从端点取消部署模型:
gcloud ai endpoints undeploy-model ENDPOINT_ID \ --project=PROJECT_ID \ --region=LOCATION_ID \ --deployed-model-id=DEPLOYED_MODEL_ID
将 DEPLOYED_MODEL_ID 替换为模型 ID。
可选:删除在线预测端点:
gcloud ai endpoints delete ENDPOINT_ID \ --project=PROJECT_ID \ --region=LOCATION_ID