使用滚动部署替换已部署的模型

滚动部署中,已部署的模型会被同一模型的新版本替换。新模型会重复使用上一个模型的计算资源。

在滚动部署请求中,流量分配和 dedicatedResources 值与上一次部署相同。滚动部署完成后,流量分配会更新,以显示之前 DeployedModel 的所有流量都已迁移到新部署。

默认情况下,DeployedModel 中的其他可配置字段(例如 serviceAccountdisableContainerLoggingenableAccessLogging)会设置为与上一个 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 本身就是一项正在进行的滚动部署,则可以在其上创建新的滚动部署。这样,您就可以回滚开始失败的部署。
  • 在顺序部署成功完成后,之前的模型不会自动取消部署。您可以手动取消部署模型
  • 对于在共享公共端点上进行的滚动部署,新模型的 predictRoutehealthRoute 必须与之前的模型相同。
  • 滚动部署与模型共享托管不兼容。
  • 滚动部署不适用于需要在线说明的模型。