Panoramica della creazione e dell'esecuzione dei job

Questo documento descrive il processo di esecuzione e le opzioni di creazione dei job. I job batch consentono di eseguire carichi di lavoro di elaborazione batch su Google Cloud. Per scoprire di più sui componenti di un job e sui prerequisiti per l'utilizzo di Batch, consulta Guida introduttiva a Batch.

Come funzionano la creazione e l'esecuzione dei job

Per utilizzare Batch, crei un job che specifica il tuo workload e i relativi requisiti, quindi Batch lo esegue automaticamente.

I dettagli del funzionamento della creazione e dell'esecuzione dei job sono descritti nelle sezioni seguenti:

Ciclo di vita del job

Questa sezione descrive il ciclo di vita di un job e delle relative attività dalla creazione all'eliminazione.

Per ogni carico di lavoro che vuoi eseguire su Batch, segui la seguente procedura di base:

  1. Crea un job:definisci il workload che vuoi eseguire specificando i runnable, i task e qualsiasi altro requisito di un job. I dettagli per la creazione di un job sono introdotti nella sezione Opzioni di creazione dei job di questo documento.
  2. Monitora e risolvi i problemi relativi al job:al termine della creazione di un job, questo viene messo automaticamente in coda, pianificato ed eseguito sulle risorse specificate. Puoi visualizzare i dettagli di un job creato o di una delle sue attività per vedere lo stato attuale. Se necessario, puoi annullare un job per interromperlo o impedirne l'esecuzione. Una volta che un job è in esecuzione o è terminato, puoi anche monitorarlo e analizzarlo utilizzando i log. Se un job non va a buon fine, puoi risolvere il problema utilizzando eventuali messaggi di errore, eventi di stato o log per diagnosticare il problema prima di ricreare il job.
  3. Elimina o esporta il job: le informazioni di un job in Batch rimangono disponibili finché tu o Google Cloud non le eliminate. Google Cloud elimina automaticamente un job 60 giorni dopo il suo completamento. Prima di allora, puoi eliminare il job autonomamente o, se devi conservare le informazioni, puoi esportare i dati del job in Batch prima che venga eliminato. Le informazioni su un lavoro archiviate in altri servizi Google Cloud non sono interessate quando un lavoro viene eliminato e hanno norme di conservazione separate. Ad esempio, i log di un job vengono conservati ed eliminati automaticamente in base alle norme di conservazione di Cloud Logging.

Dopo aver creato un job, questo passa attraverso i seguenti stati:

  1. In coda (QUEUED): la richiesta di lavoro è stata ammessa ed è in attesa in coda. Il job rimane nella coda del progetto finché non può essere pianificato, il che avviene quando le risorse richieste sono disponibili e i job che lo precedono sono stati valutati. Tuttavia, per evitare che i job diventino obsoleti, se un job supera il tempo massimo di attesa nella coda, Batch lo esegue automaticamente invece di pianificarlo.
  2. Pianificato (SCHEDULED): il job è stato selezionato dalla coda per iniziare l'esecuzione e le risorse vengono allocate.
  3. In esecuzione (RUNNING): le risorse per il job sono state create e le relative attività possono iniziare a essere eseguite.

    Quando un job è in esecuzione, ogni sua attività passa attraverso i seguenti stati:

    1. In attesa (PENDING): l'attività è in attesa di una VM su cui essere eseguita.
    2. Assegnata (ASSIGNED): all'attività è stata assegnata una VM su cui essere eseguita.
    3. In esecuzione (RUNNING): l'attività è in esecuzione su una VM.
    4. Un'attività termina in uno dei seguenti stati:

      • Riuscita (SUCCEEDED): l'attività è riuscita perché ciascuno dei suoi eseguibili soddisfaceva una delle seguenti condizioni:

        • L'eseguibile è stato eseguito correttamente (ha restituito un codice di uscita pari a zero).
        • L'eseguibile non è riuscito (ha restituito un codice di uscita diverso da zero), ma era un eseguibile non critico (hai attivato il campo ignoreExitStatus dell'eseguibile).
        • L'eseguibile non è stato completato, ma era un eseguibile in background (hai attivato il campo background dell'eseguibile).
      • Non riuscita (FAILED): l'attività non è riuscita ed è stata interrotta perché almeno un eseguibile non soddisfaceva le condizioni precedenti.

    Le risorse per il job vengono eliminate prima del termine del job.

  4. Un job termina in uno dei seguenti stati:

    • Riuscito (SUCCEEDED): il job è riuscito perché tutte le sue attività sono riuscite.
    • Non riuscito (FAILED): il job non è riuscito ed è stato interrotto perché almeno una delle sue attività non è riuscita.
    • Annullato (CANCELLED): un utente ha annullato il job prima che venisse completato o non riuscisse.

