Questo documento spiega il processo di esecuzione e le opzioni di creazione dei job. I job batch ti consentono di eseguire workload di elaborazione batch suGoogle Cloud. Per scoprire di più sui componenti di un job e sui prerequisiti per l'utilizzo di Batch, consulta Inizia a utilizzare Batch.
Come funzionano la creazione e l'esecuzione dei job
Per utilizzare Batch, crea un job che specifica il tuo workload e i relativi requisiti, quindi Batch lo esegue automaticamente.
I dettagli sul funzionamento della creazione e dell'esecuzione dei job sono descritti nelle sezioni seguenti:
- Ciclo di vita del job: scopri gli stati che un job attraversa dalla creazione all'eliminazione.
- Coda e pianificazione dei job: scopri i fattori che influiscono sul tempo necessario per l'avvio di un job.
- Esecuzione del job: scopri come vengono eseguiti i task di un job sulle relative risorse durante l'esecuzione.
Ciclo di vita del job
Questa sezione descrive il ciclo di vita di un job e dei relativi task dalla creazione all'eliminazione.
Per ogni workload che vuoi eseguire su Batch, segui questa procedura di base:
- Crea un job: definisci il workload che vuoi eseguire specificando gli elementi eseguibili, le attività e qualsiasi altro requisito di un job. I dettagli per la creazione di un job sono descritti nella sezione Opzioni di creazione dei job di questo documento.
- Monitora e risolvi i problemi del job: una volta completata la creazione, il job viene automaticamente messo 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. Dopo 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 i problemi utilizzando eventuali messaggi di errore, eventi di stato o log per diagnosticare il problema prima di ricreare il job.
- 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 esportarle in Batch prima che il job venga eliminato. Le informazioni su un job archiviate in altri servizi Google Cloud non sono interessate dall'eliminazione di un job e hanno policy di conservazione separate. Ad esempio, i log di un job vengono conservati ed eliminati automaticamente in base alle policy di conservazione di Cloud Logging.
Dopo aver creato un job, questo passa attraverso i seguenti stati:
- In coda (
QUEUED): la richiesta di job è stata accettata ed è in attesa nella 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 precedenti sono stati valutati. Tuttavia, per evitare che i job diventino obsoleti, se un job supera il tempo di attesa massimo nella coda, Batch lo contrassegna automaticamente come non riuscito anziché pianificarlo. - Pianificato (
SCHEDULED): il job è stato selezionato dalla coda per l'avvio dell'esecuzione e le risorse sono in fase di allocazione. In esecuzione (
RUNNING): le risorse per il job sono state create correttamente e le relative attività possono iniziare l'esecuzione.Quando un job è in esecuzione, ciascuna delle sue attività passa attraverso i seguenti stati:
- In attesa (
PENDING): l'attività è in attesa di una VM su cui essere eseguita. - Assegnata (
ASSIGNED): all'attività è stata assegnata una VM su cui essere eseguita. - In esecuzione (
RUNNING): l'attività è in esecuzione su una VM. Un'attività termina in uno dei seguenti stati:
Riuscito (
SUCCEEDED): l'attività è riuscita perché ciascuno dei suoi eseguibili ha soddisfatto una delle seguenti condizioni:- L'eseguibile è riuscito (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
ignoreExitStatusdell'eseguibile). - L'elemento eseguibile non è stato completato, ma era un elemento eseguibile in background (hai attivato il campo
backgrounddell'elemento eseguibile).
Non riuscita (
FAILED): l'attività non è riuscita e l'esecuzione è stata interrotta perché almeno un eseguibile non soddisfaceva le condizioni precedenti.
Le risorse per il job vengono eliminate prima del termine del job.
- In attesa (
Un job termina in uno dei seguenti stati:
- Riuscito (
SUCCEEDED): il job è riuscito perché tutte le sue attività sono state completate correttamente. - Non riuscito (
FAILED): il job non è riuscito e l'esecuzione è stata interrotta perché almeno una delle sue attività non è riuscita. - Annullato (
CANCELLED): un utente ha annullato il job prima che venisse completato o non riuscisse.
- Riuscito (
Per saperne di più, consulta gli stati dei job e gli stati delle attività nella documentazione di riferimento.
Coda e pianificazione dei job
In genere, i job hanno maggiori probabilità di essere eseguiti e completati prima se sono più piccoli e richiedono solo alcune risorse comuni. I job di esempio nella documentazione di Batch, che in genere sono molto piccoli e utilizzano risorse minime, potrebbero essere eseguiti in pochi minuti.
In particolare, il tempo impiegato da un job per completare l'inserimento in coda e la pianificazione varia per job diversi e in momenti diversi in base ai seguenti fattori:
Prerequisiti del job specificati dall'utente: tutti i prerequisiti che richiedi di soddisfare 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 riusciti o non hanno avuto esito negativo. Per saperne di più, consulta Pianifica job dipendenti (anteprima).
Priorità del job: la priorità di un job rispetto alle priorità di altri job nel progetto.
Se vuoi, puoi specificare la priorità di un job includendo il flag
--priorityper gcloud CLI o il campo JSONpriority. Puoi definire la priorità di un job come un numero compreso tra0(priorità più bassa) e99(priorità più alta). L'impostazione di una priorità più alta può aiutare un job a essere eseguito prima dei job con priorità più bassa nel 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 dal job all'interno delle 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 un numero inferiore di risorse più comuni e non limiti l'esecuzione del job a nessuna zona di una regione.
Per saperne di più sulle risorse per un job, consulta Esecuzione dei job in questo documento. Per ulteriori informazioni sulle località che puoi specificare per un job Batch e le relative risorse, consulta la pagina Località.
Quote e limiti: le soglie del progetto per le risorse e le richieste Google Cloud .
Un job non può essere eseguito se supera un limite o la quota del progetto per una qualsiasi delle risorse o delle richieste richieste. In questo caso, Batch potrebbe ritardare un job e riprovarlo in un secondo momento o non riuscire a eseguirlo e visualizzare un errore correlato.
Puoi contribuire a evitare ritardi ed errori per il tuo job creando job che rispettano tutti i limiti pertinenti e assicurandoti che il tuo progetto abbia una quota pertinente sufficiente. Per saperne di più, consulta Quote e limiti di 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 Policy di pianificazione (schedulingPolicy),
che ti consente di specificare una delle seguenti opzioni:
- Il prima possibile (
AS_SOON_AS_POSSIBLE) (valore predefinito): 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 di indice crescente.
Risorse per il lavoro
Ogni job Batch viene eseguito su un gruppo di istanze gestite (MIG) a livello di regione, ovvero un gruppo di una o più istanze di macchine virtuali (VM) Compute Engine corrispondenti, ciascuna situata in una delle zone incluse. Ogni VM dispone di hardware dedicato per i core della CPU (in particolare CPU virtuali (vCPU)) e la memoria, che influiscono sulle prestazioni del job, e di un disco di avvio, che memorizza 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, ne configuri le risorse specificando quanto segue:
Risorse di computing per task: a meno che i valori predefiniti non siano sufficienti, devi specificare le risorse di computing (vCPU, memoria e, se necessario, spazio di archiviazione su disco di avvio aggiuntivo) necessarie per l'esecuzione di ogni task. Per ulteriori informazioni, consulta i campi delle risorse di computing per attività (
computeResource).Risorse VM: facoltativamente, puoi anche specificare le VM del job, ad esempio il tipo di macchina e il sistema operativo, nonché risorse aggiuntive come GPU, TPU e volumi di archiviazione, principalmente utilizzando i campi della policy delle risorse VM (
instances[].policy) o il campo alternativoinstances[].instanceTemplate. (Facoltativamente, puoi anche utilizzare i campiinstanceFlexibilityPolicyse vuoi consentire più tipi di macchine per un job.)Se lasci questi campi non definiti (cosa 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. In caso contrario, 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. Il numero effettivo di VM create per un job potrebbe essere inferiore, ad esempio se Batch prevede che sia più veloce eseguire un job con meno risorse piuttosto 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 Conteggio 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 il campo Numero massimo di attività parallele per VM (
taskCountPerNode) è definito, viene utilizzato questo valore.In caso contrario, se
taskCountPerNodenon è definito, Batch decide un valore dividendo il numero totale di risorse di computing, in particolare vCPU, per VM per la quantità richiesta per ogni task:\[{parallelTasksPerVm}=\frac{vcpusPerVm}{vcpusPerTask}\]
Questa formula ha i seguenti valori:
\({vcpusPerVm}\): il numero totale di vCPU per VM, determinato dal tipo di macchina delle VM del job.
\({vcpusPerTask}\): il numero di vCPU per task, determinato convertendo le unità del campo vCPU per task (
cpuMilli).
Opzioni di creazione dei job
Crea ed esegui un job di base spiega i concetti 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 concetti di base della creazione dei job, valuta la possibilità di creare un job che utilizzi una o più delle seguenti opzioni di configurazione aggiuntive:
Controlla l'accesso per un job:
Controlla l'accesso a un job utilizzando un service account personalizzato spiega come specificare il account di servizio di un job, che influisce sulle risorse e sulle applicazioni a cui possono accedere le VM di un job. Se non specifichi un account di servizio personalizzato, i job utilizzano per impostazione predefinita il service account predefinito di Compute Engine.
La panoramica del networking fornisce una panoramica di quando e come puoi personalizzare la configurazione di networking per un job, tra cui la specifica della rete del job, il blocco delle connessioni esterne e la protezione di dati e risorse utilizzando i Controlli di servizio VPC.
Proteggi i dati sensibili utilizzando Secret Manager spiega come definire in modo sicuro i dati sensibili, come le variabili di ambiente personalizzate e le credenziali di accesso, utilizzando i secret di Secret Manager per specificare le informazioni criptate quando crei un job.
Configura opzioni aggiuntive per un job:
Configura la comunicazione tra i task utilizzando una libreria MPI spiega come configurare un job con task 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 alte prestazioni (HPC) ad alto accoppiamento.
Personalizza le risorse su cui viene eseguito un job:
Definisci le risorse del job utilizzando un template di istanza VM spiega come specificare un template di VM di Compute Engine per definire le risorse di un job quando lo crei. Questa è un'alternativa alla specifica diretta delle risorse di un job utilizzando il campo
instances[].policy.Utilizza 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 workload intensivi di trattamento dati, intelligenza artificiale (AI) o machine learning (ML).
Utilizza le TPU per un job spiega come definire un job che utilizza una o più Tensor Processing Unit (TPU). I casi d'uso comuni per i job che utilizzano le TPU includono workload di inferenza, valutazione, ottimizzazione e addestramento di intelligenza artificiale (AI) e machine learning (ML).
Utilizza i 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 Persistent Disk nuovi o esistenti, nuovi SSD locali, bucket Cloud Storage esistenti e un Network File System (NFS) esistente, ad esempio una condivisione file di Filestore.
La panoramica dell'ambiente del sistema operativo della VM fornisce una panoramica di quando e come puoi personalizzare l'ambiente del sistema operativo (OS) della VM per un job, inclusi l'immagine sistema operativo e i dischi di avvio della VM del job.
Ottimizza vari aspetti di un job:
Migliorare il monitoraggio e l'analisi:
Scrivi i log delle attività spiega come configurare gli eseguibili di un job per scrivere i log delle attività. La scrittura dei log delle attività consente di visualizzare informazioni personalizzate in Cloud Logging, il che può semplificare l'analisi e la risoluzione dei problemi dei job.
Configura gli eventi di stato personalizzati spiega come configurare gli eventi di stato personalizzati per i runnable di un job. Gli eventi di stato personalizzati ti consentono di descrivere eventi importanti che si verificano per i runnable e vengono visualizzati quando visualizzi la cronologia degli eventi di stato di un job, il che può semplificare l'analisi e la risoluzione dei problemi dei job.
Abilita le notifiche di stato spiega come configurare un job per l'invio di notifiche Pub/Sub relative al suo stato, che puoi facoltativamente archiviare ed eseguire query in una tabella BigQuery. Prima di leggere questo documento, configura il progetto per monitorare lo stato dei job utilizzando le notifiche Pub/Sub e BigQuery.
Abilita le metriche di Ops Agent spiega come configurare un job per installare automaticamente Ops Agent. Ops Agent raccoglie metriche aggiuntive sulle prestazioni e sull'utilizzo delle risorse di un job. Per saperne di più sulla visualizzazione e sull'utilizzo delle metriche delle risorse, consulta Monitora e ottimizza le risorse dei job visualizzando le metriche.
Pianifica i 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 hanno avuto esito negativo. 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 con requisiti ridotti (come la preparazione dei dati) e le operazioni ad alta intensità di calcolo (come l'elaborazione dei dati).
Automatizza i nuovi tentativi di esecuzione delle attività spiega come riprovare automaticamente le attività di un job dopo tutti gli errori o dopo errori specifici. I nuovi tentativi automatici possono contribuire a ridurre le difficoltà 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.
Limita i tempi di esecuzione utilizzando i timeout spiega come limitare il tempo di esecuzione consentito per un task o un eseguibile. Evitando tempi di esecuzione eccessivi, potresti ridurre costi e ritardi imprevisti.
Migliora l'ottenibilità delle risorse:
Migliora l'ottenibilità delle risorse spiega cos'è l'ottenibilità delle risorse e fornisce suggerimenti su come migliorarla quando crei ed esegui i job.
Garantisci la disponibilità delle risorse utilizzando le prenotazioni delle VM spiega come configurare un job che può essere eseguito su VM prenotate. L'utilizzo di VM prenotate può aiutarti a ridurre al minimo il tempo di pianificazione di un job, evitare errori di disponibilità delle risorse e ottimizzare i costi.
Migliora l'ottenibilità utilizzando la flessibilità delle istanze spiega come consentire l'esecuzione di un job su più tipi di macchine che specifichi e che puoi classificare. L'utilizzo della flessibilità delle istanze potrebbe contribuire ad aumentare il parallelismo, ritardare il prerilascio delle VM spot e prevenire errori di disponibilità delle risorse.
Riduci la latenza:
Colloca le VM per ridurre la latenza spiega come ridurre la latenza di rete tra le VM di un job richiedendo che le VM siano posizionate 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.
Utilizza lo streaming di immagini spiega come migliorare il tempo di avvio dei job trasmettendo in streaming le immagini container da Artifact Registry.
Utilizza servizi aggiuntivi per creare ed eseguire job:
Orchestra i job utilizzando Workflows spiega come utilizzare Workflows per eseguire le attività di un job in un ordine definito utilizzando la sintassi di Workflows.
Orchestra i job utilizzando Nextflow spiega come eseguire un job batch tramite una pipeline Nextflow, che puoi utilizzare per orchestrare i workflow di bioinformatica.
Orchestra i job utilizzando dsub spiega come eseguire un job batch tramite una pipeline
dsub, che puoi utilizzare per orchestrare i workflow di elaborazione batch sui servizi Google Cloud .Crea ed esegui job Batch utilizzando Terraform e Cloud Scheduler spiega come incorporare i job Batch in Terraform. Terraform consente di eseguire il provisioning e gestire l'infrastruttura specificando lo stato preferito nei file di configurazione, che possono essere trattati come codice e archiviati in sistemi di controllo della versione come GitHub.
Passaggi successivi
Scopri i concetti di base della creazione dei job:
(Facoltativo) Crea ed esegui un job di esempio.