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

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

在滾動式部署要求中,流量分配和 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,請在呼叫 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 必須與舊模型相同。
  • 滾動式部署與模型共同託管不相容。
  • 如果模型需要線上說明,就無法使用滾動式部署。