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

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

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

DeployedModel 中的其他可配置字段(例如 serviceAccountdisableContainerLoggingenableAccessLogging)默认设置为与之前的 DeployedModel 相同的值。不过,您可以视需要为这些字段指定新值。

使用滚动部署部署模型时,系统会创建新的 DeployedModel。新的 DeployedModel 会收到一个与之前不同的新 ID。它还在 rolloutOptions 字段中接收新的 revisionNumber 值。

如果存在多个以相同支持资源为目标的滚动部署,则具有最高 revisionNumberDeployedModel 会视为预期最终状态。

随着滚动部署的进行,之前 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) 和一个空响应。

如果需要,您可以将 maxSurgeReplicasmaxUnavailableReplicas(或其中一个)替换为百分比值,如以下示例所示。

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 必须与之前模型的相同。
  • 滚动部署与模型共同托管不兼容。
  • 对于需要在线说明的模型,无法使用滚动部署。