Utilizzare le VM Spot con la previsione

Panoramica

Puoi ridurre il costo di esecuzione dei job di previsione utilizzando le VM spot. Le VM spot sono istanze di macchine virtuali (VM) che rappresentano la capacità in eccesso di Compute Engine. Le VM spot hanno sconti significativi, ma Compute Engine potrebbe arrestare o eliminare (prerilasciare) le VM spot in modo preventivo per recuperare la capacità in qualsiasi momento.

Per scoprire di più, consulta VM spot.

Limitazioni e requisiti

Tieni presente le seguenti limitazioni e requisiti quando utilizzi VM spot con Vertex AI:

  • Quando utilizzi le VM spot con Vertex AI, si applicano tutte le limitazioni delle VM spot.
  • L'utilizzo di VM spot con Vertex AI è supportato solo per l'addestramento personalizzato e la previsione.
  • L'utilizzo di VM spot con i pod TPU non è supportato.
  • L'invio del job tramite la console Google Cloud non è supportato.

Fatturazione

Se i tuoi carichi di lavoro sono a tolleranza di errore e possono sopportare eventuali prerilasci delle VM, le VM spot possono ridurre notevolmente i costi di calcolo. Se alcune VM si arrestano durante l'elaborazione, il job rallenta, ma non si arresta completamente. Le VM spot completano le tue attività di elaborazione batch senza imporre un ulteriore carico sulle VM esistenti e senza che tu debba pagare il prezzo pieno di VM standard aggiuntive. Vedi Gestione dell'anticipo.

Quando utilizzi le VM spot, ti viene addebitato il costo in base alla durata del job e al tipo di macchina. Non paghi per il tempo in cui il job è in coda o è stato eseguito in preemption.

Gestione del prerilascio

Le VM spot possono essere recuperate da Compute Engine in qualsiasi momento. Pertanto, il job di previsione deve essere a tolleranza di errore per ottenere il massimo vantaggio dalle VM spot. Quando le VM spot vengono prelevate, il job di previsione non va a buon fine con un errore STOCKOUT e Compute Engine tenta di riavviare il job fino a sei volte. Per scoprire come ottenere il massimo dalle VM spot, consulta le best practice per le VM spot.

Di seguito sono riportati alcuni metodi che puoi utilizzare per rendere il tuo job di previsione tollerante ai guasti:

  • Crea checkpoint per salvare i progressi. Se memorizzi periodicamente i progressi del modello, puoi assicurarti che un job di previsione interrotto possa riprendere dall'ultimo checkpoint memorizzato, anziché ricominciare dall'inizio.
  • Utilizza uno script di arresto. Quando Compute Engine prerilascia una VM spot, puoi utilizzare uno script di arresto che tenta di eseguire azioni di pulizia prima che la VM venga prerilasciata. Per scoprire di più, consulta Gestire la preemption con uno script di shutdown.

Ottenere le previsioni utilizzando le VM spot

Per utilizzare le VM Spot quando esegui il deployment di un modello per ottenere le previsioni, puoi utilizzare l'API REST o l'SDK Vertex AI per Python.

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.
  • DEPLOYED_MODEL_NAME: un nome per il DeployedModel. Puoi utilizzare il nome visualizzato del Model anche per DeployedModel.
  • MACHINE_TYPE: facoltativo. Le risorse della macchina utilizzate per ogni nodo di questo deployment. L'impostazione predefinita è n1-standard-2. Scopri di più sui tipi di macchine.
  • ACCELERATOR_TYPE: facoltativo. Il tipo di acceleratore da collegare alla macchina. Scopri di più.
  • ACCELERATOR_COUNT: facoltativo. Il numero di acceleratori da utilizzare per ogni replica.
  • MIN_REPLICA_COUNT: il numero minimo di nodi per questo deployment. Il numero di nodi può essere aumentato o diminuito in base al carico della previsione, fino al numero massimo di nodi e mai meno di questo numero. Questo valore deve essere maggiore o uguale a 1.
  • MAX_REPLICA_COUNT: il numero massimo di nodi per questo deployment. Il numero di nodi può essere aumentato o diminuito in base al carico della previsione, fino a questo numero di nodi e mai inferiore al numero minimo di nodi.
  • TRAFFIC_SPLIT_THIS_MODEL: la percentuale del traffico di previsione per questo endpoint da inoltrare al modello di cui viene eseguito il deployment con questa operazione. Il valore predefinito è 100. La somma di tutte le percentuali di traffico deve essere pari al 100%. Scopri di più sulle suddivisioni del traffico.
  • DEPLOYED_MODEL_ID_N: facoltativo. Se in questo endpoint sono di cui è stato eseguito il deployment di altri modelli, devi aggiornare le relative percentuali di suddivisione del traffico in modo che tutte le percentuali sommate diano 100.
  • TRAFFIC_SPLIT_MODEL_N: il valore percentuale della suddivisione del traffico per la chiave ID modello di cui è stato eseguito il deployment.
  • PROJECT_NUMBER: il numero del progetto generato automaticamente.

Metodo HTTP e URL:

POST https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/endpoints/ENDPOINT_ID:deployModel

Corpo JSON della richiesta:

{


"acceleratorCount": 1}, "spot": true, "minReplicaCount": 1, "maxReplicaCount": 1}}, "trafficSplit": {"0": 100}}' \
  "https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/endpoints/ENDPOINT_ID:deployModel"

  "deployedModel": {
    "model": "projects/PROJECT/locations/us-central1/models/MODEL_ID",
    "displayName": "DEPLOYED_MODEL_NAME",
    "enableContainerLogging": true,
    "dedicatedResources": {
      "machineSpec": {
        "machineType": "MACHINE_TYPE",
        "acceleratorType": "ACCELERATOR_TYPE",
        "acceleratorCount": ACCELERATOR_COUNT
      },
      "spot": true,
      "minReplicaCount": MIN_REPLICA_COUNT,
      "maxReplicaCount": MAX_REPLICA_COUNT
    },
  },
  "trafficSplit": {
    "0": TRAFFIC_SPLIT_THIS_MODEL,
    "DEPLOYED_MODEL_ID_1": TRAFFIC_SPLIT_MODEL_1,
    "DEPLOYED_MODEL_ID_2": TRAFFIC_SPLIT_MODEL_2
  },
}

Per inviare la richiesta, espandi una di queste opzioni:

Dovresti ricevere una risposta JSON simile alla seguente:

{
  "name": "projects/PROJECT_ID/locations/LOCATION/endpoints/ENDPOINT_ID/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.aiplatform.v1beta1.DeployModelOperationMetadata",
    "genericMetadata": {
      "createTime": "2020-10-19T17:53:16.502088Z",
      "updateTime": "2020-10-19T17:53:16.502088Z"
    }
  }
}

Python

Per scoprire come installare o aggiornare l'SDK Vertex AI per Python, consulta Installare l'SDK Vertex AI per Python. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Vertex AI SDK for Python.

endpoint5.deploy(
    model = model,
    deployed_model_display_name=DEPLOYED_NAME,
    traffic_split=TRAFFIC_SPLIT,
    machine_type="MACHINE_TYPE",
    accelerator_type="ACCELERATOR_TYPE",
    accelerator_count=ACCELERATOR_COUNT,
    min_replica_count=MIN_REPLICA_COUNT,
    max_replica_count=MAX_REPLICA_COUNT,
    spot=True,
    sync=True
)

Passaggi successivi