Utilizzare le VM spot con l'inferenza

Panoramica

Puoi ridurre il costo di esecuzione dei job di previsione utilizzando le VM spot. Le VM spot sono istanze di macchina virtuale (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 saperne di più, consulta VM spot.

Limitazioni e requisiti

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

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

Fatturazione

Se i tuoi workload sono a tolleranza di errore e possono essere sottoposti a eventuali prerilasci delle VM, le VM spot possono ridurre significativamente i costi di calcolo. Se alcune delle tue VM si arrestano durante l'elaborazione, il job rallenta, ma non si interrompe 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 per VM standard aggiuntive. Vedi Gestione del preemptive.

Quando utilizzi le VM spot, la fatturazione viene effettuata in base alla durata del job e al tipo di macchina. Non paghi il tempo in cui il job è in coda o viene interrotto.

Gestione del prerilascio

Le VM spot possono essere recuperate da Compute Engine in qualsiasi momento. Quando le VM spot vengono prerilasciate, il job di previsione non va a buon fine e viene visualizzato l'errore STOCKOUT. Compute Engine tenta di riavviare il job fino a sei volte. Per scoprire come ottenere il massimo dalle tue VM spot, consulta Best practice per le VM spot.

Ottenere inferenze utilizzando le VM spot

Per utilizzare le VM spot quando esegui il deployment di un modello per ottenere inferenze, 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 DeployedModel. Puoi utilizzare il nome visualizzato di Model anche per DeployedModel.
  • MACHINE_TYPE: (Facoltativo). Le risorse macchina utilizzate per ogni nodo di questo deployment. L'impostazione predefinita è n1-standard-2. Scopri di più sui tipi di macchina.
  • 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 conteggio di nodi può essere aumentato o diminuito in base al carico di inferenza, fino al numero massimo di nodi e mai al di sotto di questo numero di nodi. Questo valore deve essere maggiore o uguale a 1.
  • MAX_REPLICA_COUNT: il numero massimo di nodi per questo deployment. Il conteggio di nodi può essere aumentato o diminuito in base al carico di inferenza, fino a questo numero di nodi e mai al di sotto del numero minimo di nodi.
  • TRAFFIC_SPLIT_THIS_MODEL: la percentuale di traffico di previsione verso questo endpoint da indirizzare 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 a 100. Scopri di più sulle suddivisioni del traffico.
  • DEPLOYED_MODEL_ID_N: (Facoltativo). Se su questo endpoint sono stati implementati altri modelli, devi aggiornare le percentuali di suddivisione del traffico in modo che la somma di tutte le percentuali sia pari a 100.
  • TRAFFIC_SPLIT_MODEL_N: Il valore della percentuale di suddivisione del traffico per la chiave dell'ID modello di cui è stato eseguito il deployment.
  • PROJECT_NUMBER: il numero di progetto generato automaticamente per il tuo progetto.

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 Python, consulta Installare l'SDK Vertex AI Python. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API dell'SDK Vertex AI per 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