在輪流部署中,已部署的模型會由相同模型的新版本取代。新模型會重複使用先前模型的運算資源。
在輪流部署要求中,流量分配和 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](/resource-manager/docs/creating-managing-projects#identifiers)。 。
- 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:您使用 Agent Platform 的區域。
- PROJECT_ID: 您的 [專案 ID](/resource-manager/docs/creating-managing-projects#identifiers)。 。
- 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必須與舊模型相同。 - 模型共同託管不支援輪流部署。
- 如果模型需要線上說明,就無法使用輪流部署。