Utilizza un deployment in sequenza per sostituire un modello di cui è stato eseguito il deployment

In un deployment in sequenza, un modello di cui è stato eseguito il deployment viene sostituito con una nuova versione di llo stesso modello. Il nuovo modello riutilizza le risorse di calcolo del modello precedente.

Nella richiesta di deployment in sequenza, 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.

Per impostazione predefinita, gli altri campi configurabili in DeployedModel (come serviceAccount, disableContainerLogging e enableAccessLogging) sono impostati sugli stessi valori del DeployedModel precedente. Tuttavia, puoi specificare facoltativamente nuovi valori per questi campi.

Quando viene eseguito il deployment di un modello 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ù deployment in sequenza che hanno come target le stesse risorse di backend, il DeployedModel con il revisionNumber più alto viene trattato come lo stato finale previsto.

Man mano che il deployment in sequenza procede, tutte le repliche esistenti del DeployedModel precedente vengono sostituite con le repliche del nuovo DeployedModel. Questa operazione 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 in sequenza procede, il traffico del vecchio DeployedModel viene gradualmente migrato al nuovo DeployedModel. Il traffico viene bilanciato in base 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 relativo percorso di controllo dello stato 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 Vertex AI.
  • PROJECT_ID: il tuo ID progetto.
  • ENDPOINT_ID: l'ID dell'endpoint.
  • MODEL_ID: l'ID del modello di cui eseguire il deployment.
  • PREVIOUS_DEPLOYED_MODEL: l'ID DeployedModel di un modello sullo stesso endpoint. Specifica il DeployedModel di cui riutilizzare le risorse di backend. Puoi chiamare GetEndpoint 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 eliminate durante il deployment in sequenza.
  • MAX_SURGE_REPLICAS: il numero di repliche del modello aggiuntive che possono essere avviate 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 eliminate durante il deployment in sequenza.
  • MAX_SURGE_PERCENTAGE: la percentuale di repliche del modello aggiuntive che possono essere avviate 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.

Eseguire 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 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 sostituzioni seguenti:

  • 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 sullo stesso endpoint del nuovo DeployedModel.
  • Non puoi creare più deployment in sequenza con lo stesso previousDeployedModel.
  • Non puoi creare deployment in sequenza su un DeployedModel di cui non è stato eseguito completamente il deployment. Eccezione: se previousDeployedModel è a sua volta un deployment in sequenza in corso, è possibile crearne uno nuovo. In questo modo è possibile eseguire il rollback dei deployment che iniziano a non riuscire.
  • I modelli precedenti non vengono annullati automaticamente dopo il completamento di un deployment in sequenza. Puoi annullare manualmente il deployment del modello.
  • Per i deployment in sequenza su endpoint pubblici condivisi, predictRoute e healthRoute per il nuovo modello devono essere gli stessi del modello precedente.
  • I deployment in sequenza non sono compatibili con l'hosting congiunto dei modelli.
  • I deployment in sequenza non possono essere utilizzati per i modelli che richiedono spiegazioni online.