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:
- 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 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
1per 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
- 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.