在滾動式部署中,部署的模型會替換為相同模型的新版本。新模型會重複使用先前模型的運算資源。
在滾動式部署要求中,流量分配和 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:您使用 Vertex AI 的區域。
- PROJECT_ID:您的專案 ID。
- ENDPOINT_ID:端點的 ID。
- MODEL_ID:要部署的模型 ID。
-
PREVIOUS_DEPLOYED_MODEL:同一端點上模型的
DeployedModelID。這會指定要重複使用的支援資源所屬的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本身是進行中的漸進式部署,則可以在其上建立新的漸進式部署。這樣一來,您就能復原開始失敗的部署作業。 - 在完成滾動式部署後,系統不會自動取消部署先前的模型。您可以手動取消部署模型。
- 如要在共用公開端點上進行輪轉部署,新模型的
predictRoute和healthRoute必須與先前模型相同。 - 模型共同託管不支援輪流部署。
- 如果模型需要線上說明,就無法使用滾動式部署。