Per saperne di più, consulta gli stati dei job e gli stati delle attività nella documentazione di riferimento.

Accodamento e pianificazione dei job

In genere, è più probabile che i job vengano eseguiti e completati prima se sono più piccoli e richiedono solo alcune risorse comuni. Per i job di esempio nella documentazione di Batch, che in genere sono molto piccoli e utilizzano risorse minime, potresti vederli terminare l'esecuzione in pochi minuti.

Nello specifico, il tempo impiegato da un job per completare le fasi di inserimento in coda e pianificazione varia per job diversi e in momenti diversi in base ai seguenti fattori:

  • Prerequisiti del job specificati dall'utente:tutti i prerequisiti che devono essere soddisfatti prima della pianificazione del job.

    Per impostazione predefinita, un job non ha prerequisiti. Se vuoi, puoi specificare che un job non può essere pianificato finché uno o più job esistenti non sono stati completati o non sono andati in errore. Per saperne di più, consulta Job dipendenti dalla pianificazione (anteprima).

  • Priorità job:la priorità di un job rispetto alle priorità di altri job nel tuo progetto.

    Puoi specificare facoltativamente la priorità di un job includendo il flag --priority per gcloud CLI o il campo JSON priority. Puoi definire la priorità di un job come un numero compreso tra 0 (priorità più bassa) e 99 (priorità più alta). L'impostazione di una priorità più alta può aiutare un job a essere eseguito prima dei job con priorità inferiore nel tuo progetto.

    Se non configuri la priorità di un job, per impostazione predefinita viene utilizzata la priorità più bassa, 0. Se due job in coda hanno la stessa priorità, il job creato per primo ha la priorità più alta.

  • Disponibilità delle risorse del job: la disponibilità delle risorse richieste del job nelle località consentite.

    Innanzitutto, un job non può essere eseguito se specifichi risorse che non sono offerte in quella località. In questo caso, il job non va a buon fine e viene visualizzato un errore di disponibilità della zona.

    In secondo luogo, è più probabile che un job venga ritardato o non vada a buon fine se una delle risorse richieste ha una capacità ridotta rispetto alla domanda attuale a causa di errori di disponibilità delle risorse. Di conseguenza, il job potrebbe essere eseguito prima se richiedi risorse meno comuni e non limiti l'esecuzione del job in nessuna zona di una regione.

    Per saperne di più sulle risorse per un job, consulta la sezione Esecuzione del job in questo documento. Per saperne di più sulle località che puoi specificare per un job Batch e le relative risorse, consulta la pagina Località.

  • Quote e limiti:le soglie che il tuo progetto ha per le risorse e le richieste Google Cloud .

    Un job non può essere eseguito se supera un limite o la quota del tuo progetto per una qualsiasi delle risorse o delle richieste richieste. In questo caso, Batch potrebbe ritardare un job e riprovare in un secondo momento oppure non riuscire a eseguire il job e visualizzare un errore correlato.

    Puoi contribuire a evitare ritardi ed errori per il tuo job creando job che rispettino tutti i limiti pertinenti e assicurandoti che il tuo progetto disponga di una quota pertinente sufficiente. Per saperne di più, consulta Quote e limiti batch.

Esecuzione del job

Il tempo necessario per l'esecuzione di un job può variare in base alla pianificazione delle attività e alle risorse del job.

Pianificazione delle attività

