Panoramica
Puoi ridurre il costo di esecuzione dei job di addestramento personalizzati 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 da 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 tuo job di addestramento personalizzato deve essere a tolleranza di errore per trarre il massimo vantaggio dalle VM spot. Quando le VM spot vengono prelevate, il job di addestramento personalizzato
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 dei metodi che puoi utilizzare per rendere il tuo job di addestramento personalizzato tollerante ai guasti:
- Crea checkpoint per salvare i progressi. Se memorizzi periodicamente i progressi del modello, puoi assicurarti che un job di addestramento personalizzato interrotto possa riprendere dall'ultimo checkpoint memorizzato, invece di 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 che la VM venga prerilasciata. Per scoprire di più, consulta Gestire la preemption con uno script di shutdown.
Prima di iniziare
Prepara l'applicazione di addestramento personalizzato:
- Per utilizzare un container predefinito, consulta Creare un'applicazione di addestramento Python per un container predefinito.
- Per utilizzare un container personalizzato, consulta Creare un'immagine container personalizzata per l'addestramento.
Configurare il job di addestramento per utilizzare le VM spot
Puoi configurare il tuo job di addestramento personalizzato in modo che utilizzi le VM spot specificando una strategia SPOT
nella configurazione della pianificazione.
REST
Prima di utilizzare i dati della richiesta, apporta le seguenti sostituzioni:
- LOCATION: la regione in cui verrà eseguito il container o il pacchetto Python.
- PROJECT_ID: il tuo ID progetto.
-
JOB_NAME: obbligatorio. Un nome visualizzato per
CustomJob
. - Definisci il job di addestramento personalizzato:
- MACHINE_TYPE: il tipo di macchina. Consulta i tipi di macchine disponibili per l'addestramento.
- REPLICA_COUNT: il numero di repliche dei worker da usare. Nella maggior parte dei casi, imposta questo valore su
1
per il primo pool di worker. - Se l'applicazione di addestramento viene eseguita in un contenitore 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 contenitore personalizzata.
- CUSTOM_CONTAINER_COMMAND: facoltativo. Il comando da richiamare all'avvio del container. Questo comando sostituisce l'entrypoint predefinito del container.
- CUSTOM_CONTAINER_ARGS: facoltativo. Gli argomenti da passare all'avvio del container.
- Se l'applicazione di addestramento è un pacchetto Python che viene eseguito in un container predefinito,
specifica quanto segue:
- EXECUTOR_IMAGE_URI: l'URI dell'immagine container che esegue il codice fornito. Consulta 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 al 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 delle seguenti 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
,
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 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.
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
- Scopri di più sulle VM spot.
- Per saperne di più sulle VM Compute Engine in generale, consulta la documentazione relativa alle istanze di macchine virtuali.
- Per scoprire come creare VM spot, leggi l'articolo Creare e utilizzare VM spot.
- Utilizza le VM spot con la previsione di Vertex AI.