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 la sezione 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 descritti in questa pagina.
Esegui il debug del job
Se possibile, esegui il debug del job con una VM autonoma, perché in genere è più veloce. Tuttavia, se le policy dell'organizzazione ti impediscono di eseguire il debug con una VM autonoma, puoi farlo utilizzando Dataflow.
Esegui 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 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-platformUtilizza
sshper connetterti alla VM.gcloud compute ssh INSTANCE_NAME --project "PROJECT"Installa i driver 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-smiAvvia il container personalizzato.
I container SDK Apache Beam utilizzano il punto di ingresso
/opt/apache/beam/boot. Per il debug, puoi avviare manualmente il container con un punto di ingresso diverso:docker-credential-gcr configure-docker -include-artifact-registry 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 \ IMAGESostituisci IMAGE con il percorso di 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 le pipeline su Dataflow Runner da questo ambiente.
Esegui il debug utilizzando Dataflow
Se i vincoli dell'organizzazione ti impediscono di eseguire il debug su una VM autonoma, puoi farlo utilizzando Dataflow.
Semplifica la pipeline in modo che rilevi solo se sono presenti GPU, quindi esegui la pipeline su Dataflow. L'esempio seguente 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 viene eseguita correttamente, il codice è in grado di accedere alle GPU. Per identificare il codice problematico, inserisci gradualmente esempi sempre più grandi nel codice della pipeline, eseguendola 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 vengono avviati
Se il job è bloccato e i worker Dataflow non iniziano mai a elaborare i dati, è probabile che si tratti di un problema correlato all'utilizzo di un container personalizzato con Dataflow. Per maggiori dettagli, consulta 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 le versioni non corrispondono, potresti visualizzare errori come
SystemError: unknown opcodecon un'analisi dello stack che coinvolgeapache_beam/internal/pickler.py. - Se utilizzi l'SDK Apache Beam 2.29.0 o versioni precedenti,
pipdeve essere accessibile nell'immagine in/usr/local/bin/pip.
Ti consigliamo di ridurre al minimo 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 in questa pagina. Assicurati di poter eseguire una pipeline Dataflow semplice con questa immagine container senza richiedere GPU. Quindi, esegui l'iterazione della soluzione.
Verifica che i worker abbiano spazio su disco sufficiente per scaricare l'immagine container. Se necessario, modifica le dimensioni del disco. Il download delle immagini di grandi dimensioni richiede più tempo, il che aumenta il tempo di avvio dei worker.
Il job non viene eseguito immediatamente all'avvio
Se riscontri gli errori
ZONE_RESOURCE_POOL_EXHAUSTED
o ZONE_RESOURCE_POOL_EXHAUSTED_WITH_DETAILS, puoi seguire questi passaggi:
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 maggiori informazioni, consulta Configurare un modello di provisioning.
Il job non viene eseguito durante il runtime
Se il job non viene eseguito durante il runtime, controlla se sono presenti errori di memoria insufficiente (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 maggiori informazioni, consulta GPU e parallelismo dei worker.
Nessun utilizzo della GPU
Se sembra che il job non utilizzi 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, è probabile che il problema riguardi 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 dopo ogni nuova aggiunta. Per maggiori informazioni, consulta la sezione Esegui il 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, potresti utilizzare 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.
Risolvi i problemi di TensorFlow
Se PyTorch rileva le GPU nella pipeline, ma TensorFlow no, prova a seguire questi passaggi per la risoluzione dei problemi:
- Verifica di avere una combinazione compatibile di TensorFlow, versione cuDNN e versione del toolkit CUDA. Per maggiori informazioni, consulta Configurazioni di build testate nella documentazione di TensorFlow.
- Se possibile, esegui l'upgrade alle versioni più recenti compatibili di TensorFlow e CUDA.
- Esamina i problemi noti di TensorFlow e CUDA per verificare se un problema noto causa 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.
- Toolbox di Container-Optimized OS.
- Ambiti di accesso del service account.