Questo documento illustra la procedura di esecuzione e le opzioni di creazione dei job. I job batch ti consentono di eseguire carichi di lavoro di elaborazione batch su Google Cloud. Per informazioni sui componenti di un job e sui prerequisiti per l'utilizzo di Batch, consulta la Guida introduttiva all'utilizzo di Batch.
Come funzionano la creazione e l'esecuzione dei job
Per utilizzare Batch, crei un job che specifica il tuo carico di lavoro e i relativi requisiti, che poi viene eseguito automaticamente da Batch.
I dettagli sul funzionamento della creazione e dell'esecuzione dei job sono descritti nelle sezioni seguenti:
- Ciclo di vita dei job: comprendi gli stati che un job attraversa dalla creazione all'eliminazione.
- Coda e pianificazione dei job: comprendi i fattori che influiscono sul tempo necessario per l'avvio di un job.
- Esecuzione dei job: scopri come le attività di un job vengono eseguite sulle sue risorse durante l'esecuzione.
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 in Batch, segui la seguente procedura di base:
- Crea un job:definisci il carico di lavoro da eseguire specificando i componenti eseguibili, le attività e gli eventuali altri requisiti 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 relativi al job: al termine della creazione, il job viene inserito in coda, pianificato ed eseguito automaticamente sulle risorse specificate. Puoi visualizzare i dettagli di un job creato o di una delle relative attività per vedere lo stato corrente. Se necessario, puoi annullare un job (Anteprima) per interromperlo o impedirne l'esecuzione. Dopo che un job è in esecuzione o è stato completato, puoi anche monitorarlo e analizzarlo utilizzando i log. Se un job non riesce, puoi risolverlo utilizzando messaggi di errore, eventi di stato o log per diagnosticare il problema prima di ricrearlo.
- 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 completamento. Prima di questa data, 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 memorizzate in altri servizi Google Cloud non sono interessate dall'eliminazione del job e hanno criteri di conservazione separati. 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:
- In coda (
QUEUED
): la richiesta di job è stata accettata ed è in attesa nella coda. Il job rimane in coda finché le risorse richieste non sono disponibili e i job precedenti non sono stati valutati. - Pianificato (
SCHEDULED
): il job è stato selezionato dalla coda per iniziare a essere eseguito e le risorse vengono allocate. In esecuzione (
RUNNING
): le risorse per il job sono state create correttamente e le relative attività possono iniziare a essere eseguite.Quando un job è in esecuzione, ciascuna delle sue attività passa per i seguenti stati:
- In attesa (
PENDING
): l'attività è in attesa di una VM su cui essere eseguita. - Assegnato (
ASSIGNED
): all'attività è stata assegnata una VM su cui eseguirla. - In esecuzione (
RUNNING
): l'attività è in esecuzione su una VM. Un'attività termina in uno dei seguenti stati:
Completata (
SUCCEEDED
): l'attività è riuscita perché ciascuno dei suoi elementi eseguibili ha soddisfatto una delle seguenti condizioni:- L'eseguibile ha esito positivo (ha restituito un codice di uscita di zero).
- L'eseguibile non è riuscito (ha restituito un codice di uscita diverso da zero), ma era un eseguibile non critico (hai attivato il
ignoreExitStatus
campo dell'eseguibile). - L'elemento eseguibile non è stato completato, ma era eseguibile in background (hai abilitato il campo
background
dell'esecuzione).
Non riuscita (
FAILED
): l'attività non è riuscita e l'esecuzione è stata interrotta perché almeno un file eseguibile non ha soddisfatto 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:
- Completata (
SUCCEEDED
): il job è stato completato perché tutte le relative attività sono andate a buon fine. - Non riuscita (
FAILED
): il job non è riuscito e l'esecuzione è stata interrotta perché almeno una delle attività non è riuscita. - Annullato (
CANCELLED
): un utente ha annullato il job (Anteprima) prima che andasse a buon fine o fallisse.
- Completata (
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 riportati nella documentazione di Batch, che in genere sono molto piccoli e utilizzano risorse minime, potrebbero essere completati in pochi minuti.
Nello specifico, 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:eventuali prerequisiti che devi soddisfare prima della pianificazione del job.
Per impostazione predefinita, un job non ha prerequisiti. Facoltativamente, puoi specificare che un job non può essere pianificato finché uno o più job esistenti non sono stati completati o non sono stati generati errori. Per ulteriori informazioni, consulta Pianifica job dipendenti (Anteprima).
Priorità job:la priorità di un job rispetto alle priorità degli altri job del progetto.
Facoltativamente, puoi specificare la priorità di un job includendo il flag
--priority
per la CLI gcloud 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ù elevata può consentire a un job di essere eseguito prima dei job con priorità inferiore 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 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 con un errore di disponibilità della zona.
In secondo luogo, è più probabile che un job venga ritardato o non riesca se una delle sue risorse richieste ha una capacità ridotta rispetto alla domanda attuale a causa di errori di disponibilità delle risorse. Di conseguenza, il tuo job potrebbe essere eseguito prima se hai bisogno di meno risorse più comuni e non ne limiti l'esecuzione in nessuna zona di una regione.
Per ulteriori informazioni sulle risorse per un job, consulta la sezione Esecuzione dei job di questo documento. Per ulteriori informazioni sulle località che puoi specificare per un job di Batch e le relative risorse, consulta la pagina Località.
Quote e limiti:le soglie del progetto per le richieste e le risorse Google Cloud.
Un job non può essere eseguito se supera un limite o la quota del progetto per una delle richieste o delle risorse richieste. In questo caso, Batch potrebbe ritardare un job e riprovarlo in un secondo momento o non riuscire a completare il job e mostrare un errore correlato.
Puoi contribuire a evitare ritardi ed errori per il tuo job creando job conformi a tutti i limiti pertinenti e assicurandoti che il tuo progetto disponga di una quota sufficiente. Per ulteriori informazioni, consulta Quote e limiti dei 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 criterio di pianificazione (schedulingPolicy
),
che 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. La quantità 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 job in questo documento. - In ordine (
IN_ORDER
): le attività vengono eseguite una alla volta in ordine crescente dell'indice.
Risorse job
Ogni job batch viene eseguito su un gruppo di istanze gestite a livello di regione (MIG), 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 CPU (in particolare le CPU virtuali (vCPU)) e la memoria, che influiscono sulle prestazioni del job, nonché di un disco di avvio che memorizza un'immagine del sistema operativo (OS) e le istruzioni per l'esecuzione del job.
Durante il tempo di esecuzione di un job, Batch crea e cancella automaticamente le risorse che soddisfano le tue specifiche. Quando crei un job, ne configuri le risorse specificando quanto segue:
Risorse di calcolo per attività:a meno che i valori predefiniti non siano sufficienti, devi specificare le risorse di calcolo (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 delle 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, nonché risorse aggiuntive come GPU e volumi di archiviazione, utilizzando i campi delle norme relative alle risorse VM (
instances[].policy
) o il campo alternativoinstances[].instanceTemplate
. Se non definisci questi campi, Batch seleziona le 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 in base ai 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 avrà una VM ed eseguirà 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 ritiene che sia più veloce eseguire un job con meno risorse rispetto ad attendere altre 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 attività parallele massime per job (
parallelism
).Se è definito il campo delle attività parallele massime per VM (
taskCountPerNode
), viene utilizzato questo valore.In caso contrario, 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, determinato dal tipo di macchina delle VM del tuo 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
L'articolo Creare ed eseguire un job di base illustra le nozioni di base, tra cui come definire un file eseguibile utilizzando uno script o un'immagine container e come configurare le variabili di ambiente predefinite e personalizzate.
Dopo aver compreso le nozioni di base per la creazione di job, ti consigliamo di creare un job che utilizzi una o più delle seguenti opzioni di configurazione aggiuntive:
Controllare l'accesso per un job:
L'articolo Controllare l'accesso per un job utilizzando un account di servizio personalizzato descrive come specificare l'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, per impostazione predefinita i job utilizzano l'account di servizio predefinito di Compute Engine.
La panoramica della rete fornisce una panoramica di quando e come puoi personalizzare la configurazione di rete per un job, inclusa la specifica della rete del job, il blocco delle connessioni esterne e la protezione di dati e risorse utilizzando i Controlli di servizio VPC.
L'articolo Proteggere 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:
L'articolo Configurare la comunicazione delle attività utilizzando una libreria MPI descrive 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 è costituito da carichi di lavoro di computing ad alte prestazioni (HPC) strettamente collegati.
Personalizza le risorse su cui viene eseguito un job:
L'articolo Definire le risorse di un job utilizzando un modello di istanza VM descrive come specificare un modello di VM Compute Engine per definire le risorse di un job quando lo crei. Si tratta di un'alternativa per specificare direttamente le risorse di un job utilizzando il campo
instances[].policy
.L'articolo 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 GPU includono l'elaborazione di dati o carichi di lavoro di machine learning (ML) intensivi.
L'articolo 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, nuove unità SSD locali, bucket Cloud Storage esistenti e un file system di rete (NFS) esistente, ad esempio una condivisione file Filestore.
La panoramica dell'ambiente del sistema operativo VM fornisce una panoramica di quando e come puoi personalizzare l'ambiente del sistema operativo (OS) della VM per un job, incluse l'immagine del sistema operativo VM e i dischi di avvio del job.
Ottimizza vari aspetti di un job:
Migliora il monitoraggio e l'analisi:
L'articolo Scrivere log delle attività spiega come configurare i runnable di un job per scrivere log delle attività. La scrittura di log delle attività ti consente di visualizzare informazioni personalizzate in Cloud Logging, il che può contribuire a semplificare la analisi e la risoluzione dei problemi dei job.
L'articolo Configurare eventi di stato personalizzati descrive come configurare gli eventi di stato personalizzati per i componenti eseguibili di un job. Gli eventi di stato personalizzati ti consentono di descrivere gli eventi importanti che si verificano per i componenti eseguibili e vengono visualizzati quando visualizzi la cronologia degli eventi di stato di un job, il che può contribuire a semplificare l'analisi e la risoluzione dei problemi dei job.
L'articolo Attivare le notifiche sullo stato descrive come configurare un job in modo che invii notifiche Pub/Sub relative al suo stato, che puoi eventualmente archiviare e consultare 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.
L'articolo Attivare le metriche di Ops Agent descrive come configurare un job per installare automaticamente l'agente operativo. Ops Agent raccoglie metriche aggiuntive sul rendimento e sull'utilizzo delle risorse di un job. Per ulteriori informazioni su come visualizzare e utilizzare le metriche delle risorse, consulta Monitorare e ottimizzare le risorse dei job visualizzando le metriche.
Pianifica job con dipendenze (Anteprima) spiega come specificare un job che non viene eseguito finché uno o più job con dipendenze esistenti non sono riusciti o non sono andati a buon fine. Se hai un carico di lavoro 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 richiesta (come la preparazione dei dati) e le operazioni ad alta intensità di calcolo (come l'elaborazione dei dati).
L'articolo Automatizzare i tentativi di attività spiega come riprovare automaticamente le attività di un job dopo tutti o alcuni errori specificati. I tentativi ripetuti automatici possono contribuire a ridurre la complessità della risoluzione dei problemi e il tempo di esecuzione complessivo richiesto per i job che presentano 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 prerilasciati in qualsiasi momento.
L'articolo Limitare i tempi di esecuzione utilizzando i timeout spiega come limitare il tempo di esecuzione consentito per un'attività o un eseguibile. Se eviti tempi di esecuzione eccessivi, potresti ridurre costi e ritardi imprevisti.
L'articolo Garantire la disponibilità delle risorse utilizzando le prenotazioni delle VM illustra come configurare un job che può essere eseguito su VM prenotate. L'utilizzo di VM riservate può aiutarti a ridurre al minimo il tempo di pianificazione di un job, a evitare errori di disponibilità delle risorse e a ottimizzare i costi.
Riduci la latenza:
L'articolo Colloca le VM in modo da ridurre la latenza descrive come ridurre la latenza di rete tra le VM di un job richiedendo che le VM siano fisicamente vicine l'una all'altra. Questo vantaggio in termini di prestazioni può essere particolarmente utile per i job che hanno frequenti comunicazioni di rete tra le VM, ad esempio le attività che comunicano utilizzando le librerie MPI.
L'articolo Utilizzare il flusso di immagini spiega come migliorare il tempo di avvio dei job tramite lo streaming delle immagini dei contenitori da Artifact Registry.
Utilizza servizi aggiuntivi per creare ed eseguire job:
L'articolo Orchestrare i job utilizzando Workflows descrive come utilizzare Workflows per eseguire le attività di un job in un ordine definito utilizzando la sintassi di Workflows.
L'articolo Orchestrare i job utilizzando Nextflow spiega come eseguire un job Batch tramite una pipeline Nextflow, che puoi utilizzare per orchestrare i workflow di bioinformatica.
L'articolo Orchestrare i job utilizzando dsub spiega come eseguire un job Batch tramite una pipeline
dsub
, che puoi utilizzare per orchestrare i flussi di lavoro di elaborazione batch sui servizi Google Cloud.L'articolo Creare ed eseguire job Batch utilizzando Terraform e Cloud Scheduler spiega come incorporare i job Batch in Terraform. Terraform ti 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 le nozioni di base sulla creazione di job:
(Facoltativo) Crea ed esegui un job di esempio.