使用逐步部署功能來取代已部署的模型

滾動式部署中,已部署的模型會替換為相同模型的新版本。新模型會重複使用先前模型的運算資源。

在滾動式部署要求中,流量分配和 dedicatedResources 值與先前部署相同。滾動式部署作業完成後,流量分配會更新,顯示先前 DeployedModel 的所有流量已遷移至新部署作業。

DeployedModel 中的其他可設定欄位 (例如 serviceAccountdisableContainerLoggingenableAccessLogging) 預設為與先前的 DeployedModel 相同的值。不過,您可以選擇為這些欄位指定新的值。

使用逐步部署功能部署模型時,系統會建立新的 DeployedModel。新的 DeployedModel 會收到與先前不同的新 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) 和空白回應。

如有需要,您可以將 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,請將呼叫中的參數 allDeploymentStates=true 設為 GetEndpoint,如以下範例所示。

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 必須與先前模型相同。
  • 逐步部署與模型共同託管不相容。
  • 對於需要線上說明的模型,無法使用逐步部署。