在滾動式部署中,已部署的模型會替換為相同模型的新版本。新模型會重複使用先前模型的運算資源。
在滾動式部署要求中,流量分配和 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:同一個端點上模型的
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,請將呼叫中的參數 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
本身是進行中的漸進式部署,則可在其上建立新的漸進式部署。這樣一來,您就能回復開始失敗的部署作業。 - 舊版模型不會在逐步部署作業順利完成後自動解除部署。您可以手動取消部署模型。
- 如果是共用公開端點的滾動式部署作業,新模型的
predictRoute
和healthRoute
必須與先前模型相同。 - 逐步部署與模型共同託管不相容。
- 對於需要線上說明的模型,無法使用逐步部署。