In un deployment in sequenza, un modello sottoposto a deployment viene sostituito con una nuova versione dello stesso modello. Il nuovo modello riutilizza le risorse di computing del precedente.
Nella richiesta di deployment progressivo, i valori di suddivisione del traffico e dedicatedResources
sono gli stessi del deployment precedente. Al termine del deployment
in sequenza, la suddivisione del traffico viene aggiornata per mostrare che tutto il traffico del
DeployedModel precedente è stato migrato al nuovo deployment.
Altri campi configurabili in DeployedModel (ad esempio serviceAccount,
disableContainerLogging e enableAccessLogging) sono impostati sugli stessi valori
di DeployedModel precedente per impostazione predefinita. Tuttavia, puoi specificare
facoltativamente nuovi valori per questi campi.
Quando un modello viene sottoposto a deployment utilizzando un deployment in sequenza, viene creato un nuovo DeployedModel. Il nuovo DeployedModel riceve un nuovo ID diverso da quello
precedente. Riceve anche un nuovo valore revisionNumber nel campo
rolloutOptions.
Se sono presenti più implementazioni in sequenza che hanno come target le stesse risorse di backend,
il DeployedModel con il revisionNumber più alto viene considerato lo
stato finale previsto.
Man mano che il deployment in sequenza procede, tutte le repliche esistenti per il precedente
DeployedModel vengono sostituite con repliche del nuovo DeployedModel. Ciò
avviene rapidamente e le repliche vengono aggiornate ogni volta che il deployment ha un numero sufficiente di repliche disponibili o una capacità di picco sufficiente per avviare repliche aggiuntive.
Inoltre, man mano che il deployment progressivo avanza, il traffico per il vecchio
DeployedModel viene gradualmente migrato al nuovo DeployedModel. Il traffico
viene bilanciato in proporzione al numero di repliche pronte per la pubblicazione di ogni
DeployedModel.
Se le nuove repliche del deployment in sequenza non diventano mai pronte perché il loro percorso di controllo dell'integrità restituisce costantemente un codice di risposta diverso da 200, il traffico non viene inviato a queste repliche non pronte. In questo caso, il deployment in sequenza alla fine non riesce e le repliche vengono ripristinate al DeployedModel precedente.
Avviare un deployment in sequenza
Per avviare un deployment in sequenza, 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 sostituzioni seguenti:
- LOCATION_ID: la regione in cui utilizzi Agent Platform.
- 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
DeployedModeldi un modello sullo stesso endpoint. Specifica ilDeployedModelle cui risorse di supporto devono essere riutilizzate. Puoi chiamareGetEndpointper 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 ritirate durante il deployment in sequenza.
- MAX_SURGE_REPLICAS: il numero di repliche del modello aggiuntive che possono essere attivate durante il deployment in sequenza. 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 riuscito (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 sostituzioni seguenti:
- MAX_UNAVAILABLE_PERCENTAGE: la percentuale di repliche del modello che possono essere ritirate durante il deployment in sequenza.
- MAX_SURGE_PERCENTAGE: la percentuale di repliche del modello aggiuntive che possono essere visualizzate durante il deployment in sequenza. 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 riuscito (2xx) e una risposta vuota.
Esegui il rollback di un deployment in sequenza
Per eseguire il rollback di un deployment in sequenza, avvia un nuovo deployment in sequenza del modello precedente utilizzando l'ID DeployedModel del deployment in sequenza in corso come previousDeployedModel.
Per ottenere l'ID DeployedModel per 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 sostituzioni seguenti:
- LOCATION_ID: la regione in cui utilizzi Agent Platform.
- 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 precedente
DeployedModeldeve trovarsi sullo stesso endpoint del nuovoDeployedModel. - Non puoi creare più deployment in sequenza con lo stesso
previousDeployedModel. - Non puoi creare implementazioni continue sopra un
DeployedModelche non è completamente implementato. Eccezione: sepreviousDeployedModelè a sua volta un deployment in corso, è possibile creare un nuovo deployment in sequenza sopra. Ciò consente di eseguire il rollback dei deployment che iniziano a non riuscire. - I modelli precedenti non vengono ritirati automaticamente dopo il completamento di un deployment in sequenza. Puoi annullare il deployment del modello manualmente. Quando annulli il deployment del modello precedente, attendi almeno 10-15 minuti dopo il completamento della migrazione del traffico prima di avviare la richiesta di annullamento del deployment per consentire lo svuotamento delle connessioni in corso e la sincronizzazione completa degli aggiornamenti del routing.
- Per i deployment in sequenza sugli endpoint pubblici condivisi, i valori di
predictRouteehealthRouteper il nuovo modello devono essere uguali a quelli del modello precedente. - I deployment in sequenza non sono compatibili con il co-hosting dei modelli.
- I deployment continui non possono essere utilizzati per i modelli che richiedono spiegazioni online.