使用滾動式部署作業取代已部署的模型

在滾動式部署中,部署的模型會由相同模型的新版本取代。新模型會重複使用先前模型的運算資源。

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

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

使用滾動式部署方式部署模型時,系統會建立新的 DeployedModel。新的 DeployedModel 會收到與先前不同的新 ID。此外,rolloutOptions 欄位也會收到新的 revisionNumber 值。

如果有多個目標為相同支援資源的輪流部署作業,系統會將 revisionNumber 最高的 DeployedModel 視為預期的最終狀態。

隨著推出作業的進展,先前 DeployedModel 的所有現有副本都會替換為新 DeployedModel 的副本。這個過程很快,只要部署作業有足夠的可用副本或足夠的突增容量,可啟動額外副本,副本就會更新。

此外,隨著逐步部署作業的進行,舊版 DeployedModel 的流量會逐漸遷移至新版 DeployedModel。系統會根據每個 DeployedModel 的可服務副本數量,按比例進行流量負載平衡。

如果健康狀態路徑持續傳回非 200 的回應代碼,導致新副本永遠無法就緒,系統就不會將流量傳送至這些未就緒的副本。在此情況下,系統最終會部署失敗,並將副本還原為先前的 DeployedModel。

啟動滾動式部署

如要啟動輪流部署作業,請在模型部署要求中加入 rolloutOptions 欄位,如下列範例所示。

REST

使用任何要求資料之前,請先修改下列項目的值:

  • LOCATION_ID:您使用 Agent Platform 的區域。
  • 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:您使用 Agent Platform 的區域。
  • 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 本身是進行中的輪流部署作業,則可以在其上建立新的輪流部署作業。這樣一來,您就能復原開始失敗的部署作業。
  • 在完成滾動式部署後,舊模型不會自動取消部署。您可以手動取消部署模型。 取消部署先前的模型時,請先等待至少 10 到 15 分鐘,讓流量遷移作業完成,再發出取消部署要求,以便排除連線並完全同步處理路由更新。
  • 如要在共用公開端點上進行輪流部署,新模型的 predictRoute 和 healthRoute 必須與先前模型相同。
  • 輪轉部署與模型共同託管不相容。
  • 如果模型需要線上說明,就無法使用滾動式部署。