Assicurati la disponibilità delle risorse utilizzando le prenotazioni VM

Questo documento spiega come creare job che vengono eseguiti su risorse riservate e come impedire ai job di utilizzare le prenotazioni.

Le prenotazioni sono una funzionalità di Compute Engine. Una prenotazione fornisce un un elevato livello di garanzia nell'ottenere capacità per una o più VM con configurazione hardware specificata. Una prenotazione di 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 una VM senza prenotazione.

In genere, le prenotazioni sono utili quando la disponibilità della capacità è di fondamentale importanza o per evitare errori nell'ottenimento delle risorse. In particolare, per Batch, valuta la possibilità di utilizzare prenotazioni dedicate per contribuire a ridurre al minimo il tempo di pianificazione dei job o prova a utilizzare le prenotazioni esistenti quando non sono in uso. Se hai prenotazioni sottoutilizzate, ad esempio quelle richieste per gli sconti per impegno di utilizzo, puoi configurare i job in modo che cerchino di utilizzarle quando non sono in uso per contribuire a ottimizzare i costi sostenuti. In alternativa, se vuoi la disponibilità delle risorse per altri carichi di lavoro nel progetto, bloccare esplicitamente il consumo delle prenotazioni da parte di un job.

Per scoprire di più sulle prenotazioni, consulta la documentazione di Compute Engine relativa alle prenotazioni.

Prima di iniziare

  1. Se non hai mai utilizzato Batch, consulta la guida introduttiva all'utilizzo di Batch e attivalo completando i prerequisiti per progetti e utenti.
  2. Assicurati di disporre delle autorizzazioni per creare una prenotazione o visualizzare una prenotazione esistente che vuoi che le VM di un job consumino in base alle esigenze.
  3. 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 Gestire l'accesso a progetti, cartelle e organizzazioni.

    Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.

Limitazioni

Oltre alle limitazioni generali per le prenotazioni, la funzionalità Batch presenta anche le seguenti limitazioni:

Requisiti

Questa sezione riassume i requisiti per l'utilizzo di una prenotazione da parte delle VM di un job. Per ulteriori informazioni su tutti i requisiti, consulta requisiti generali per le prenotazioni nella documentazione di Compute Engine e procedura per pianificare la configurazione più avanti in questo documento.

  • Affinché le VM di un job siano in grado di consumare una prenotazione, tutte le devono essere soddisfatte le seguenti condizioni:

    • Il job e la prenotazione devono specificare proprietà VM che corrispondono esattamente.

    • L'utente è tenuto a rispettare tutte le restrizioni contenute in questo documento e tutti gli altri requisiti generali per le prenotazioni.

  • Affinché ciascuna VM di un job possa utilizzare correttamente una prenotazione, la prenotazione deve avere una capacità inutilizzata disponibile durante il tempo di esecuzione della VM.

    La capacità inutilizzata di una prenotazione è la differenza tra conteggio delle VM e numero di VM che le utilizzano. Le VM tentano di utilizzare le prenotazioni ogni volta che hai capacità di prenotazione non utilizzata. Pertanto, una VM può iniziare a utilizzare una prenotazione al momento della sua creazione o in un secondo momento durante il suo tempo di esecuzione. Una VM non smette di utilizzare una prenotazione finché non viene interrotta l'esecuzione della VM 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 tempo di esecuzione del job.

