Migliora l'ottenibilità utilizzando la flessibilità dell'istanza

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.

Se consenti 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 saperne di più su quali funzionalità di ottenibilità utilizzare per il tuo carico di lavoro, 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.
  • Seleziona risorse con una maggiore ottenibilità per consentire il completamento più rapido dei job, ad esempio:
    • Aumenta la probabilità di ottenere più istanze per i job che supportano l'elaborazione parallela.
    • Ottieni VM spot con meno probabilità di essere prerilasciate.

Prima di iniziare

  1. Se non hai mai utilizzato Batch, consulta la sezione Guida introduttiva a Batch e attiva Batch completando i prerequisiti per progetti e utenti.
  2. Per ottenere le autorizzazioni necessarie per creare un job, chiedi all'amministratore di concederti i seguenti ruoli IAM:

    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.

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_START o il modello di provisioning RESERVATION_BOUND.

  • Il job non può utilizzare una prenotazione con target specifico. (Il campo reservation deve essere indefinito o impostato su NO_RESERVATION.)

    Una prenotazione con target specifico include tutte le prenotazioni per il modello di provisioning RESERVATION_BOUND e alcune prenotazioni per il modello di provisioning STANDARD. 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 macchina 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 unici nelle selezioni delle istanze.

  • Sebbene la specifica di più tipi di macchine nella stessa selezione di istanze sia facoltativa, è obbligatoria se vuoi risorse con una maggiore ottenibilità.

    • Batch tenta di selezionare uno o più tipi di macchine con la migliore ottenibilità solo quando la selezione di istanze per un rank ha più tipi di macchine. Ad esempio, questa selezione è importante se vuoi che il tuo job abbia VM spot con meno probabilità di essere prerilasciate o più istanze per un job che può eseguire attività in parallelo.
    • In caso contrario, quando la selezione di istanze per un rank ha un solo tipo di macchina, la flessibilità delle istanze aiuta solo a evitare errori di disponibilità delle risorse.
  • Il job non può includere il campo machineType 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 è possibile creare istanze. Ad esempio, ti consigliamo di verificare che almeno le seguenti proprietà di un job siano compatibili con tutti i tipi di macchina:

    • posizione (se specificata, campo allowedLocations[]; altrimenti location)
    • risorse di computing per attività (campo computeResource)
    • dischi e immagini (campo volumes[], campo disk[] e campo bootDisk)
    • rete (campo network)
    • tutte le altre proprietà dell'istanza (sottocampi instances[]):

      • piattaforma CPU minima (campo minCpuPlatform)
      • modello di provisioning (campo provisioningModel)
      • GPU (campo accelerators[])
  • Non puoi ignorare i dischi e le piattaforme CPU minime per i job Batch. Tutti i tipi di macchina utilizzano i valori specificati (nei sottocampi policy o in un template di istanza) oppure, se non specificati, utilizzano i valori predefiniti per un tipo di macchina nella selezione delle istanze con priorità più alta. Di conseguenza, ti consigliamo di procedere come segue:

    • 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.

Crea un job autorizzato a utilizzare più tipi di macchina

Per creare un job che può utilizzare più tipi di macchine, seleziona uno dei seguenti metodi.

gcloud

Per configurare più tipi di macchina durante l'utilizzo di Google Cloud CLI per creare un job, completa i seguenti passaggi:

  1. Includi il campo instanceFlexibilityPolicy e i sottocampi nel campo allocationPolicy del file JSON che specifica i dettagli di configurazione del tuo job. Il campo instanceFlexibilityPolicy supporta una o più selezioni di istanze, ognuna con un nome univoco, un ranking 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 delle 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 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 macchina, 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 nel seguente modo:

      "MACHINE_TYPE_1", "MACHINE_TYPE_2", "MACHINE_TYPE_3"
      

      Sostituisci MACHINE_TYPE_1, MACHINE_TYPE_2, MACHINE_TYPE_3 con un tipo di macchina, ad esempio e2-micro, e2-small e n1-standard-2.

    Per saperne di più, vedi anche l'esempio di job.

  2. Mentre questa funzionalità è in anteprima, devi utilizzare il comando gcloud alpha batch jobs submit per creare e inviare il job.

    gcloud alpha 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.

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 campo instanceFlexibilityPolicy e i sottocampi nel campo allocationPolicy nel corpo principale del file JSON. Il campo instanceFlexibilityPolicy supporta una o più selezioni di istanze, ognuna con un nome univoco, un ranking univoco e un elenco di uno o più tipi di macchina.

"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 specificato, il valore predefinito è 0 (priorità più alta). Se il job prevede più selezioni di istanze, assicurati che ogni grado in questo job sia univoco.

  • MACHINE_TYPES: un elenco separato da virgole di uno o più tipi di macchina, 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 nel seguente modo:

    "MACHINE_TYPE_1", "MACHINE_TYPE_2", "MACHINE_TYPE_3"
    

    Sostituisci MACHINE_TYPE_1, MACHINE_TYPE_2, MACHINE_TYPE_3 con un tipo di macchina, ad esempio e2-micro, e2-small e n1-standard-2.

Per saperne di più, vedi 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-choice ha la priorità più alta ("rank": 0) e tre tipi di macchine (e2-micro, e2-small e n1-standard-2).
  • La selezione di istanze denominata second-choice ha 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