在滾動式部署中,部署的模型會替換為相同模型的新版本。新模型會重複使用先前模型的運算資源。
在滾動式部署要求中,流量分配和 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,請在呼叫 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
必須與舊模型相同。 - 滾動式部署與模型共同託管不相容。
- 如果模型需要線上說明,就無法使用滾動式部署。