Utilizzare le VM spot con l'addestramento

Panoramica

Puoi ridurre il costo di esecuzione dei job di addestramento serverless 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 beneficiano di sconti significativi, ma Compute Engine potrebbe arrestarle o eliminarle preventivamente (prerilasciarle) per recuperare capacità in qualsiasi momento.

Per saperne di più, consulta VM spot.

Limitazioni e requisiti

Tieni presente le seguenti limitazioni e i seguenti requisiti quando utilizzi le VM spot con Agent Platform:

  • Quando utilizzi le VM spot con Agent Platform, si applicano tutte le limitazioni delle VM spot.
  • L'utilizzo delle VM spot con Agent Platform è supportato solo per l'addestramento e l'inferenza serverless.
  • L'utilizzo delle VM spot con i pod TPU non è supportato.
  • L'invio del job tramite la Google Cloud console 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 sensibilmente i costi di calcolo. Se alcune delle tue 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 per VM standard aggiuntive. Consulta Gestione del prerilascio.

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

Gestione del prerilascio

Le VM spot possono essere recuperate da Compute Engine in qualsiasi momento. Pertanto, il job di addestramento serverless deve essere a tolleranza di errore per ottenere il massimo vantaggio dalle VM spot. Quando le VM spot vengono prerilasciate, il job di addestramento serverless non riesce a causa di 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 Best practice per le VM spot.

Di seguito sono riportati alcuni dei metodi che puoi utilizzare per rendere il job di addestramento serverless a tolleranza di errore:

  • Crea checkpoint per salvare i progressi. Memorizzando periodicamente i progressi del modello, puoi assicurarti che un job di addestramento serverless terminato possa riprendere dall'ultimo checkpoint memorizzato, anziché ricominciare dall'inizio.
  • Utilizza Elastic Horovod. L'addestramento elastico consente a Horovod di scalare le risorse di calcolo senza richiedere un riavvio o la ripresa dai checkpoint. Per saperne di più, consulta Elastic Horovod.
  • 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 del prerilascio della VM. Per saperne di più, consulta Gestisci il prerilascio con uno script di arresto.

Prima di iniziare

Prepara l'applicazione di addestramento serverless:

Configurare il job di addestramento per utilizzare le VM spot

Puoi configurare il job di addestramento serverless in modo che utilizzi le VM spot specificando una strategia SPOT nella configurazione di pianificazione.

REST

Prima di utilizzare i dati della richiesta, apporta le sostituzioni seguenti:

  • LOCATION: la regione dove verrà eseguito il container o il pacchetto Python.
  • PROJECT_ID: il tuo [ID progetto](/resource-manager/docs/creating-managing-projects#identifiers). .
  • JOB_NAME: obbligatorio. Un nome visualizzato per il CustomJob.
  • Definisci il job di addestramento personalizzato:
    • MACHINE_TYPE: il tipo di macchina. Scopri quali sono i tipi di macchina disponibili per l' addestramento.
    • REPLICA_COUNT: il numero di repliche dei worker da usare. Nella maggior parte dei casi, impostare questo valore su 1 per il primo pool di worker.
    • Se l'applicazione di addestramento viene eseguita in un container personalizzato, specifica quanto segue:
      • CUSTOM_CONTAINER_IMAGE_URI: l'URI di un'immagine container Docker con il codice di addestramento. Scopri come creare un' immagine container personalizzata.
      • CUSTOM_CONTAINER_COMMAND: (facoltativo) Il comando da richiamare all'avvio del container. Questo comando esegue l'override dell'entrypoint predefinito del container.
      • CUSTOM_CONTAINER_ARGS: (facoltativo) Gli argomenti da passare all'avvio del container.
    • Se l'applicazione di addestramento è un pacchetto Python eseguito in un container predefinito, specifica quanto segue:
      • EXECUTOR_IMAGE_URI: l'URI dell'immagine container che esegue il codice fornito. Scopri quali sono i container predefiniti disponibili per l' addestramento.
      • PYTHON_PACKAGE_URIS: elenco separato da virgole di URI di Cloud Storage che specificano i file del pacchetto Python, ovvero il programma di addestramento e i rispettivi pacchetti dipendenti. Il numero massimo di URI dei pacchetti è 100.
      • PYTHON_MODULE: il nome del modulo Python da eseguire dopo l'installazione dei pacchetti.
      • PYTHON_PACKAGE_ARGS: (facoltativo) Argomenti della riga di comando da passare a il modulo Python.

Metodo HTTP e URL:

POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/customJobs

Corpo JSON della richiesta:

{
  "displayName": "JOB_NAME",
  "jobSpec": {
    "workerPoolSpecs": [
      {
        "machineSpec": {
          "machineType": "MACHINE_TYPE"
          }
        },
        "replicaCount": REPLICA_COUNT,

        // Union field task can be only one of the following:
        "containerSpec": {
          "imageUri": CUSTOM_CONTAINER_IMAGE_URI,
          "command": [
            CUSTOM_CONTAINER_COMMAND
          ],
          "args": [
            CUSTOM_CONTAINER_ARGS
          ]
        },
        "pythonPackageSpec": {
          "executorImageUri": EXECUTOR_IMAGE_URI,
          "packageUris": [
            PYTHON_PACKAGE_URIS
          ],
          "pythonModule": PYTHON_MODULE,
          "args": [
            PYTHON_PACKAGE_ARGS
          ]
        }
        // End of list of possible types for union field task.
      }
      // Specify one workerPoolSpec for single replica training, or multiple workerPoolSpecs
      // for distributed training.
    ],
    "scheduling": {
      "strategy": "SPOT"
    }
  }
}

Per inviare la richiesta, scegli una di queste opzioni:

curl

Salva il corpo della richiesta in un file denominato request.json, quindi esegui il comando seguente:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/customJobs"

PowerShell

Salva il corpo della richiesta in un file denominato request.json, e quindi esegui il comando seguente:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/customJobs" | Select-Object -Expand Content

La risposta contiene informazioni sulle specifiche e sul JOB_ID.

Python

Per scoprire come installare o aggiornare l'SDK Agent Platform per Python, consulta Installare l'SDK Agent Platform per Python. Per saperne di più, consulta la documentazione di riferimento dell'API Agent Platform SDK per Python.

customJob = aiplatform.CustomJob(
    display_name=TEST_CASE_NAME,
    worker_pool_specs=worker_pool_spec,
    staging_bucket=OUTPUT_DIRECTORY
)
customJob.run(
    scheduling_strategy=aiplatform.compat.types.custom_job.Scheduling.Strategy.SPOT
)

Passaggi successivi