Se riscontri problemi con l'esecuzione del job Dataflow con le GPU, segui questi passaggi:
- Segui il flusso di lavoro in Best practice per l'uso di GPU Dataflow per assicurarti che la pipeline sia configurata correttamente.
- Conferma che il tuo job Dataflow utilizza GPU. Consulta la sezione Verificare il job Dataflow in "Eseguire una pipeline con GPU".
- Esegui il debug con una VM autonoma.
- Se il problema persiste, segui gli altri passaggi per la risoluzione dei problemi riportati in questa pagina.
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 tuo container personalizzato su una VM autonoma con GPU creando un VM di Compute Engine che esegue GPU in 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
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
Lancia il tuo container personalizzato.
I container dell'SDK Apache Beam utilizzano il punto di contatto
/opt/apache/beam/boot
. Per per scopi di debug, puoi avviare il contenitore manualmente con un entrypoint: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 container possano accedere alle 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 esamina 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 si avviano
Se il job è bloccato e i worker Dataflow non vengono mai avviati dati, è probabile che tu abbia un problema relativo all'utilizzo di un container con Dataflow. Per maggiori dettagli, leggi 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 secondaria dell'interprete Python
nell'immagine container sia la stessa che utilizzi per avviare
una pipeline o un blocco note personalizzato. In caso di mancata corrispondenza, potresti visualizzare errori come
SystemError: unknown opcode
con una traccia dello stack che coinvolgeapache_beam/internal/pickler.py
. - Se utilizzi Apache Beam SDK 2.29.0 o versioni precedenti,
pip
deve essere accessibile sull'immagine in/usr/local/bin/pip
.
Ti consigliamo di ridurre al minimo le personalizzazioni la prima volta che utilizzi un'immagine personalizzata. Utilizza l'esempio personalizzato immagini container fornite negli esempi in 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
ZONE_RESOURCE_POOL_EXHAUSTED
o ZONE_RESOURCE_POOL_EXHAUSTED_WITH_DETAILS
, puoi seguire questi passaggi:
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.
Job non riuscito in fase di runtime
Se il job non riesce durante il runtime, verifica la presenza di errori di esaurimento della memoria (OOM) sul 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 saperne di più, consulta GPU e parallelismo dei worker.
Nessun utilizzo della GPU
Se la pipeline viene eseguita correttamente, ma le GPU non vengono utilizzate, verifica quanto segue:
- Le librerie NVIDIA installate nell'immagine container soddisfano i requisiti di il codice utente della pipeline e le librerie che utilizza.
- Le librerie NVIDIA installate nelle immagini container sono accessibili come condivise librerie.
Se i dispositivi non sono disponibili, è possibile che tu stia utilizzando un software non compatibile configurazione. Ad esempio, se utilizzi TensorFlow, verifica di avere una combinazione compatibile di TensorFlow, della versione cuDNN e della versione di CUDA Toolkit.
Per verificare la configurazione dell'immagine, valuta la possibilità di eseguire una pipeline semplice che per controllare che le GPU siano disponibili e accessibili ai worker.
Passaggi successivi
- Guida introduttiva: esecuzione di GPU su Container-Optimized OS.
- Strumenti per Container-Optimized OS.
- Ambiti di accesso dell'account di servizio.