Fehlerbehebung bei Dataflow-GPU-Jobs

Wenn beim Ausführen Ihres Dataflow-Jobs mit GPUs Probleme auftreten, gehen Sie so vor:

  1. Folgen Sie dem Workflow unter Best Practices für die Arbeit mit Dataflow-GPUs, um sicherzustellen, dass Ihre Pipeline ordnungsgemäß konfiguriert ist.
  2. Prüfen Sie, ob Ihr Dataflow-Job GPUs verwendet. Weitere Informationen finden Sie unter Dataflow-Job prüfen in „Pipeline mit GPUs ausführen“.
  3. Fehler mit einer eigenständigen VM beheben
  4. Wenn das Problem weiterhin besteht, folgen Sie den restlichen Schritten der Fehlerbehebung auf dieser Seite.

Fehler mit einer eigenständigen VM beheben

Während Sie ein Container-Image entwerfen und weiterentwickeln, das für Sie geeignet ist, kann es schneller sein, die Feedbackschleife zu verringern. Testen Sie dazu das Container-Image auf einer eigenständigen VM.

Sie können Ihren benutzerdefinierten Container auf einer eigenständigen VM mit GPUs debuggen, indem Sie eine Compute Engine-VM erstellen, auf der GPUs unter Container-Optimized OS ausgeführt, Treiber installiert und Ihr Container folgendermaßen gestartet wird.

  1. Erstellen Sie eine VM-Instanz.

    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. Stellen Sie mit ssh eine Verbindung zur VM her.

    gcloud compute ssh INSTANCE_NAME --project "PROJECT"
    
  3. Installieren Sie die GPU-Treiber. Nachdem Sie mit ssh eine Verbindung zur VM hergestellt haben, führen Sie auf der VM die folgenden Befehle aus:

    # 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. Starten Sie Ihren benutzerdefinierten Container.

    Apache Beam SDK-Container verwenden den Einstiegspunkt /opt/apache/beam/boot. Für die Fehlerbehebung können Sie Ihren Container manuell mit einem anderen Einstiegspunkt starten:

    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
    

    Ersetzen Sie IMAGE durch den Artifact Registry-Pfad des Docker-Images.

  5. Prüfen Sie, ob die im Container installierten GPU-Bibliotheken auf GPU-Geräte zugreifen können.

    Wenn Sie TensorFlow verwenden, können Sie verfügbare Geräte im Python-Interpreter folgendermaßen drucken:

    >>> import tensorflow as tf
    >>> print(tf.config.list_physical_devices("GPU"))
    

    Wenn Sie PyTorch verwenden, können Sie die verfügbaren Geräte im Python-Interpreter so prüfen:

    >>> import torch
    >>> print(torch.cuda.is_available())
    >>> print(torch.cuda.device_count())
    >>> print(torch.cuda.get_device_name(0))
    

Für eine Iteration in Ihrer Pipeline können Sie sie in Direct Runner starten. In dieser Umgebung können Sie auch Pipelines in Dataflow Runner starten.

Worker starten nicht

Wenn Ihr Job hängen bleibt und die Dataflow-Worker nie mit der Verarbeitung von Daten beginnen, besteht wahrscheinlich ein Problem mit der Verwendung eines benutzerdefinierten Containers mit Dataflow. Weitere Informationen finden Sie im Leitfaden zur Fehlerbehebung für benutzerdefinierte Container.

Prüfen Sie als Python-Nutzer, ob die folgenden Bedingungen erfüllt sind:

  • Die Nebenversion des Python-Interpreters in Ihrem Container-Image ist dieselbe Version, die Sie auch beim Starten der Pipeline verwenden. Wenn es eine Abweichung gibt, werden möglicherweise Fehler wie SystemError: unknown opcode mit einem Stacktrace mit apache_beam/internal/pickler.py angezeigt.
  • Wenn Sie das Apache Beam SDK 2.29.0 oder niedriger verwenden, muss pip für das Image in /usr/local/bin/pip zugänglich sein.

Wir empfehlen, die Anpassungen der Arbeitskonfiguration zu minimieren, wenn Sie zum ersten Mal ein benutzerdefiniertes Image verwenden. Verwenden Sie die benutzerdefinierten Container-Images, die in den Beispielen auf dieser Seite bereitgestellt sind. Achten Sie darauf, dass Sie mit diesem Container-Image eine einfache Dataflow-Pipeline ausführen können, ohne GPUs anzufordern. Entwickeln Sie dann die Lösung weiter.

Achten Sie darauf, dass die Worker über genügend Speicherplatz verfügen, um das Container-Image herunterzuladen. Passen Sie die Laufwerksgröße bei Bedarf an. Der Download großer Images dauert länger, was die Worker-Startzeit verlängert.

Job schlägt beim Start sofort fehl

Wenn der Fehler ZONE_RESOURCE_POOL_EXHAUSTED oder ZONE_RESOURCE_POOL_EXHAUSTED_WITH_DETAILS auftritt, können Sie so vorgehen:

  • Geben Sie die Worker-Zone nicht an, damit Dataflow die optimale Zone für Sie auswählt.

  • Starten Sie die Pipeline in einer anderen Zone oder mit einem anderen Beschleunigertyp.

Job schlägt zur Laufzeit fehl

Wenn der Job zur Laufzeit fehlschlägt, schließen Sie OOM-Fehler (Out-of-Memory) auf dem Worker-Computer und der GPU aus. GPU-OOM-Fehler können als cudaErrorMemoryAllocation out of memory-Fehler in Worker-Logs sichtbar werden. Wenn Sie TensorFlow verwenden, achten Sie darauf, dass Sie nur einen TensorFlow-Prozess verwenden, um auf ein GPU-Gerät zuzugreifen. Weitere Informationen finden Sie unter GPUs und Worker-Parallelität.

Keine GPU-Nutzung

Wenn die Pipeline erfolgreich ausgeführt wird, aber GPUs nicht verwendet werden, überprüfen Sie Folgendes:

  • Im Container-Image installierte NVIDIA-Bibliotheken entsprechen den Anforderungen des Pipeline-Nutzercodes und der verwendeten Bibliotheken.
  • Installierte NVIDIA-Bibliotheken in Container-Images sind als gemeinsam genutzte Bibliotheken zugänglich.

Wenn die Geräte nicht verfügbar sind, verwenden Sie möglicherweise eine inkompatible Softwarekonfiguration. Wenn Sie beispielsweise TensorFlow verwenden, achten Sie darauf, dass Sie eine kompatible Kombination von TensorFlow, cuDNN und CUDA Toolkit haben.

Zum Prüfen der Image-Konfiguration sollten Sie eine einfache Pipeline ausführen, die überprüft, ob GPUs verfügbar und für die Worker zugänglich sind.

Nächste Schritte