Questo documento spiega come utilizzare le prenotazioni di Compute Engine per ottenere un livello elevato di garanzia che i job di addestramento serverless dispongano delle risorse delle macchine virtuali (VM) necessarie per l'esecuzione.
Le prenotazioni sono una funzionalità di Compute Engine. Ti aiutano ad avere sempre a disposizione le risorse necessarie per creare VM con lo stesso hardware (memoria e vCPU) e le risorse facoltative (CPU, GPU, TPU e dischi SSD locali) ogni volta che ne hai bisogno.
Quando crei una prenotazione, Compute Engine verifica che la capacità richiesta sia disponibile nella zona specificata. In caso affermativo, Compute Engine prenota le risorse, crea la prenotazione e si verifica quanto segue:
- Puoi utilizzare immediatamente le risorse prenotate, che rimangono disponibili fino a quando non elimini la prenotazione.
- Le risorse prenotate ti vengono addebitate alla stessa tariffa on demand delle VM in esecuzione, inclusi eventuali sconti applicabili, fino all'eliminazione della prenotazione. Una VM che utilizza una prenotazione non comporta addebiti separati. Ti vengono addebitati solo i costi per le risorse esterne alla prenotazione, ad esempio dischi o indirizzi IP. Per saperne di più, consulta i prezzi per le prenotazioni.
Limitazioni e requisiti
Quando utilizzi le prenotazioni di Compute Engine con Agent Platform, tieni presente le seguenti limitazioni e requisiti:
- Agent Platform può utilizzare solo prenotazioni per CPU, VM GPU, o TPU (anteprima).
- Agent Platform non può utilizzare le prenotazioni di VM con dischi SSD locali collegati manualmente.
- L'utilizzo delle prenotazioni di Compute Engine con Agent Platform è supportato solo per l'addestramento serverless, l'inferenza e Gemini Enterprise Agent Platform Workbench (anteprima).
- Le proprietà della VM di una prenotazione devono corrispondere esattamente al workload della piattaforma Agent
per utilizzare la prenotazione. Ad esempio, se una prenotazione specifica un tipo di macchina
a2-ultragpu-8g, il workload della piattaforma agente può utilizzare la prenotazione solo se utilizza anche un tipo di macchinaa2-ultragpu-8g. Consulta i requisiti. - Per utilizzare una prenotazione condivisa di VM GPU o TPU, devi utilizzare il progetto proprietario o un progetto consumer con cui è condivisa la prenotazione. Consulta Come funzionano le prenotazioni condivise.
- Per supportare gli aggiornamenti regolari dei deployment della piattaforma agente, ti consigliamo di aumentare il numero di VM di almeno un'altra VM per ogni deployment simultaneo.
-
L'avvio flessibile per Dynamic Workload Scheduler e l'esecuzione di job di addestramento su una risorsa persistente sono entrambi supportati, tranne quando si utilizzano le prenotazioni di Compute Engine con l'addestramento di Agent Platform.
Fatturazione
Quando utilizzi le prenotazioni di Compute Engine, ti vengono addebitati i seguenti costi:
- Prezzi di Compute Engine per le risorse Compute Engine, inclusi eventuali sconti per impegno di utilizzo (CUD) applicabili. Consulta i prezzi di Compute Engine.
- Tariffe di gestione dell'addestramento serverless di Agent Platform oltre all'utilizzo dell'infrastruttura. Consulta i prezzi dei modelli con addestramento personalizzato.
Prima di iniziare
- Esamina i requisiti e le limitazioni per le prenotazioni.
- Esamina i requisiti relativi alle quote e le limitazioni per le prenotazioni condivise.
Consenti l'utilizzo di una prenotazione
Prima di utilizzare una prenotazione di CPU, VM GPU o TPU, devi impostare la relativa policy di condivisione in modo da consentire ad Agent Platform di utilizzare la prenotazione. Per farlo, utilizza uno dei seguenti metodi:
- Consenti il consumo durante la creazione di una prenotazione
- Consenti l'utilizzo in una prenotazione esistente
Consenti il consumo durante la creazione di una prenotazione
Quando crei una prenotazione per un singolo progetto o una prenotazione condivisa di VM GPU, puoi consentire ad Agent Platform di utilizzare la prenotazione come segue:
- Se utilizzi la console Cloud de Confiance , nella sezione Servizi Google Cloud, seleziona Condividi prenotazione.
- Se utilizzi Google Cloud CLI, includi il flag
--reservation-sharing-policyimpostato suALLOW_ALL. - Se utilizzi l'API REST, nel corpo della richiesta includi il campo
serviceShareTypeimpostato suALLOW_ALL.
Consenti l'utilizzo di una prenotazione esistente
Puoi modificare una prenotazione creata automaticamente di VM GPU o TPU per una prenotazione futura solo dopo l'ora di inizio della prenotazione.
Per consentire ad Agent Platform di utilizzare una prenotazione esistente, utilizza uno dei seguenti metodi:
Verifica che una prenotazione venga utilizzata
Per verificare che la prenotazione venga utilizzata, consulta Verifica il consumo delle prenotazioni nella documentazione di Compute Engine.Crea un job di addestramento serverless con una prenotazione
Utilizza l'API REST per creare un job di addestramento serverless che utilizza una prenotazione di Compute Engine di VM GPU.
Come funzionano l'affinità e la convalida delle prenotazioni
Quando invii un job di addestramento personalizzato che specifica una configurazione reservationAffinity, Agent Platform convalida la configurazione della prenotazione prima di mettere in coda il job:
- Per
ANY_RESERVATION:- Nella regione del job deve esistere almeno una prenotazione utilizzata automaticamente e condivisa con Agent Platform (e con il tuo progetto, se la prenotazione si trova in un progetto host diverso).
- I campi
keyevaluesinreservationAffinitydevono essere omessi o vuoti.
- Per
SPECIFIC_RESERVATION:- Il campo
keydeve essere impostato sucompute.googleapis.com/reservation-namee il campovaluesdeve specificare una singola prenotazione esistente in una zona all'interno della regione del job. - La prenotazione specificata deve essere configurata per un targeting specifico (non per il consumo automatico) e deve essere condivisa con Agent Platform (e con il tuo progetto, se la prenotazione si trova in un progetto host diverso).
- Il campo
Se uno di questi controlli di convalida non va a buon fine, l'API rifiuta immediatamente la richiesta con un errore INVALID_ARGUMENT. La convalida iniziale non verifica la compatibilità del tipo di macchina o la capacità di prenotazione disponibile al momento dell'invio del job.
La seguente tabella riassume il modo in cui Agent Platform gestisce un job di addestramento in base allo stato della prenotazione e a reservationAffinityType:
| Scenario | Comportamento con ANY_RESERVATION |
Comportamento con SPECIFIC_RESERVATION |
|---|---|---|
| La prenotazione esiste, corrisponde alle proprietà della macchina e ha capacità disponibile | Il job viene accettato, indirizzato alla zona della prenotazione e consuma la prenotazione. | Il job viene accettato e consuma la prenotazione specificata. |
| La prenotazione esiste e corrisponde alle proprietà della macchina, ma è piena | Il job viene accettato e indirizzato alla zona in cui si trova la prenotazione corrispondente. Poiché la capacità prenotata è esaurita, Agent Platform tenta di eseguire il provisioning della capacità on demand. | Il job viene accettato, ma se la capacità non diventa disponibile nella prenotazione target, Agent Platform. Non viene eseguito il fallback alla capacità on demand. |
| La prenotazione esiste, ma non è condivisa con Agent Platform o con il progetto consumer |
Il job non va a buon fine immediatamente al momento dell'invio con un errore INVALID_ARGUMENT (a meno che non esista un'altra prenotazione accessibile consumata automaticamente nella regione).
|
Il job non va a buon fine immediatamente al momento dell'invio con un errore INVALID_ARGUMENT.
|
| Nessuna prenotazione accessibile nella regione del job |
Il job non va a buon fine immediatamente al momento dell'invio con un errore INVALID_ARGUMENT. Non viene eseguito il fallback alla capacità on demand.
|
Il job non va a buon fine immediatamente al momento dell'invio con un errore INVALID_ARGUMENT.
|
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 progetto in cui è stata creata la prenotazione. Per utilizzare una prenotazione condivisa da un altro progetto, devi condividere la prenotazione con quel progetto. Per saperne di più, consulta Modifica i progetti consumer in una prenotazione condivisa.
-
JOB_NAME: obbligatorio. Un nome visualizzato per
CustomJob. - MACHINE_TYPE: il tipo di macchina da utilizzare per il job. L'impostazione predefinita è
n1-standard-2. Per saperne di più sui tipi di macchine supportati, consulta Configura le risorse di computing per l'addestramento personalizzato. - ACCELERATOR_TYPE: il tipo di acceleratore da collegare alla macchina. Per ulteriori informazioni sul tipo di GPU supportato da ciascun tipo di macchina, consulta GPU per i workload di computing.
- ACCELERATOR_COUNT: il numero di acceleratori da collegare alla macchina.
- Definisci il job di addestramento personalizzato:
RESERVATION_AFFINITY_TYPE: deve essere
ANY_RESERVATION,SPECIFIC_RESERVATIONoNO_RESERVATION.ANY_RESERVATIONsignifica che le VM del tuocustomJobpossono utilizzare automaticamente qualsiasi prenotazione con proprietà corrispondenti.SPECIFIC_RESERVATIONsignifica che le VM dicustomJobpossono utilizzare solo una prenotazione che le VM hanno come target specifico per nome.NO_RESERVATIONsignifica che le VM del tuocustomJobnon possono utilizzare alcuna prenotazione. La specifica diNO_RESERVATIONha lo stesso effetto dell'omissione di una specifica di affinità di prenotazione.
- ZONE: la zona in cui è stata creata la prenotazione.
- RESERVATION_NAME: il nome della prenotazione.
- DISK_TYPE: (Facoltativo) Il tipo di disco di avvio da utilizzare per il job,
pd-standard(predefinito) opd-ssd. Scopri di più sui tipi di disco. - DISK_SIZE: (Facoltativo) La dimensione in GB del disco di avvio da utilizzare per il job. Il valore predefinito è 100.
- REPLICA_COUNT: il numero di repliche dei worker da usare. In molti casi occorre 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 in Artifact Registry o Docker Hub da eseguire su ogni replica worker.
- 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 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 al modulo Python.
- TIMEOUT: (Facoltativo) Il tempo di esecuzione massimo per il job.
- Specifica LABEL_NAME e LABEL_VALUE per le etichette che vuoi applicare a questo job personalizzato.
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",
"acceleratorType": "ACCELERATOR_TYPE",
"acceleratorCount": ACCELERATOR_COUNT,
"reservationAffinity": {
"reservationAffinityType": "RESERVATION_AFFINITY_TYPE",
// Use the following key and values only if
// the reservationAffinityType is SPECIFIC_RESERVATION.
"key": "compute.googleapis.com/reservation-name",
"values": [
"projects/PROJECT_ID/zones/ZONE/reservations/RESERVATION_NAME"
]
},
},
"replicaCount": REPLICA_COUNT,
"diskSpec": {
"bootDiskType": DISK_TYPE,
"bootDiskSizeGb": DISK_SIZE
},
// 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": {
"timeout": TIMEOUT
}
},
"labels": {
LABEL_NAME_1": LABEL_VALUE_1,
LABEL_NAME_2": LABEL_VALUE_2
}
}
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 TRAININGPIPELINE_ID.
Passaggi successivi
- Scopri di più sulle prenotazioni di risorse di zona di Compute Engine.
- Scopri come utilizzare le prenotazioni con l'inferenza online di Agent Platform.
- Scopri come utilizzare le prenotazioni con l'inferenza batch di Agent Platform.
- Scopri come visualizzare le prenotazioni.
- Scopri come monitorare l'utilizzo delle prenotazioni.