Se riscontri problemi durante l'esecuzione del job Dataflow con le GPU, segui questi passaggi:
- Segui il flusso di lavoro in Best practice per l'utilizzo di GPU Dataflow per assicurarti che la pipeline sia configurata correttamente.
- Verifica che il job Dataflow utilizzi GPU. Consulta Verificare il job di Dataflow in "Esegui una pipeline con GPU".
- Eseguire il debug con una VM autonoma.
- Se il problema persiste, segui gli altri passaggi della procedura di risoluzione dei problemi in questa pagina.
Debug con una VM autonoma
Mentre progetti ed esegui l'iterazione di un'immagine container adatta alle tue esigenze, può essere più rapido ridurre il ciclo di feedback provando l'immagine container su una VM autonoma.
Puoi eseguire il debug del tuo container personalizzato su una VM autonoma con GPU creando una VM di Compute Engine che esegue GPU su Container-Optimized OS, installando i driver e avviando il container nel seguente modo.
Creare 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
Usa
ssh
per connetterti alla VM.gcloud compute ssh INSTANCE_NAME --project "PROJECT"
Installa i driver GPU. Dopo aver eseguito la connessione alla VM utilizzando
ssh
, esegui sulla VM i comandi seguenti:# 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 ingresso
/opt/apache/beam/boot
. Ai fini del debug, puoi avviare il contenitore manualmente con un punto di ingresso 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 Artifact Registry per l'immagine Docker.
Verifica che le librerie GPU installate nel container possano accedere ai dispositivi GPU.
Se usi TensorFlow, puoi stampare i dispositivi disponibili nell'interprete Python con quanto segue:
>>> import tensorflow as tf >>> print(tf.config.list_physical_devices("GPU"))
Se usi 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.
I worker non vengono avviati
Se il job è bloccato e i worker Dataflow non iniziano mai a elaborare dati, è probabile che tu abbia un problema relativo all'utilizzo di un container personalizzato con Dataflow. Per ulteriori dettagli, consulta la guida alla risoluzione dei problemi dei container personalizzati.
Se sei un utente Python, verifica che siano soddisfatte le seguenti condizioni:
- La versione secondaria dell'interprete Python nell'immagine container è la stessa che utilizzi per avviare la pipeline. In caso di mancata corrispondenza, potresti visualizzare errori come
SystemError: unknown opcode
con un'analisi dello stack che interessaapache_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 di lavoro minima la prima volta che utilizzi un'immagine personalizzata. Utilizza le immagini container personalizzate di esempio fornite negli esempi su questa pagina. Assicurati di poter eseguire una pipeline Dataflow semplice con questa immagine container senza richiedere GPU. Quindi, ripeti la soluzione.
Verifica che i worker dispongano di spazio su disco sufficiente per scaricare l'immagine container. Regola le dimensioni del disco, se necessario. Il download delle immagini di grandi dimensioni richiede più tempo, il che aumenta i tempi di avvio dei worker.
Il job non riesce immediatamente all'avvio
Se si verificano gli errori ZONE_RESOURCE_POOL_EXHAUSTED
o ZONE_RESOURCE_POOL_EXHAUSTED_WITH_DETAILS
, puoi procedere nel seguente modo:
Non specificare la zona 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 runtime
Se il job non riesce in fase di runtime, verifica la presenza di errori di esaurimento della memoria (OOM) sul computer worker e sulla GPU. Gli errori OOM della GPU possono manifestarsi come errori cudaErrorMemoryAllocation out of memory
nei log del worker. Se utilizzi TensorFlow, verifica di utilizzare un solo processo TensorFlow per accedere a un dispositivo GPU.
Per saperne di più, consulta la pagina GPU e parallelismo dei worker.
Nessun utilizzo GPU
Se la pipeline viene eseguita correttamente, ma non vengono utilizzate GPU, verifica quanto segue:
- Le librerie NVIDIA installate nell'immagine container soddisfano i 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, è possibile che la configurazione del software in uso non sia compatibile. Ad esempio, se utilizzi TensorFlow, verifica di avere una combinazione compatibile di TensorFlow, versione cuDNN e versione di CUDA Toolkit.
Per verificare la configurazione dell'immagine, valuta la possibilità di eseguire una pipeline semplice che controlli solo che le GPU siano disponibili e accessibili ai worker.
Passaggi successivi
- Per iniziare: esecuzione di GPU in un sistema operativo ottimizzato per container.
- Strumenti per il sistema operativo ottimizzato per i container.
- Ambiti di accesso agli account di servizio.