Panoramica
Puoi ridurre il costo di esecuzione dei job di addestramento personalizzati 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.
Pertanto,
il tuo job di addestramento personalizzato deve essere a tolleranza di errore per ottenere il massimo vantaggio dalle
VM spot.
Quando le VM spot vengono prerilasciate, il job di addestramento personalizzato
non riesce e restituisce un errore STOCKOUT
e 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.
Di seguito sono riportati alcuni metodi che puoi utilizzare per rendere il tuo job di addestramento personalizzato tollerante agli errori:
- Crea checkpoint per salvare i progressi. Memorizzando periodicamente lo stato di avanzamento del modello, puoi assicurarti che un job di addestramento personalizzato 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 scoprire di più, consulta Gestisci il prerilascio con uno script di arresto.
Prima di iniziare
Prepara l'applicazione di addestramento personalizzata:
- 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.
Configura il job di addestramento per utilizzare le VM spot
Puoi configurare il 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 macchina 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 la tua 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 tuo 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 la tua applicazione di addestramento è un pacchetto Python eseguito in un container predefinito,
specifica quanto segue:
- EXECUTOR_IMAGE_URI: l'URI dell'immagine del 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 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
,
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 Python, consulta Installare l'SDK Vertex AI Python. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API dell'SDK Vertex AI 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
- Scopri di più sulle VM spot.
- Per saperne di più sulle VM di Compute Engine in generale, consulta la documentazione relativa alle istanze di macchine virtuali.
- Per scoprire come creare VM spot, consulta Crea e utilizza VM spot.
- Utilizza le VM spot con Vertex AI Inference.