Risolvere i problemi del job GPU Dataflow

Se riscontri problemi durante l'esecuzione del job Dataflow con le GPU, segui questi passaggi:

  1. Segui il flusso di lavoro in Best practice per l'utilizzo di GPU Dataflow per assicurarti che la pipeline sia configurata correttamente.
  2. Verifica che il job Dataflow utilizzi GPU. Consulta Verificare il job di Dataflow in "Esegui una pipeline con GPU".
  3. Eseguire il debug con una VM autonoma.
  4. 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.

  1. 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
    
  2. Usa ssh per connetterti alla VM.

    gcloud compute ssh INSTANCE_NAME --project "PROJECT"
    
  3. 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
    
  4. 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.

  5. 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 interessa apache_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