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 le previsioni.
  • 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 resistere a un eventuale prerilascio delle VM, Le VM spot possono ridurre in modo significativo 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. Consulta Gestione del prerilascio.

Quando utilizzi le VM spot, i costi ti vengono addebitati in base a durata del job e tipo di macchina. Non paghi per il tempo in cui il job è in coda o è stato intercettato.

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 Spot VM. Quando le VM spot vengono prerilasciate, il job di previsione non riesce con un errore STOCKOUT e Compute Engine prova a riavviare il job a sei volte. Per scoprire come ottenere il massimo dalle tue VM spot, consulta VM spot best practice.

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

  • Crea punti di controllo per salvare l'avanzamento. 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 prima che la VM venga prerilasciata. Per saperne di più, vedi Gestisci il prerilascio con un di chiusura.

Ricevi previsioni utilizzando le VM spot

Per utilizzare le VM spot quando esegui il deployment di un modello per ottenere previsioni, puoi usare 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 DeployedModel. Puoi utilizzare il nome visualizzato del Model anche per DeployedModel.
  • MACHINE_TYPE: facoltativo. Le risorse macchina utilizzate per ogni nodo e deployment continuo. 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: numero minimo di nodi per questo deployment. Il conteggio dei 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. Tutto il traffico la somma delle percentuali deve essere 100. Scopri di più sulle suddivisioni del traffico.
  • DEPLOYED_MODEL_ID_N: facoltativo. Se viene eseguito il deployment di altri modelli su questo endpoint, devono aggiornare le rispettive percentuali di suddivisione del traffico in modo che la somma di tutte le percentuali arrivi a 100.
  • TRAFFIC_SPLIT_MODEL_N: il valore percentuale di suddivisione del traffico per l'ID del modello di cui è stato eseguito il deployment chiave.
  • 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 SDK Vertex AI per Python documentazione di riferimento dell'API.

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