Quando viene eseguito un job, le relative attività vengono pianificate in base al campo criteri di pianificazione (schedulingPolicy), che consente di specificare una delle seguenti opzioni:

  • Il prima possibile (AS_SOON_AS_POSSIBLE) (impostazione predefinita): le attività vengono eseguite non appena le risorse sono disponibili e possono essere eseguite in parallelo. Il numero di attività eseguite contemporaneamente dipende dalle attività parallele per VM consentite dalle risorse del job e da altre opzioni di configurazione, come spiegato in Risorse del job in questo documento.
  • In ordine (IN_ORDER): le attività vengono eseguite una alla volta in ordine crescente dell'indice.

Risorse per i job

Ogni job Batch viene eseguito su un gruppo di istanze gestite (MIG) regionale, che è un gruppo di una o più istanze di macchine virtuali (VM) Compute Engine corrispondenti, ognuna delle quali si trova in una delle zone incluse. Ogni VM ha hardware dedicato per i core CPU (in particolare CPU virtuali (vCPU)) e la memoria, che influiscono sulle prestazioni del job, e un disco di avvio, che archivia un'immagine del sistema operativo (OS) e le istruzioni per l'esecuzione del job.

Durante il runtime di un job, Batch crea ed elimina automaticamente le risorse che soddisfano le tue specifiche. Quando crei un job, configuri le relative risorse specificando quanto segue:

  • Risorse di computing per attività:a meno che i valori predefiniti non siano sufficienti, devi specificare le risorse di computing (vCPU, memoria e, se necessario, spazio di archiviazione aggiuntivo sul disco di avvio) necessarie per l'esecuzione di ogni attività. Per maggiori informazioni, consulta i campi Risorse di calcolo per attività (computeResource).

  • Risorse VM:facoltativamente, puoi anche specificare le VM del job, ad esempio il tipo di macchina e il sistema operativo, e risorse aggiuntive come GPU e volumi di archiviazione, principalmente utilizzando i campi Policy delle risorse VM (instances[].policy) o il campo alternativo instances[].instanceTemplate. (Se vuoi consentire più tipi di macchine per un job, puoi utilizzare anche i campi instanceFlexibilityPolicy.)

    Se lasci questi campi non definiti (il che non è possibile quando crei un job utilizzando la consoleGoogle Cloud ), Batch tenta automaticamente di selezionare VM compatibili e non aggiunge risorse aggiuntive.

Il numero di VM e il numero di attività che possono essere eseguite contemporaneamente su ogni VM variano per i diversi job in base alla pianificazione delle attività e ai requisiti hardware specificati. Se specifichi che le attività di un job devono essere eseguite IN_ORDER, il job ha una VM ed esegue una sola attività alla volta. Altrimenti, se le attività di un job vengono eseguite AS_SOON_AS_POSSIBLE, puoi stimare il numero di VM e il numero di attività simultanee utilizzando la seguente formula:

\[{vmsPerJob}=\frac{taskCount}{parallelTasksPerVm}\]

Questa formula ha i seguenti valori:

  • \({vmsPerJob}\): il numero massimo di VM per un job. La quantità effettiva di VM create per un job potrebbe essere inferiore, ad esempio se Batch prevede che sia più veloce eseguire un job con meno risorse che attendere più risorse. Questo valore è limitato anche dai limiti di VM simultanee per job.
  • \({taskCount}\): il numero totale di attività per il job, che definisci utilizzando il campo Numero di attività (taskCount).
  • \({parallelTasksPerVM}\): il numero massimo di attività che possono essere eseguite contemporaneamente su una VM.

    Questo valore è determinato da tutti i seguenti criteri:

    • Il valore minimo è 1 attività.

    • Il valore massimo è il minore tra 20 attività e, se definito, il valore del campo Numero massimo di attività parallele per job (parallelism).

    • Se è definito il campo Numero massimo di attività parallele per VM (taskCountPerNode), viene utilizzato questo valore.

      Altrimenti, se taskCountPerNode non è definito, Batch decide un valore dividendo il numero totale di risorse di calcolo, in particolare vCPU, per VM per la quantità richiesta per ogni attività:

      \[{parallelTasksPerVm}=\frac{vcpusPerVm}{vcpusPerTask}\]

      Questa formula ha i seguenti valori:

      • \({vcpusPerVm}\): il numero totale di vCPU per VM, che è determinato dal tipo di macchina delle VM del job.

      • \({vcpusPerTask}\): il numero di vCPU per attività, che viene determinato convertendo le unità del campo vCPU per attività (cpuMilli).