Crea ed esegui un job che può utilizzare VM prenotate

  1. Pianifica la configurazione. Per assicurarti che il job e la prenotazione siano compatibili, completa i seguenti passaggi.

    Se vuoi utilizzare una prenotazione già esistente, devi creare un un job con una configurazione corrispondente. In caso contrario, se prevedi di creare un nuova prenotazione, seleziona le opzioni di configurazione che preferisci.

    1. Determina le proprietà di prenotazione. A causa delle limitazioni, il tipo di condivisione deve essere single-project, che è l'opzione predefinita per una prenotazione. Determina i valori da utilizzare per le seguenti proprietà di prenotazione:

      • Tipo di consumo*
      • Conteggio VM

      *La prenotazione tipo di consumo (target specifici o consumati automaticamente) determina quali VM possono consumare la prenotazione.

      Il numero di VM rappresenta la capacità totale di una prenotazione. Quando scegli questo valore, tieni conto del numero di VM del job.

    2. Determina le proprietà della VM per il job e la prenotazione. A causa delle restrizioni, né il job né la prenotazione possono specificare un criterio di posizionamento compatto, che è l'opzione predefinita sia per le prenotazioni sia per i job. Stabilisci i valori da utilizzare per: 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 numero di GPU (se presenti)
      • Tipo e numero di SSD locali (se presenti)
      • Affinità di prenotazione#

      *Le VM di job devono trovarsi nella stessa zona delle VM riservate. Devi includere questa zona nel allowedLocations[] oppure, se il campo viene omesso Campo allowedLocations[], imposta la posizione del lavoro alla regione che contiene la 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 policy campi secondari e un modello.

      Un campo facoltativo non può essere definito per una risorsa e omesso nell'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.

      #La prenotazione tipo di consumo determina l'affinità di prenotazione richiesta per le VM del job, devi specificare nel job come segue:

  2. Prepara la prenotazione. Se non l'hai ancora fatto, crea la prenotazione che vuoi che le VM del job utilizzino. Assicurati che la prenotazione includa strutture che hai pianificato.

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

    1. Crea un file JSON che specifichi i dettagli di configurazione del job e che imposti 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 le VM di 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 da utilizzare per il job specificando i campi secondari instances[] pianificati 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:

      1. Vuoi utilizzare un modello di istanza?

        • Sì: sostituisci policy campo instanceTemplate e specifica un valore esistente Modello di istanza VM corrispondente alla prenotazione. Ad esempio: guarda l'esempio di codice utilizzando un modello di istanza VM. Se la prenotazione utilizza GPU o SSD locali, dovrai anche configurare il campo installGpuDrivers del job volumes[] rispettivamente. In caso contrario, salta le modifiche rimanenti.

        • No: sostituisci MACHINE_TYPE con lo stesso tipo di macchina della prenotazione.

      2. La prenotazione include una piattaforma CPU minima?

        • Sì: sostituisci MIN_CPU_PLATFORM con la stessa piattaforma CPU minima.

        • No: rimuovi il campo minCpuPlatform.

      3. La prenotazione include le GPU?

        • Sì: sostituisci INSTALL_GPU_DRIVERS, GPU_TYPE e GPU_COUNT in modo che corrispondano alla prenotazione. Ad esempio, vedi l'esempio di codice per utilizzando le GPU.

        • No: rimuovi il campo installGpuDrivers e il campo accelerators[].

      4. La prenotazione include gli SSD locali?

        • Sì: sostituisci LOCAL_SSD_SIZE e LOCAL_SSD_NAME in base alla prenotazione, e montare gli SSD locali aggiungendo Campo volumes[] al job. Ad esempio, vedi l'esempio di codice per utilizzando SSD locali.

        • No: rimuovi il campo disks[].

      5. La prenotazione utilizza il tipo di consumo specificamente scelto come target?

        • Sì: sostituisci SPECIFIC_RESERVATION_NAME con il nome della prenotazione.

        • No: rimuovi il campo reservation.

      Ad esempio, supponiamo che tu stia utilizzando un modello per n2-standard-32 VM che non specifica piattaforma CPU minima, GPU o SSD locali. Inoltre, non vuoi specificare un modello di istanza VM. In questo caso, devi sostituire VM_RESOURCES con il seguente valore:

      "policy": {
        "machineType": "n2-standard-32"
      }
      
    2. Per creare ed eseguire il job, utilizza la classe 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 località del lavoro. A meno che il job non specifichi il campo allowedLocations[], 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 metodo jobs.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 le VM di una prenotazione, effettua 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: il ID progetto del tuo progetto.

    • LOCATION: la località del lavoro. A meno che il job non specifichi il campo allowedLocations[], 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 da utilizzare per il job specificando i campi secondari instances[] pianificati 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:

      1. Vuoi utilizzare un modello di istanza?

        • Sì: sostituisci il campo policy con il campo instanceTemplate e specifica un modello di istanza VM esistente corrispondente alla prenotazione. Ad esempio, consulta l'esempio di codice per l'utilizzo di un modello di istanza VM. Se la prenotazione utilizza GPU o SSD locali, dovrai anche configurare il campo installGpuDrivers del job volumes[] rispettivamente. Altrimenti, salta le altre modifiche.

        • No: sostituisci MACHINE_TYPE con lo stesso tipo di macchina della prenotazione.

      2. La prenotazione include una piattaforma CPU minima?

        • Sì: sostituisci MIN_CPU_PLATFORM con la stessa piattaforma CPU minima.

        • No: rimuovi il campo minCpuPlatform.

      3. La prenotazione include le GPU?

        • Sì: sostituisci INSTALL_GPU_DRIVERS, GPU_TYPE e GPU_COUNT in modo che corrispondano alla prenotazione. Ad esempio, consulta l'esempio di codice per l'utilizzo delle GPU.

        • No: rimuovi il campo installGpuDrivers e il campo accelerators[].

      4. La prenotazione include SSD locali?

        • Sì: sostituisci LOCAL_SSD_SIZE e LOCAL_SSD_NAME in modo che corrispondano alla prenotazione, e monta le unità SSD locali aggiungendo il campo volumes[] al job. Ad esempio, vedi l'esempio di codice per utilizzando SSD locali.

        • No: rimuovi il campo disks[].

      5. La prenotazione utilizza il tipo di consumo specificamente scelto come target?

        • 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, se non vogliamo specificare un modello di istanza VM. In questo caso, devi sostituire VM_RESOURCES con il seguente valore:

      "policy": {
        "machineType": "n2-standard-32"
      }

Crea ed esegui un job che non può utilizzare VM riservate

Per impedire a un job di utilizzare qualsiasi prenotazione, imposta il campo reservation su NO_RESERVATION. Per ulteriori informazioni su come evitare le prenotazioni il consumo medio, vedi Crea VM senza utilizzare 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

  1. Crea un file JSON che specifichi i dettagli e i set di configurazione del job il campo reservation a NO_RESERVATION.

    Ad esempio, per creare un job di script di base che non può utilizzare 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"
      }
    }
    
  2. Per creare ed eseguire il job, utilizza la classe 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 località del lavoro.

    • JSON_CONFIGURATION_FILE: il percorso di un file JSON con i dettagli di configurazione del job.

API

Invia una richiesta POST a 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 prenotazioni, effettua 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: il ID progetto del tuo progetto.

  • LOCATION: la località del lavoro.

  • JOB_NAME: il nome del job.

Passaggi successivi