Se riscontri problemi durante 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 Verifica il job Dataflow in "Esegui una pipeline con le 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.
Esegui 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 ti impediscono di eseguire il debug con una VM autonoma, puoi eseguire il debug utilizzando Dataflow.
Eseguire il debug con una VM autonoma
Durante la progettazione e l'iterazione di un'immagine container adatta alle tue esigenze, può essere più veloce 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 Compute Engine che esegue GPU su Container-Optimized OS, installando i driver e avviando il container 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 SDK Apache Beam utilizzano il punto di ingresso
/opt/apache/beam/boot
. A scopo di debug, puoi avviare manualmente il container 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 utilizzi TensorFlow, puoi stampare i dispositivi disponibili nell'interprete Python con il seguente comando:
>>> import tensorflow as tf >>> print(tf.config.list_physical_devices("GPU"))
Se utilizzi PyTorch, puoi ispezionare i dispositivi disponibili nell'interprete Python con il seguente comando:
>>> 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 la presenza di GPU e poi esegui la pipeline su Dataflow. Il seguente esempio mostra l'aspetto del codice per 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 è in grado di accedere alle GPU. Per identificare il codice problematico, inserisci gradualmente esempi sempre più grandi nel codice della pipeline, eseguendo la pipeline dopo ogni modifica.
Se la pipeline non rileva 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 container personalizzato con Dataflow. Per maggiori dettagli, leggi la guida alla risoluzione dei problemi relativi ai container personalizzati.
Se utilizzi Python, verifica che siano soddisfatte le seguenti condizioni:
- La versione secondaria dell'interprete Python
nell'immagine container è la stessa che utilizzi quando avvii la
pipeline. Se non c'è 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 al minimo le personalizzazioni la prima volta che utilizzi un'immagine personalizzata. Utilizza le immagini container personalizzate di esempio fornite negli esempi in questa pagina. Assicurati di poter eseguire una semplice pipeline Dataflow con questa immagine container senza richiedere GPU. Poi, itera la soluzione.
Verifica che i worker dispongano di spazio su disco sufficiente per scaricare l'immagine del container. Regola le dimensioni del disco, se necessario. Le immagini di grandi dimensioni richiedono più tempo per il download, il che aumenta il tempo di avvio del worker.
Il job non riesce a essere eseguito 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 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.
Configura un modello di provisioning, ad esempio l'avvio flessibile. Per saperne di più, leggi Configurare un modello di provisioning.
Il job non riesce in fase di runtime
Se il job non viene completato in fase di runtime, verifica la presenza di errori dovuti all'esaurimento della memoria (OOM) sulla macchina worker e sulla GPU. Gli errori OOM della GPU potrebbero 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ù, leggi GPU e parallelismo dei worker.
Nessun utilizzo di GPU
Se il job non sembra utilizzare le GPU, segui i passaggi descritti nella sezione Esegui il debug del job di questo documento per verificare se le GPU sono disponibili con l'immagine Docker.
Se le GPU sono disponibili ma non vengono utilizzate, il problema riguarda probabilmente il codice della pipeline. Per eseguire il debug del codice della pipeline, inizia con una pipeline semplice che utilizza correttamente le GPU, quindi aggiungi gradualmente codice alla pipeline, testandola ogni volta che aggiungi qualcosa. Per saperne di più, consulta la sezione Debug su Dataflow di questo documento.
Se la pipeline non rileva le GPU, verifica quanto segue:
- Le librerie NVIDIA installate nell'immagine container 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, è possibile che tu stia utilizzando una configurazione software incompatibile. Per verificare la configurazione dell'immagine, esegui una pipeline semplice che controlla 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 i seguenti passaggi per la risoluzione dei problemi:
- Verifica di avere una combinazione compatibile di TensorFlow, versione di cuDNN e versione del toolkit CUDA. Per ulteriori informazioni, consulta la sezione Configurazioni di build testate nella documentazione di TensorFlow.
- Se possibile, esegui l'upgrade alle ultime versioni compatibili di TensorFlow e CUDA.
- Esamina i problemi noti di TensorFlow e CUDA per verificare se un problema noto sta causando problemi nella tua pipeline. Ad esempio, il seguente problema noto potrebbe impedire a TensorFlow di rilevare le GPU: TF 2.17.0 RC0 Fails to work with GPUs.
Passaggi successivi
- Per iniziare: esecuzione di GPU su Container-Optimized OS.
- Container-Optimized OS toolbox.
- Ambiti di accesso del service account.