Questo documento descrive come creare ed eseguire un job Batch che utilizza la flessibilità delle istanze. La flessibilità delle istanze ti consente di eseguire un job su più tipi di macchine che specifichi e che puoi classificare facoltativamente.
Consentendo più tipi di macchine per un job, puoi utilizzare la flessibilità delle istanze per migliorare l'ottenibilità, ovvero la probabilità che le risorse siano disponibili per eseguire il job. Per ulteriori informazioni sulla scelta delle funzionalità di ottenibilità da utilizzare per il tuo workload, consulta Migliorare l'ottenibilità delle risorse. Ad esempio, l'utilizzo della flessibilità delle istanze può aiutarti a:
- Ridurre la probabilità di errori di disponibilità delle risorse e ritardi di pianificazione correlati.
- Selezionare risorse con maggiore ottenibilità per aiutare i job a terminare prima, ad esempio:
- Aumentare la probabilità di ottenere più istanze per i job che supportano l'elaborazione parallela.
- Ottenere VM spot con una minore probabilità di prerilascio.
Prima di iniziare
- Se non hai mai utilizzato Batch, consulta la pagina Inizia a utilizzare Batch e abilita Batch completando i prerequisiti per progetti e utenti.
-
Per ottenere le autorizzazioni necessarie per creare un job, chiedi all'amministratore di concederti i seguenti ruoli IAM:
- Editor di job batch (
roles/batch.jobsEditor) sul progetto - Utente account di servizio (
roles/iam.serviceAccountUser) sul service account del job, che per impostazione predefinita è il service account predefinito di Compute Engine
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.
- Editor di job batch (
Limitazioni
Quando un job utilizza la flessibilità delle istanze, si applicano tutte le seguenti limitazioni:
Il miglioramento dell'ottenibilità aumenta con il numero di tipi di macchine che consenti a un job di utilizzare.
Il job non può specificare il modello di provisioning
FLEX_STARToRESERVATION_BOUND.Il job non può utilizzare una prenotazione con target specifico. Il
reservationcampo deve essere non definito o impostato suNO_RESERVATION.Una prenotazione con target specifico include tutte le prenotazioni per il modello di provisioning
RESERVATION_BOUNDe alcune prenotazioni per il modello di provisioningSTANDARD. Queste funzionalità sono intrinsecamente incompatibili perché la creazione dell'istanza può avere esito positivo solo per il tipo di macchina della prenotazione.Ogni job può avere fino a 50 selezioni di istanze.
Ogni selezione di istanze in un job deve avere un nome univoco, un rango univoco e uno o più tipi di macchine univoci.
I tipi di macchine non possono essere ripetuti; includi ogni tipo di macchina in una sola selezione di istanze per job.
Ogni job può avere fino a 200 tipi di macchine univoci nelle selezioni di istanze.
Anche se la specifica di più tipi di macchine nella stessa selezione di istanze è facoltativa, è obbligatoria se vuoi risorse con maggiore ottenibilità.
- Batch tenta di selezionare uno o più tipi di macchine con la massima ottenibilità solo quando la selezione di istanze per un rango ha più tipi di macchine. Ad esempio, questa selezione è importante se vuoi che il tuo job abbia VM spot con una minore probabilità di prerilascio o più istanze per un job che può eseguire attività in parallelo.
- In caso contrario, quando la selezione di istanze per un rango ha un solo tipo di macchina, la flessibilità delle istanze aiuta solo a prevenire gli errori di disponibilità delle risorse.
Il job non può includere il
machineTypecampo, e il tipo di macchina per qualsiasi template di istanza specificato dal job viene ignorato.Devi verificare che ogni proprietà specificata per il job sia compatibile con ogni tipo di macchina consentito. In caso contrario, il job potrebbe non riuscire dopo l'invio perché non può creare istanze. Ad esempio, ti consigliamo di verificare che almeno le seguenti proprietà di un job siano compatibili con tutti i tipi di macchine:
- Località (se specificata, campo
allowedLocations[]; altrimentilocation) - Risorse di computing per attività (campo
computeResource) - Dischi e immagini (campo
volumes[], campodisk[]e campobootDisk) - Rete (campo
network) Tutte le altre proprietà dell'istanza (sottocampi
instances[]):- Piattaforma CPU minima (campo
minCpuPlatform) - Modello di provisioning (campo
provisioningModel) - GPU (campo
accelerators[])
- Piattaforma CPU minima (campo
- Località (se specificata, campo
Non puoi eseguire l'override dei dischi e delle piattaforme CPU minime per i job Batch. Tutti i tipi di macchine utilizzano i valori specificati (nei sottocampi
policyo in un template di istanza) o, se non specificati, utilizzano i valori predefiniti per un tipo di macchina nella selezione di istanze con la priorità più alta. Di conseguenza, ti consigliamo di eseguire tutte le seguenti operazioni:Verifica che il tipo di disco di avvio sia compatibile con ogni tipo di macchina consentito. In sintesi, i tipi di macchine di quarta generazione e successive non supportano i dischi permanenti, i tipi di macchine di seconda generazione e precedenti non supportano Hyperdisk e i tipi di macchine di terza generazione e precedenti utilizzano i dischi di avvio permanenti per impostazione predefinita.
Non specificare una piattaforma CPU minima o dischi facoltativi a meno che tu non abbia verificato che siano supportati per ogni tipo di macchina consentito.
Creare un job che può utilizzare più tipi di macchine
Per creare un job che può utilizzare più tipi di macchine, seleziona uno dei seguenti metodi.
gcloud
Per configurare più tipi di macchine utilizzando Google Cloud CLI per creare un job, completa i seguenti passaggi:
Includi il
instanceFlexibilityPolicycampo e i sottocampi nel campoallocationPolicynel file JSON che specifica i dettagli di configurazione del job. Il campoinstanceFlexibilityPolicysupporta una o più selezioni di istanze, ognuna con un nome univoco, un rango univoco e un elenco di uno o più tipi di macchine."allocationPolicy":{ "instanceFlexibilityPolicy":{ "instanceSelections":{ "INSTANCE_SELECTION_NAME":{ "rank": RANK, "machineTypes": [MACHINE_TYPES] } } } }Sostituisci quanto segue:
INSTANCE_SELECTION_NAME: un nome per la selezione di istanze. Se il job ha più selezioni di istanze, assicurati che ogni nome in questo job sia univoco.RANK: (facoltativo) un numero intero maggiore o uguale a zero che rappresenta la priorità per questa selezione di istanze, dove il valore più basso è la priorità più alta. Se non viene specificato, il valore predefinito è0(priorità più alta). Se il job ha più selezioni di istanze, assicurati che ogni rango in questo job sia univoco.MACHINE_TYPES: un elenco separato da virgole di uno o più tipi di macchine, scritti come stringhe, per questa selezione di istanze. Puoi includere ogni tipo di macchina in una sola selezione di istanze per job. Ad esempio, un elenco di tre tipi di macchine può essere scritto come segue:"MACHINE_TYPE_1", "MACHINE_TYPE_2", "MACHINE_TYPE_3"Sostituisci
MACHINE_TYPE_1,MACHINE_TYPE_2,MACHINE_TYPE_3con un tipo di macchina, ad esempioe2-micro,e2-smallen1-standard-2.
Per ulteriori informazioni, consulta anche l'esempio di job.
Mentre questa funzionalità è in anteprima, devi utilizzare il
gcloud alpha batch jobs submitcomando per creare e inviare il job.gcloud alpha batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILESostituisci quanto segue:
JOB_NAME: il nome del job.LOCATION: la località del job.JSON_CONFIGURATION_FILE: il percorso di un file JSON con i dettagli di configurazione del job.
REST
Per utilizzare l'API Batch per creare un job che utilizza più
tipi di macchine, utilizza il
metodo v1alpha jobs.create
mentre questa funzionalità è in
anteprima.
Per specificare più tipi di macchine per un job, includi il
instanceFlexibilityPolicy campo
e sottocampi
nel allocationPolicy campo nel corpo principale del file JSON.
Il campo instanceFlexibilityPolicy supporta una o più selezioni di istanze, ognuna con un nome univoco, un rango univoco e un elenco di uno o più tipi di macchine.
"allocationPolicy":{
"instanceFlexibilityPolicy":{
"instanceSelections":{
"INSTANCE_SELECTION_NAME":{
"rank": RANK,
"machineTypes": [MACHINE_TYPES]
}
}
}
}
Sostituisci quanto segue:
INSTANCE_SELECTION_NAME: un nome per la selezione di istanze. Se il job ha più selezioni di istanze, assicurati che ogni nome in questo job sia univoco.RANK: (facoltativo) un numero intero maggiore o uguale a zero che rappresenta la priorità per questa selezione di istanze, dove il valore più basso è la priorità più alta. Se non viene specificato, il valore predefinito è0(priorità più alta). Se il job ha più selezioni di istanze, assicurati che ogni rango in questo job sia univoco.MACHINE_TYPES: un elenco separato da virgole di uno o più tipi di macchine, scritti come stringhe, per questa selezione di istanze. Puoi includere ogni tipo di macchina in una sola selezione di istanze per job. Ad esempio, un elenco di tre tipi di macchine può essere scritto come segue:"MACHINE_TYPE_1", "MACHINE_TYPE_2", "MACHINE_TYPE_3"Sostituisci
MACHINE_TYPE_1,MACHINE_TYPE_2,MACHINE_TYPE_3con un tipo di macchina, ad esempioe2-micro,e2-smallen1-standard-2.
Per ulteriori informazioni, consulta anche l'esempio di job.
Esempio di file di configurazione JSON del job
Ad esempio, quando utilizzi gcloud CLI o l'API Batch, puoi utilizzare il seguente file di configurazione JSON per creare un job di script di base con due selezioni di istanze:
- La selezione di istanze denominata
first-choiceha la priorità più alta ("rank": 0) e tre tipi di macchine (e2-micro,e2-smallen1-standard-2). - La selezione di istanze denominata
second-choiceha la seconda priorità ("rank": 1) e un tipo di macchina (e2-medium).
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"script": {
"text": "echo Hello World! This is task $BATCH_TASK_INDEX."
}
}
]
},
"taskCount": 3
}
],
"allocationPolicy":{
"instanceFlexibilityPolicy":{
"instanceSelections":{
"first-choice":{
"rank": 0,
"machineTypes": ["e2-micro", "e2-small", "n1-standard-2"]
},
"second-choice":{
"rank": 1,
"machineTypes": ["e2-medium"]
}
}
}
}
}
Passaggi successivi
- Se hai problemi a creare o eseguire un job, consulta la sezione Risoluzione dei problemi.
- Visualizza job e attività.
- Scopri di più sulle opzioni di creazione dei job .