Opzioni di creazione dei job

Crea ed esegui un job di base spiega i fondamentali, tra cui come definire un eseguibile utilizzando uno script o un'immagine container e come configurare variabili di ambiente predefinite e personalizzate.

Dopo aver compreso i principi fondamentali per la creazione dei job, valuta la possibilità di crearne uno che utilizzi una o più delle seguenti opzioni di configurazione aggiuntive:

  • Controllare l'accesso per un job:

  • Configura opzioni aggiuntive per un job:

    • Configura la comunicazione delle attività utilizzando una libreria MPI spiega come configurare un job con attività interdipendenti che comunicano tra loro su VM diverse utilizzando una libreria Message Passing Interface (MPI). Un caso d'uso comune per MPI sono i workload di computing ad alto accoppiamento e ad alte prestazioni (HPC).

    • Personalizza le risorse su cui viene eseguito un job:

      • Definisci le risorse del job utilizzando un modello di istanza VM spiega come specificare un modello di VM di Compute Engine per definire le risorse di un job quando lo crei. Si tratta di un'alternativa alla specifica diretta delle risorse di un job utilizzando il campo instances[].policy.

      • Utilizzare le GPU per un job spiega come definire un job che utilizza una o più unità di elaborazione grafica (GPU). I casi d'uso comuni per i job che utilizzano le GPU includono carichi di lavoro di elaborazione dei dati o di machine learning (ML) ad alta intensità.

      • Utilizzare volumi di archiviazione per un job spiega come definire un job che può accedere a uno o più volumi di archiviazione esterni. Le opzioni di archiviazione includono dischi permanenti nuovi o esistenti, nuovi SSD locali, bucket Cloud Storage esistenti e un file system di rete (NFS) esistente, ad esempio una condivisione file Filestore.

      • Panoramica dell'ambiente del sistema operativo della VM fornisce una panoramica di quando e come puoi personalizzare l'ambiente del sistema operativo della VM per un job, incluse l'immagine del sistema operativo della VM e i dischi di avvio del job.

    • Ottimizza vari aspetti di un job:

      • Migliora il monitoraggio e l'analisi:

      • Pianificare job dipendenti (anteprima) spiega come specificare un job che non viene eseguito finché uno o più job di dipendenza esistenti non sono riusciti o non sono riusciti. Se hai un workload con requisiti di risorse variabili, puoi ridurre i costi e l'utilizzo della quota separando i tipi di VM utilizzati per le operazioni a bassa domanda (come la preparazione dei dati) e le operazioni a elevato utilizzo di risorse di calcolo (come l'elaborazione dei dati).

      • Automatizzare i nuovi tentativi di esecuzione delle attività spiega come riprovare automaticamente a eseguire le attività di un job dopo tutti o determinati errori. I tentativi automatici possono contribuire a ridurre i problemi di risoluzione dei problemi e il tempo di esecuzione complessivo richiesto per i job che riscontrano errori temporanei. Ad esempio, utilizza i tentativi automatici per un job eseguito su VM spot, che offrono sconti significativi ma potrebbero non essere sempre disponibili e possono essere prerilasciate in qualsiasi momento.

      • Limitare i tempi di esecuzione utilizzando i timeout spiega come limitare il tempo di esecuzione consentito per un'attività o un eseguibile. Evitando tempi di esecuzione eccessivi, potresti ridurre costi e ritardi imprevisti.

      • Migliora l'ottenimento delle risorse:

      • Ridurre la latenza:

        • Collocare le VM per ridurre la latenza spiega come ridurre la latenza di rete tra le VM di un job richiedendo che le VM si trovino fisicamente vicine tra loro. Questo vantaggio in termini di prestazioni può essere particolarmente utile per i job che hanno comunicazioni di rete frequenti tra le VM, ad esempio le attività che comunicano utilizzando le librerie MPI.

        • Utilizzare lo streaming di immagini spiega come migliorare il tempo di avvio del job eseguendo lo streaming delle immagini container da Artifact Registry.

  • Utilizza servizi aggiuntivi per creare ed eseguire job:

Passaggi successivi