Questa pagina descrive i problemi noti che potresti riscontrare durante l'utilizzo di Batch.
Se hai bisogno di ulteriore assistenza per l'utilizzo di Batch, consulta la documentazione relativa alla risoluzione dei problemi o richiedi assistenza.
Pub/Sub potrebbe non inviare notifiche per gli stati intermedi durante le modifiche rapide
Pub/Sub potrebbe non inviare notifiche per tutti gli stati intermedi quando un
job o un'attività cambia molto rapidamente. Ad esempio, supponiamo che lo stato di un'attività cambi rapidamente da ASSIGNED a RUNNING e poi a FAILED. In questo
scenario, potresti non ricevere una notifica che ti avvisa che l'attività ha raggiunto lo stato
RUNNING.
Per risolvere questo problema, ti consigliamo di visualizzare gli eventi di stato anziché le notifiche Pub/Sub quando vuoi visualizzare la cronologia completa dello stato di un job o di un'attività.
Per ulteriori informazioni sulle notifiche Pub/Sub, consulta Monitorare lo stato del job utilizzando le notifiche Pub/Sub e BigQuery.
I log dei timeout non indicano se è stato superato il timeout dell'attività o del runnable
Quando un job non viene eseguito a causa del superamento di un timeout, i log associati al job non indicano se l'errore è stato causato dal timeout dell'attività pertinente o da quello del runnable pertinente.
Per risolvere il problema, imposta valori di timeout diversi per attività e runnable. Dopodiché, puoi identificare se un errore è stato causato dal superamento del timeout dell'attività o del runnable pertinente utilizzando la seguente procedura:
Identifica l'attività, il runnable e l'ora di un errore di timeout superato.
Trova un log che menzioni il codice di uscita exceeded-timeout,
50005. Questo log ha untextPayloadsimile al seguente messaggio:Task task/JOB_UID-group0-TASK_INDEX/0/0 runnable RUNNABLE_INDEX...exitCode 50005
Da questo log, registra
TASK_INDEXcome attività non riuscita,RUNNABLE_INDEXcome eseguibile non riuscito e il valoretimestampdel log come ora dell'errore di timeout superato.
Identifica l'ora di inizio dell'attività non riuscita.
Trova l'evento di stato che menziona il seguente messaggio:
Task state is updated from ASSIGNED to RUNNING
Da questo evento di stato, registra il campo
eventTimecome ora di inizio dell'attività non riuscita.
Calcola il tempo di esecuzione totale dell'attività non riuscita, \({failedTaskRunTime}\), utilizzando la seguente formula:
\[{failedTaskRunTime}={failureTime}-{failedTaskStartTime}\]
Sostituisci i seguenti valori:
- \({failureTime}\): l'ora dell'errore di timeout superato.
- \({failedTaskStartTime}\): l'ora di inizio dell'attività non riuscita.
Identifica il timeout superato:
Se \({failedTaskRunTime}\) corrisponde al timeout configurato per l'attività non riuscita, il timeout di quest'ultima è stato superato e ha causato l'errore.
In caso contrario, il timeout configurato per il runnable non riuscito è stato superato e ha causato l'errore.
I job che utilizzano le prenotazioni potrebbero subire ritardi o essere impediti
Quando provi a creare ed eseguire un job che utilizza le prenotazioni di Compute Engine, Batch potrebbe ritardare o impedire erroneamente l'esecuzione del job. In particolare, Batch richiede che i progetti dispongano di quote di risorse Compute Engine sufficienti anche quando queste quote di risorse vengono utilizzate da prenotazioni non consumate.
Scopri di più su questo problema:
- Se vuoi saperne di più su come e quando questo problema influisce sui job, consulta Identificare e comprendere questo problema.
- Per scoprire come prevenire o risolvere il problema, consulta Soluzione alternativa al problema.
Identificare e comprendere il problema
Questo problema non è indicato da alcun messaggio di errore specifico. Questo problema può verificarsi nelle seguenti circostanze:
Se il tuo progetto riserva tutte le risorse per le quali è prevista una quota, questo problema impedisce l'esecuzione di qualsiasi job che specifichi queste risorse.
Ad esempio, supponiamo che il tuo progetto abbia quanto segue:
- Una quota massima di 16 GPU H100.
- Una prenotazione per un singolo progetto non utilizzata per 2 VM
a3-highgpu-8g, che riserva un totale di 16 GPU H100.
In questo scenario, questo problema impedisce al tuo progetto di pianificare ed eseguire qualsiasi job configurato correttamente per utilizzare una delle GPU H100 riservate.
Se il tuo progetto riserva alcune delle risorse per le quali ha una quota, questo problema potrebbe impedire o ritardare i job che specificano queste risorse.
Ad esempio, supponiamo che il tuo progetto abbia quanto segue:
- Una quota massima di 16 GPU H100.
- Una prenotazione per un singolo progetto non utilizzata per 1 VM
a3-highgpu-8g, che riserva un totale di 8 GPU H100. - Una VM
a3-highgpu-8gconfigurata per non utilizzare prenotazioni e che viene eliminata e ricreata occasionalmente. Questa VM utilizza 8 GPU H100 non riservate quando esiste.
In questo scenario, questo problema consente al tuo progetto di pianificare e avviare l'esecuzione di qualsiasi job configurato correttamente per utilizzare una qualsiasi delle GPU H100 riservate quando la VM
a3-highgpu-8gnon esiste.
Soluzione alternativa
Per risolvere questo problema per un job, aggiungi un'etichetta con il nome goog-batch-skip-quota-check e il valore true al campo labels a livello di job.
Questa etichetta fa sì che Batch salti la verifica
delle quote di risorse del tuo progetto prima di tentare di creare un job.
Ad esempio, per prevenire o risolvere questo problema per un job di script di base che può utilizzare le prenotazioni, crea ed esegui un job con la seguente configurazione JSON:
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"script": {
"text": "echo Hello world from task ${BATCH_TASK_INDEX}"
}
}
]
},
"taskCount": 3
}
],
"allocationPolicy": {
"instances": [
{
VM_RESOURCES
}
],
},
"labels": {
"goog-batch-skip-quota-check": "true"
},
"logsPolicy": {
"destination": "CLOUD_LOGGING"
}
}
Sostituisci VM_RESOURCES con le risorse VM che
corrispondono alla prenotazione che vuoi che il job utilizzi.
Per ulteriori istruzioni, consulta Crea ed esegui un job che può utilizzare le VM riservate e Definisci etichette personalizzate per il job.
I job potrebbero non riuscire quando vengono specificate immagini del sistema operativo VM Compute Engine (o personalizzate) con kernel obsoleti
Un job potrebbe non riuscire se specifica un'immagine sistema operativo VM Compute Engine che non ha l'ultima versione kernel. Questo problema interessa anche le immagini personalizzate basate sulle immagini del sistema operativo delle VM Compute Engine. Tieni presente questo problema se hai un job che non va a buon fine in modo imprevisto e specifica un'immagine sistema operativo VM Compute Engine o un'immagine personalizzata simile. Sebbene questo problema possa verificarsi per qualsiasi immagine Compute Engine (anche l'ultima versione) in qualsiasi momento, abbiamo osservato che si verifica principalmente per le immagini Compute Engine Debian.
Scopri di più su questo problema:
- Se vuoi saperne di più su come e quando questo problema influisce sui job, consulta Identificare e comprendere questo problema.
- Per scoprire come prevenire o risolvere il problema, consulta Soluzione alternativa al problema.
Identificare e comprendere il problema
Questo problema è causato da una versione kernel obsoleta nell'immagine sistema operativo della VM, che causa il riavvio della VM. Quando un job specifica un'immagine del sistema operativo VM che non proviene da Batch o non è basata su un'immagine Batch, Batch installa i pacchetti richiesti sulle VM del job dopo l'avvio. I pacchetti richiesti possono variare per lavori diversi e cambiare nel tempo e potrebbero richiedere che l'immagine del sistema operativo della VM abbia la versione kernel più recente. Questo problema si verifica quando l'aggiornamento della versione kernel richiede il riavvio della VM, il che causa l'installazione del pacchetto e l'errore del job.
Questo problema può verificarsi in qualsiasi momento, anche se utilizzi l'ultima versione di un'immagine Compute Engine. Se un sistema operativo è stato aggiornato di recente, soprattutto per
aggiornamenti imprevedibili come hotfix (aggiornamenti urgenti per vulnerabilità o
problemi critici), le immagini del sistema operativo VM di Compute Engine potrebbero non essere
ancora in grado di reagire alle modifiche. Ad esempio, abbiamo osservato che, per il sistema operativo Debian, i pacchetti con prefissi linux-headers- possono essere rimossi in modo imprevedibile dal kernel tramite hotfix.
Per identificare questo problema, ti consigliamo di
visualizzare i log del job per
verificare la presenza di errori di installazione relativi all'immagine del sistema operativo della VM. Ad esempio, se il tuo job utilizza un'immagine Compute Engine Debian o un'immagine personalizzata simile, ti consigliamo di verificare la presenza di errori relativi all'installazione dei pacchetti linux-headers- specificando la seguente query:
labels.job_uid="JOB_UID" AND severity="ERROR" AND textPayload:("failed" "apt" "install" "linux-headers-")
Sostituisci JOB_UID con l'ID univoco (UID) del job.
Per ottenere l'UID di un job, descrivi il job.
Se questa query restituisce risultati, questo problema potrebbe influire sul tuo job.
Soluzione alternativa
Per prevenire o risolvere il problema, ti consigliamo di procedere nel seguente modo:
Se possibile, utilizza immagini batch o immagini personalizzate basate su immagini batch, che non sono interessate da questo problema.
Prova l'ultima versione dell'immagine Compute Engine che preferisci. In genere, le versioni più recenti delle immagini Compute Engine hanno più probabilità di avere la versione kernel più recente rispetto alle versioni precedenti.
Scegli una delle seguenti opzioni:
Prova un altro sistema operativo o crea un'immagine personalizzata. Ad esempio, se l'ultima versione di Debian 12 non funziona, puoi provare a creare un'immagine personalizzata da una VM di Compute Engine che esegue Debian 12 e che hai aggiornato per utilizzare l'ultima versione kernel.
Se il job non va a buon fine a causa di errori relativi all'installazione dei pacchetti
linux-headers-, puoi provare a utilizzare l'immagine del sistema operativo VM con pacchettilinux-headers-obsoleti. Per consentire i pacchettilinux-headers-obsoleti, aggiungi un'etichetta con il nomegoog-batch-allow-insecure-linux-headers-installatione il valoretrueal campolabelsa livello di job.Ad esempio, per consentire pacchetti
linux-headers-obsoleti per un job di script di base che specifica un'immagine del sistema operativo VM, crea ed esegui un job con la seguente configurazione JSON:{ "taskGroups": [ { "taskSpec": { "runnables": [ { "script": { "text": "echo Hello world from task ${BATCH_TASK_INDEX}" } } ] }, "taskCount": 3 } ], "allocationPolicy": { "instances": [ { "policy": { "bootDisk": { "image": "VM_OS_IMAGE_URI" } } } ] }, "labels": { "goog-batch-allow-insecure-linux-headers-installation": "true" }, "logsPolicy": { "destination": "CLOUD_LOGGING" } }Sostituisci
VM_OS_IMAGE_URIcon l'URI dell'immagine del sistema operativo della VM che vuoi utilizzare.Per ulteriori istruzioni, vedi Definisci etichette personalizzate per il job e Specifica l'immagine del sistema operativo della VM per un job.
Per ulteriori informazioni sulle immagini del sistema operativo VM, vedi Panoramica dell'ambiente del sistema operativo per le VM di un job.
I job che utilizzano GPU e immagini OS VM con kernel obsoleti potrebbero non riuscire solo durante l'installazione automatica dei driver
Questo problema è strettamente correlato al precedente, I job potrebbero non riuscire quando si specificano immagini del sistema operativo VM di Compute Engine (o personalizzate) con kernel obsoleti. In particolare, i job che specificano un'immagine del sistema operativo VM Compute Engine (o personalizzata) senza il kernel più recente e utilizzano GPU potrebbero non riuscire solo se tenti di installare automaticamente i driver GPU. Per questi job, potresti risolvere gli errori anche semplicemente installando manualmente i driver GPU.
Per ulteriori informazioni su questo problema e su come risolverlo, vedi I job potrebbero non riuscire quando vengono specificate immagini del sistema operativo VM Compute Engine (o personalizzate) con kernel obsoleti. Per saperne di più sulle GPU, consulta Crea ed esegui un job che utilizza le GPU.