In un deployment incrementale, un modello di cui è stato eseguito il deployment viene sostituito con una nuova versione dello stesso modello. Il nuovo modello riutilizza le risorse di calcolo del precedente.
Nella richiesta di implementazione graduale, la suddivisione del traffico e i valori di dedicatedResources
sono gli stessi del deployment precedente. Al termine del deployment graduale, la suddivisione del traffico viene aggiornata per mostrare che tutto il traffico proveniente dal DeployedModel
precedente è stato migrato al nuovo deployment.
Per impostazione predefinita, gli altri campi configurabili in DeployedModel
(ad esempio serviceAccount
, disableContainerLogging
e enableAccessLogging
) sono impostati sugli stessi valori
del DeployedModel
precedente. Tuttavia, se vuoi, puoi specificare nuovi valori per questi campi.
Quando un modello viene implementato utilizzando un deployment incrementale, viene creato un nuovo DeployedModel
. Il nuovo DeployedModel
riceve un nuovo ID diverso da quello
del precedente. Riceve anche un nuovo valore revisionNumber
nel
rolloutOptions
campo.
Se sono presenti più implementazioni incrementali che hanno come target le stesse risorse di supporto,
DeployedModel
con il valore revisionNumber
più elevato viene considerato come
stato finale previsto.
Man mano che l'implementazione graduale procede, tutte le repliche esistenti per il DeployedModel
precedente vengono sostituite con repliche del nuovo DeployedModel
. Questo avviene rapidamente e le repliche vengono aggiornate ogni volta che il deployment dispone di repliche disponibili o di una capacità di picco sufficiente per avviarne altre.
Inoltre, man mano che il deployment graduale procede, il traffico per il vecchio DeployedModel
viene gradualmente migrato al nuovo DeployedModel
. Il traffico viene bilanciato in base al numero di repliche pronte per la pubblicazione di ciascunDeployedModel
.
Se le nuove repliche del deployment incrementale non diventano mai pronte perché il relativo percorso di monitoraggio restituisce costantemente un codice di risposta diverso da 200, il traffico non viene inviato a queste repliche non pronte. In questo caso, l'implementazione graduale alla fine non va a buon fine e le repliche tornano alla versione DeployedModel
precedente.
Avvia un deployment in sequenza
Per avviare un deployment graduale, includi il campo rolloutOptions
nella richiesta di deployment del modello, come mostrato nell'esempio seguente.
REST
Prima di utilizzare i dati della richiesta, apporta le seguenti sostituzioni:
- LOCATION_ID: la regione in cui utilizzi Vertex AI.
- PROJECT_ID: il tuo ID progetto.
- ENDPOINT_ID: l'ID dell'endpoint.
- MODEL_ID: l'ID del modello da implementare.
-
PREVIOUS_DEPLOYED_MODEL: l'ID
DeployedModel
di un modello nello stesso endpoint. Questo specifica ilDeployedModel
di cui devono essere riutilizzate le risorse di supporto. Puoi chiamareGetEndpoint
per ottenere un elenco dei modelli di cui è stato eseguito il deployment su un endpoint, insieme ai relativi ID numerici. - MAX_UNAVAILABLE_REPLICAS: il numero di repliche del modello che possono essere interrotte durante il deployment graduale.
- MAX_SURGE_REPLICAS: il numero di repliche del modello aggiuntive che possono essere avviate durante il deployment incrementale. Se questo valore è impostato su zero, viene utilizzata solo la capacità esistente.
Metodo HTTP e URL:
POST https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/endpoints/ENDPOINT_ID:deployModel
Corpo JSON della richiesta:
{ "deployedModel": { "model": "projects/PROJECT_ID/locations/LOCATION_ID/models/MODEL_ID", "rolloutOptions": { "previousDeployedModel": "PREVIOUS_DEPLOYED_MODEL", "maxUnavailableReplicas": "MAX_UNAVAILABLE_REPLICAS", "maxSurgeReplicas": "MAX_SURGE_REPLICAS" } } }
Per inviare la richiesta, espandi una di queste opzioni:
Dovresti ricevere un codice di stato di operazione riuscita (2xx) e una risposta vuota.
Se vuoi, puoi sostituire maxSurgeReplicas
e maxUnavailableReplicas
o entrambi con valori percentuali, come mostrato nell'esempio seguente.
REST
Prima di utilizzare i dati della richiesta, apporta le seguenti sostituzioni:
- MAX_UNAVAILABLE_PERCENTAGE: la percentuale di repliche del modello che possono essere rimosse durante il deployment incrementale.
- MAX_SURGE_PERCENTAGE: la percentuale di repliche del modello aggiuntive che possono essere avviate durante il deployment graduale. Se questo valore è impostato su zero, viene utilizzata solo la capacità esistente.
Metodo HTTP e URL:
POST https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/endpoints/ENDPOINT_ID:deployModel
Corpo JSON della richiesta:
{ "deployedModel": { "model": "projects/PROJECT/locations/LOCATION_ID/models/MODEL_ID", "rolloutOptions": { "previousDeployedModel": "PREVIOUS_DEPLOYED_MODEL", "maxUnavailablePercentage": "MAX_UNAVAILABLE_PERCENTAGE", "maxSurgePercentage": "MAX_SURGE_PERCENTAGE" } } }
Per inviare la richiesta, espandi una di queste opzioni:
Dovresti ricevere un codice di stato di operazione riuscita (2xx) e una risposta vuota.
Esegui il rollback di un deployment in sequenza
Per eseguire il rollback di un deployment incrementale, avvia un nuovo deployment incrementale del
modello precedente utilizzando l'ID DeployedModel
del deployment incrementale in corso come
previousDeployedModel
.
Per ottenere l'ID DeployedModel
di un deployment in corso, imposta il parametro allDeploymentStates=true
nella chiamata a GetEndpoint
, come mostrato nell'esempio seguente.
REST
Prima di utilizzare i dati della richiesta, apporta le seguenti sostituzioni:
- LOCATION_ID: la regione in cui utilizzi Vertex AI.
- PROJECT_ID: il tuo ID progetto.
- ENDPOINT_ID: l'ID dell'endpoint.
Metodo HTTP e URL:
GET https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/endpoints/ENDPOINT_ID?allDeploymentStates=true
Per inviare la richiesta, espandi una di queste opzioni:
Dovresti ricevere una risposta JSON simile alla seguente:
{ "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" }
Vincoli e limiti
- Il
DeployedModel
precedente deve trovarsi nello stesso endpoint del nuovoDeployedModel
. - Non puoi creare più implementazioni graduali con lo stesso
previousDeployedModel
. - Non puoi creare implementazioni graduali su un
DeployedModel
non completamente implementato. Eccezione: sepreviousDeployedModel
è un deployment graduale in corso, è possibile crearne uno nuovo sopra. In questo modo è possibile eseguire il rollback dei deployment che iniziano a non riuscire. - I modelli precedenti non vengono disinstallati automaticamente al termine di un deployment graduale. Puoi eseguire il rollback del deployment del modello manualmente.
- Per i deployment incrementali su endpoint pubblici condivisi,
predictRoute
ehealthRoute
per il nuovo modello devono essere uguali a quelli per il modello precedente. - I deployment incrementali non sono compatibili con il co-hosting dei modelli.
- I deployment incrementali non possono essere utilizzati per i modelli che richiedono spiegazioni online.