Questo documento spiega come creare job eseguiti su risorse riservate e come impedire ai job di utilizzare le prenotazioni.
Le prenotazioni sono una funzionalità di Compute Engine. Una prenotazione offre un livello di garanzia molto elevato per l'ottenimento di capacità per una o più VM con la configurazione hardware specificata. Una prenotazione per una VM comporta i costi di quella VM dal momento della creazione fino all'eliminazione della prenotazione. Tuttavia, mentre utilizzi la VM, il costo totale è equivalente a quello di una VM senza riserva.
In genere, le prenotazioni sono utili quando la disponibilità di capacità è fondamentale o per evitare errori nell'ottenimento delle risorse. Per Batch in particolare, valuta la possibilità di utilizzare prenotazioni dedicate per ridurre al minimo il tempo di pianificazione dei job o tenta di utilizzare prenotazioni esistenti quando non vengono utilizzate. Se hai prenotazioni sottoutilizzate, ad esempio quelle richieste per gli sconti per impegno di utilizzo, puoi configurare i job in modo che tentino di utilizzarle quando non vengono utilizzate per cercare di ottimizzare i costi sostenuti. In alternativa, se vuoi dare la priorità alla disponibilità delle risorse per altri carichi di lavoro nel tuo progetto, puoi bloccare esplicitamente un job dal consumo delle prenotazioni.
Per saperne di più sulle prenotazioni, consulta la documentazione di Compute Engine per le prenotazioni.
Prima di iniziare
- Se non hai mai utilizzato Batch, consulta la sezione Guida introduttiva a Batch e attiva Batch completando i prerequisiti per progetti e utenti.
- Assicurati di disporre delle autorizzazioni per creare una prenotazione o visualizzare una prenotazione esistente che le VM di un job devono utilizzare in base alle necessità.
-
Per ottenere le autorizzazioni necessarie per creare un job, chiedi all'amministratore di concederti i seguenti ruoli IAM:
-
Batch Job Editor (
roles/batch.jobsEditor
) sul progetto -
Utente service account (
roles/iam.serviceAccountUser
) sul service account del job, che per impostazione predefinita è il service account Compute Engine predefinito
Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.
Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.
-
Batch Job Editor (
Limitazioni
Oltre alle limitazioni generali per le prenotazioni, Batch presenta anche le seguenti limitazioni:
- Le VM di un job non possono utilizzare le prenotazioni condivise.
- Le VM di un job non possono utilizzare le prenotazioni se entrambe specificano una policy di posizionamento compatto.
- Se crei un job utilizzando la console Google Cloud , le relative VM utilizzano automaticamente le prenotazioni corrispondenti. Per utilizzare una prenotazione o bloccare
le VM dall'utilizzo delle prenotazioni, devi definire il campo
reservation
quando crei un job utilizzando gcloud CLI o l'API Batch.
Requisiti
Questa sezione riepiloga i requisiti affinché le VM di un job utilizzino una prenotazione. Per ulteriori informazioni su tutti i requisiti, consulta i requisiti generali per le prenotazioni nella documentazione di Compute Engine e la procedura per pianificare la configurazione più avanti in questo documento.
Affinché le VM di un job siano generalmente in grado di utilizzare una prenotazione, devono essere soddisfatte tutte le seguenti condizioni:
Il job e la prenotazione devono specificare proprietà VM che corrispondono esattamente.
Devi rispettare tutte le limitazioni riportate in questo documento e tutti gli altri requisiti generali per le prenotazioni.
Affinché ciascuna VM di un job utilizzi correttamente una prenotazione, quest'ultima deve avere capacità inutilizzata disponibile durante il runtime della VM.
La capacità inutilizzata di una prenotazione è la differenza tra il numero di VM e il numero di VM che la utilizzano attualmente. Le VM tentano di utilizzare le prenotazioni ogni volta che hai capacità di prenotazione inutilizzata. Pertanto, una VM può iniziare a utilizzare una prenotazione al momento della creazione o in un secondo momento durante il runtime. Una VM non smette di utilizzare una prenotazione finché la VM non smette di essere eseguita o la prenotazione non viene eliminata.
A seconda della capacità di prenotazione totale inutilizzata, nessuna, alcune o tutte le VM di un job potrebbero consumare prenotazioni e la quantità di VM prenotate potrebbe variare durante il runtime del job.
Crea ed esegui un job che può utilizzare le VM riservate
Pianifica la configurazione. Per assicurarti che il lavoro e la prenotazione siano compatibili, completa i seguenti passaggi.
Se vuoi utilizzare una prenotazione già esistente, devi creare un job con una configurazione corrispondente. Altrimenti, se prevedi di creare una nuova prenotazione, seleziona le opzioni di configurazione che preferisci.
Determina le proprietà della prenotazione. A causa delle limitazioni, il tipo di condivisione deve essere per un singolo progetto, che è l'opzione predefinita per una prenotazione. Determina i valori che vuoi utilizzare per le seguenti proprietà di prenotazione:
- Tipo di consumo*
- Conteggio VM†
*Il tipo di utilizzo della prenotazione (con target specifico o utilizzata automaticamente) determina quali VM possono utilizzare la prenotazione.
†Il conteggio VM rappresenta la capacità totale di una prenotazione. Quando decidi questo valore, considera il numero di VM del job.
Determina le proprietà della VM per il job e la prenotazione. A causa delle limitazioni, né il job né la prenotazione possono specificare una policy di posizionamento compatto, che è l'opzione predefinita sia per le prenotazioni sia per i job. Determina i valori che vuoi utilizzare per le seguenti proprietà della VM, che devono corrispondere esattamente per la prenotazione e il job:
- Progetto
- Zona*
- Tipo di macchina†
- Piattaforma CPU minima† (se presente‡)
- Tipo e conteggio GPU† (se presenti‡)
- Tipo e conteggio SSD locali† (se presenti‡)
- Affinità prenotazione†#
*Le VM del job devono trovarsi nella stessa zona delle VM riservate. Devi includere questa zona nel campo
allowedLocations[]
del job oppure, se ometti il campoallowedLocations[]
, impostare la località del job sulla regione che contiene questa zona.†Il job deve definire tutte queste proprietà utilizzando i campi secondari
policy
o un modello di istanza VM. Un job non può specificare una combinazione di campi secondaripolicy
e un modello.‡ Un campo facoltativo non può essere definito per una risorsa e omesso dall'altra. Definisci o ometti il campo facoltativo sia per la prenotazione sia per il job. Se il job specifica un modello di istanza VM, questo vale anche per i campi del modello specificato.
#Il tipo di utilizzo della prenotazione determina l'affinità della prenotazione richiesta per le VM del job, che devi specificare nel job nel seguente modo:
- Se il job utilizza un modello di istanza VM, il modello deve configurare l'affinità di prenotazione come spiegato nella documentazione sulle prenotazioni.
- Se il job non utilizza un modello e la prenotazione è
specificamente mirata, specifica il nome della prenotazione nel
campo
reservation
del job. - In caso contrario, se il job non utilizza un modello e la prenotazione viene
consumata automaticamente, ometti il campo
reservation
del job.
Prepara la prenotazione. Se non l'hai ancora fatto, crea la prenotazione che vuoi che le VM del job utilizzino. Assicurati che la prenotazione abbia le proprietà che hai pianificato.
Crea ed esegui il job. Puoi creare ed eseguire un job che utilizza le VM dalla prenotazione preparata utilizzando gcloud CLI o l'API Batch:
gcloud
Crea un file JSON che specifichi i dettagli di configurazione del job che imposta i sottocampi della risorsa istanza VM (
instances[]
) in modo che corrispondano esattamente alle proprietà VM di una prenotazione.Ad esempio, per creare un job di script di base che utilizza VM da una prenotazione, crea un file JSON con i seguenti contenuti:
{ "taskGroups": [ { "taskSpec": { "runnables": [ { "script": { "text": "echo Hello world from task ${BATCH_TASK_INDEX}" } } ] }, "taskCount": 3 } ], "allocationPolicy": { "instances": [ { VM_RESOURCES } ], }, "logsPolicy": { "destination": "CLOUD_LOGGING" } }
Sostituisci
VM_RESOURCES
con le risorse VM che corrispondono alla prenotazione che vuoi che il job utilizzi specificando i sottocampiinstances[]
che hai pianificato nei passaggi precedenti.Ad esempio, inizia dal seguente valore per
VM_RESOURCES
:"installGpuDrivers": INSTALL_GPU_DRIVERS, "policy": { "machineType": "MACHINE_TYPE", "minCpuPlatform": "MIN_CPU_PLATFORM", "accelerators": [ { "type": "GPU_TYPE", "count": GPU_COUNT } ], "disks": [ { "newDisk": { "sizeGb": LOCAL_SSD_SIZE, "type": "local-ssd" }, "deviceName": "LOCAL_SSD_NAME" } ], "reservation": "SPECIFIC_RESERVATION_NAME" }
Per utilizzare questo valore, apporta tutte le seguenti modifiche:
Vuoi utilizzare un modello di istanza?
Sì:sostituisci il campo
policy
con il campoinstanceTemplate
e specifica un modello di istanza VM esistente che corrisponda alla prenotazione. Ad esempio, consulta il esempio di codice per utilizzare un modello di istanza VM. Se la prenotazione utilizza GPU o SSD locali, devi anche configurare rispettivamente i campiinstallGpuDrivers
evolumes[]
del job. In caso contrario, ignora le modifiche rimanenti.No: sostituisci
MACHINE_TYPE
con lo stesso tipo di macchina della prenotazione.
La prenotazione include una piattaforma CPU minima?
Sì:sostituisci
MIN_CPU_PLATFORM
con la stessa piattaforma CPU minima.No:rimuovi il campo
minCpuPlatform
.
La prenotazione include GPU?
Sì:sostituisci
INSTALL_GPU_DRIVERS
,GPU_TYPE
eGPU_COUNT
in modo che corrispondano alla prenotazione. Ad esempio, consulta il esempio di codice per l'utilizzo delle GPU.No:rimuovi il campo
installGpuDrivers
e il campoaccelerators[]
.
La prenotazione include SSD locali?
Sì:sostituisci
LOCAL_SSD_SIZE
eLOCAL_SSD_NAME
in modo che corrispondano alla prenotazione e monta gli SSD locali aggiungendo il campovolumes[]
al job. Ad esempio, consulta il esempio di codice per l'utilizzo degli SSD locali.No:rimuovi il campo
disks[]
.
La prenotazione utilizza il tipo di consumo con target specifico?
Sì:sostituisci
SPECIFIC_RESERVATION_NAME
con il nome della prenotazione.No:rimuovi il campo
reservation
.
Ad esempio, supponiamo di utilizzare una prenotazione consumata automaticamente per
n2-standard-32
VM che non specifica alcuna piattaforma CPU minima, GPU o SSD locali. Inoltre, non vuoi specificare un modello di istanza VM. In questo caso, devi sostituireVM_RESOURCES
con il seguente valore:"policy": { "machineType": "n2-standard-32" }
Per creare ed eseguire il job, utilizza il comando
gcloud batch jobs submit
:gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILE
Sostituisci quanto segue:
JOB_NAME
: il nome del job.LOCATION
: la sede del lavoro. A meno che il job non specifichi il campoallowedLocations[]
, questa deve essere la regione che contiene la zona della prenotazione.JSON_CONFIGURATION_FILE
: il percorso di un file JSON con i dettagli di configurazione del job.
API
Invia una richiesta
POST
al metodojobs.create
che imposta i sottocampi della risorsa istanza VM (instances[]
) in modo che corrispondano esattamente alle proprietà VM di una prenotazione.Ad esempio, per creare un job di script di base che utilizza VM da una prenotazione, invia la seguente richiesta:
POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/jobs?job_id=JOB_NAME { "taskGroups": [ { "taskSpec": { "runnables": [ { "script": { "text": "echo Hello world from task ${BATCH_TASK_INDEX}" } } ] }, "taskCount": 3 } ], "allocationPolicy": { "instances": [ { VM_RESOURCES } ], }, "logsPolicy": { "destination": "CLOUD_LOGGING" } }
Sostituisci quanto segue:
PROJECT_ID
: l'ID progetto del tuo progetto.LOCATION
: la sede del lavoro. A meno che il job non specifichi il campoallowedLocations[]
, questa deve essere la regione che contiene la zona della prenotazione.JOB_NAME
: il nome del job.VM_RESOURCES
: le risorse VM che corrispondono alla prenotazione che vuoi che il job utilizzi specificando i campi secondariinstances[]
che hai pianificato nei passaggi precedenti.Ad esempio, inizia dal seguente valore per
VM_RESOURCES
:"installGpuDrivers": INSTALL_GPU_DRIVERS, "policy": { "machineType": "MACHINE_TYPE", "minCpuPlatform": "MIN_CPU_PLATFORM", "accelerators": [ { "type": "GPU_TYPE", "count": GPU_COUNT } ], "disks": [ { "newDisk": { "sizeGb": LOCAL_SSD_SIZE, "type": "local-ssd" }, "deviceName": "LOCAL_SSD_NAME" } ], "reservation": "SPECIFIC_RESERVATION_NAME" }
Per utilizzare questo valore, apporta tutte le seguenti modifiche:
Vuoi utilizzare un modello di istanza?
Sì:sostituisci il campo
policy
con il campoinstanceTemplate
e specifica un modello di istanza VM esistente che corrisponda alla prenotazione. Ad esempio, consulta il esempio di codice per utilizzare un modello di istanza VM. Se la prenotazione utilizza GPU o SSD locali, devi anche configurare rispettivamente i campiinstallGpuDrivers
evolumes[]
del job. In caso contrario, ignora le modifiche rimanenti.No: sostituisci
MACHINE_TYPE
con lo stesso tipo di macchina della prenotazione.
La prenotazione include una piattaforma CPU minima?
Sì:sostituisci
MIN_CPU_PLATFORM
con la stessa piattaforma CPU minima.No:rimuovi il campo
minCpuPlatform
.
La prenotazione include GPU?
Sì:sostituisci
INSTALL_GPU_DRIVERS
,GPU_TYPE
eGPU_COUNT
in modo che corrispondano alla prenotazione. Ad esempio, consulta il esempio di codice per l'utilizzo delle GPU.No:rimuovi il campo
installGpuDrivers
e il campoaccelerators[]
.
La prenotazione include SSD locali?
Sì:sostituisci
LOCAL_SSD_SIZE
eLOCAL_SSD_NAME
in modo che corrispondano alla prenotazione e monta gli SSD locali aggiungendo il campovolumes[]
al job. Ad esempio, consulta il esempio di codice per l'utilizzo degli SSD locali.No:rimuovi il campo
disks[]
.
La prenotazione utilizza il tipo di consumo con target specifico?
Sì:sostituisci
SPECIFIC_RESERVATION_NAME
con il nome della prenotazione.No:rimuovi il campo
reservation
.
Ad esempio, supponiamo di utilizzare una prenotazione consumata automaticamente per
n2-standard-32
VM che non specifica alcuna piattaforma CPU minima, GPU o SSD locali. Inoltre, non vuoi specificare un modello di istanza VM. In questo caso, devi sostituireVM_RESOURCES
con il seguente valore:"policy": { "machineType": "n2-standard-32" }
Crea ed esegui un job che non può utilizzare le VM riservate
Per impedire a un job di utilizzare le prenotazioni, imposta il
campo reservation
su NO_RESERVATION
. Per ulteriori informazioni su come impedire il consumo delle prenotazioni, consulta Impedire alle istanze di calcolo di consumare le prenotazioni nella documentazione di Compute Engine.
Puoi creare ed eseguire un job che non può utilizzare VM riservate utilizzando gcloud CLI o l'API Batch.
gcloud
Crea un file JSON che specifichi i dettagli di configurazione del job e imposti il campo
reservation
suNO_RESERVATION
.Ad esempio, per creare un job di script di base che non può utilizzare le prenotazioni, crea un file JSON con i seguenti contenuti:
{ "taskGroups": [ { "taskSpec": { "runnables": [ { "script": { "text": "echo Hello world from task ${BATCH_TASK_INDEX}" } } ] }, "taskCount": 3 } ], "allocationPolicy": { "instances": [ { "policy": { "reservation": "NO_RESERVATION" } } ], }, "logsPolicy": { "destination": "CLOUD_LOGGING" } }
Per creare ed eseguire il job, utilizza il comando
gcloud batch jobs submit
:gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILE
Sostituisci quanto segue:
JOB_NAME
: il nome del job.LOCATION
: la sede del lavoro.JSON_CONFIGURATION_FILE
: il percorso di un file JSON con i dettagli di configurazione del job.
API
Invia una richiesta POST
al metodo jobs.create
che imposta il campo reservation
su NO_RESERVATION
.
Ad esempio, per creare un job di script di base che non può utilizzare le prenotazioni, invia la seguente richiesta:
POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/jobs?job_id=JOB_NAME
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"script": {
"text": "echo Hello world from task ${BATCH_TASK_INDEX}"
}
}
]
},
"taskCount": 3
}
],
"allocationPolicy": {
"instances": [
{
"policy": {
"reservation": "NO_RESERVATION"
}
}
],
},
"logsPolicy": {
"destination": "CLOUD_LOGGING"
}
}
Sostituisci quanto segue:
PROJECT_ID
: l'ID progetto del tuo progetto.LOCATION
: la sede del lavoro.JOB_NAME
: il nome del job.
Passaggi successivi
- Se hai problemi a creare o eseguire un job, consulta la sezione Risoluzione dei problemi.
- Visualizzare lavori e attività.
- Scopri di più sulle opzioni di creazione dei job.