Se riscontri problemi con l'esecuzione del job Dataflow con le GPU, segui questi passaggi:
- Segui il flusso di lavoro descritto in Best practice per l'utilizzo delle GPU Dataflow per assicurarti che la pipeline sia configurata correttamente.
- Verifica che il job Dataflow utilizzi le GPU. Consulta la sezione Verificare il job Dataflow in "Eseguire una pipeline con GPU".
- Esegui il debug del job con una VM autonoma o utilizzando Dataflow.
- Se il problema persiste, segui gli altri passaggi per la risoluzione dei problemi riportati in questa pagina.
Eseguire il debug del job
Se possibile, esegui il debug del job con una VM autonoma, perché il debug con una VM autonoma è in genere più veloce. Tuttavia, se i criteri dell'organizzazione impediscono di eseguire il debug con una VM autonoma, puoi eseguire il debug utilizzando Dataflow.
Eseguire il debug con una VM autonoma
Mentre progetti e esegui l'iterazione di un'immagine container che fa al caso tuo, puoi ridurre più rapidamente il ciclo di feedback provando l'immagine container su una VM autonoma.
Puoi eseguire il debug del contenitore personalizzato su una VM autonoma con GPU creando una VM Compute Engine che esegue GPU su un Container-Optimized OS, installando i driver e avviando il contenitore come segue.
Crea un'istanza VM.
gcloud compute instances create INSTANCE_NAME \ --project "PROJECT" \ --image-family cos-stable \ --image-project=cos-cloud \ --zone=us-central1-f \ --accelerator type=nvidia-tesla-t4,count=1 \ --maintenance-policy TERMINATE \ --restart-on-failure \ --boot-disk-size=200G \ --scopes=cloud-platform
Utilizza
ssh
per connetterti alla VM.gcloud compute ssh INSTANCE_NAME --project "PROJECT"
Installa i driver della GPU. Dopo aver eseguito la connessione alla VM utilizzando
ssh
, esegui i seguenti comandi sulla VM:# Run these commands on the virtual machine cos-extensions install gpu sudo mount --bind /var/lib/nvidia /var/lib/nvidia sudo mount -o remount,exec /var/lib/nvidia /var/lib/nvidia/bin/nvidia-smi
Avvia il container personalizzato.
I container dell'SDK Apache Beam utilizzano il punto di contatto
/opt/apache/beam/boot
. Per scopi di debugging, puoi avviare il container manualmente con un punto di contatto diverso:docker-credential-gcr configure-docker docker run --rm \ -it \ --entrypoint=/bin/bash \ --volume /var/lib/nvidia/lib64:/usr/local/nvidia/lib64 \ --volume /var/lib/nvidia/bin:/usr/local/nvidia/bin \ --privileged \ IMAGE
Sostituisci IMAGE con il percorso di Artifact Registry per l'immagine Docker.
Verifica che le librerie GPU installate nel contenitore possano accedere ai dispositivi GPU.
Se utilizzi TensorFlow, puoi stampare i dispositivi disponibili nell'interprete Python con quanto segue:
>>> import tensorflow as tf >>> print(tf.config.list_physical_devices("GPU"))
Se utilizzi PyTorch, puoi esaminare i dispositivi disponibili nell'interprete Python con quanto segue:
>>> import torch >>> print(torch.cuda.is_available()) >>> print(torch.cuda.device_count()) >>> print(torch.cuda.get_device_name(0))
Per eseguire l'iterazione della pipeline, puoi avviarla su Direct Runner. Puoi anche avviare pipeline su Dataflow Runner da questo ambiente.
Eseguire il debug utilizzando Dataflow
Se i vincoli organizzativi ti impediscono di eseguire il debug su una VM autonoma, puoi eseguire il debug utilizzando Dataflow.
Semplifica la pipeline in modo che rilevi solo se sono presenti GPU, quindi eseguila su Dataflow. L'esempio seguente mostra come potrebbe essere il codice di questa pipeline:
def check_if_gpus_present(element):
import torch
import tensorflow as tf
tensorflow_detects_gpus = tf.config.list_physical_devices("GPU")
torch_detects_gpus = torch.cuda.is_available()
if tensorflow_detects_gpus and torch_detects_gpus:
return element
if tensorflow_detects_gpus:
raise Exception('PyTorch failed to detect GPUs with your setup')
if torch_detects_gpus:
raise Exception('Tensorflow failed to detect GPUs with your setup')
raise Exception('Both Tensorflow and PyTorch failed to detect GPUs with your setup')
with beam.Pipeline() as p:
_ = (p | beam.Create([1,2,3]) # Create a PCollection of the prompts.
| beam.Map(check_if_gpus_present)
)
Se la pipeline ha esito positivo, il codice può accedere alle GPU. Per identificare il codice del problema, inserisci gradualmente esempi progressivamente più grandi nel codice della pipeline, eseguendo la pipeline dopo ogni modifica.
Se la pipeline non riesce a rilevare le GPU, segui i passaggi descritti nella sezione Nessun utilizzo della GPU di questo documento.
I worker non si avviano
Se il job è bloccato e i worker Dataflow non iniziano mai a elaborare i dati, è probabile che tu abbia un problema relativo all'utilizzo di un contenitore personalizzato con Dataflow. Per ulteriori dettagli, consulta la guida alla risoluzione dei problemi relativi ai container personalizzati.
Se sei un utente Python, verifica che siano soddisfatte le seguenti condizioni:
- La versione minore dell'interprete Python
nella tua immagine container è la stessa che utilizzi per avviare la
pipeline. In caso di mancata corrispondenza, potresti visualizzare errori come
SystemError: unknown opcode
con una analisi dello stack che coinvolgeapache_beam/internal/pickler.py
. - Se utilizzi l'SDK Apache Beam 2.29.0 o versioni precedenti,
pip
deve essere accessibile nell'immagine in/usr/local/bin/pip
.
Ti consigliamo di ridurre le personalizzazioni a una configurazione minima di lavoro la prima volta che utilizzi un'immagine personalizzata. Utilizza le immagini container personalizzate di esempio fornite negli esempi di questa pagina. Assicurati di poter eseguire una semplice pipeline Dataflow con questa immagine del contenitore senza richiedere GPU. Poi, esegui l'iterazione della soluzione.
Verifica che i worker dispongano di spazio su disco sufficiente per scaricare l'immagine del contenitore. Se necessario, regola le dimensioni del disco. Il download delle immagini di grandi dimensioni richiede più tempo, il che aumenta il tempo di avvio del worker.
Il job non riesce immediatamente all'avvio
Se riscontri gli errori ZONE_RESOURCE_POOL_EXHAUSTED
o ZONE_RESOURCE_POOL_EXHAUSTED_WITH_DETAILS
, puoi procedere nel seguente modo:
Non specificare la zona del worker in modo che Dataflow selezioni la zona ottimale per te.
Avvia la pipeline in una zona diversa o con un tipo di acceleratore diverso.
Il job non riesce in fase di esecuzione
Se il job non riesce in fase di esecuzione, controlla se sono presenti errori di esaurimento della memoria (OOM) sulla macchina worker e sulla GPU. Gli errori OOM della GPU possono manifestarsi come errori cudaErrorMemoryAllocation out of memory
nei log dei worker. Se utilizzi
TensorFlow, verifica di utilizzare un solo
processo TensorFlow per accedere a un dispositivo GPU.
Per ulteriori informazioni, leggi l'articolo GPU e parallelismo dei worker.
Nessun utilizzo della GPU
Se il tuo job non sembra utilizzare le GPU, segui i passaggi descritti nella sezione Eseguire il debug del job di questo documento per verificare se le GPU sono disponibili con la tua immagine Docker.
Se le GPU sono disponibili, ma non vengono utilizzate, il problema è probabilmente correlato al codice della pipeline. Per eseguire il debug del codice della pipeline, inizia con una pipeline semplice che utilizzi correttamente le GPU, quindi aggiungi gradualmente il codice alla pipeline, testando la pipeline con ogni nuova aggiunta. Per ulteriori informazioni, consulta la sezione Debug in Dataflow di questo documento.
Se la pipeline non riesce a rilevare le GPU, verifica quanto segue:
- Le librerie NVIDIA installate nell'immagine del contenitore corrispondono ai requisiti del codice utente della pipeline e delle librerie che utilizza.
- Le librerie NVIDIA installate nelle immagini container sono accessibili come librerie condivise.
Se i dispositivi non sono disponibili, potresti utilizzare una configurazione software non compatibile. Per verificare la configurazione dell'immagine, esegui una semplice pipeline che controlli solo che le GPU siano disponibili e accessibili ai worker.
Risolvere i problemi di TensorFlow
Se PyTorch rileva le GPU nella pipeline, ma TensorFlow no, prova a svolgere i seguenti passaggi per la risoluzione dei problemi:
- Verifica di avere una combinazione compatibile di TensorFlow, la versione di cuDNN e la versione di CUDA Toolkit. Per ulteriori informazioni, consulta Configurazioni di build testate nella documentazione di TensorFlow.
- Se possibile, esegui l'upgrade alle versioni più recenti di TensorFlow e CUDA compatibili.
- Esamina i problemi noti per TensorFlow e CUDA per verificare se un problema noto sta causando problemi nella pipeline. Ad esempio, il seguente problema noto potrebbe impedire a TensorFlow di rilevare le GPU: TF 2.17.0 RC0 non funziona con le GPU.
Passaggi successivi
- Guida introduttiva: esecuzione di GPU su Container-Optimized OS.
- Cassetta degli attrezzi di Container-Optimized OS.
- Ambiti di accesso dell'account di servizio.