Wenn beim Ausführen Ihres Dataflow-Jobs mit TPUs Probleme auftreten, folgen Sie den folgenden Schritten zur Fehlerbehebung.
Fehlerbehebung bei Container-Images
Es kann hilfreich sein, Ihre Container- und TPU-Software auf einer eigenständigen VM zu debuggen. Sie können mit einer VM debuggen, die von einem GKE-Knotenpool erstellt wurde, oder auf einer laufenden Dataflow-Worker-VM.
Fehler mit einer eigenständigen VM beheben
Wenn Sie Ihren Container auf einer eigenständigen VM debuggen möchten, können Sie einen GKE-Knotenpool erstellen, der dieselbe TPU-VM für lokale Tests verwendet.
Wenn Sie beispielsweise einen GKE-Knotenpool mit einem TPU V5 Lite-Gerät in us-west1-c
erstellen möchten, sieht das so aus:
GKE-Cluster erstellen
gcloud container clusters create TPU_CLUSTER_NAME \ --project PROJECT_ID \ --release-channel=stable \ --scopes=cloud-platform \ --enable-ip-alias \ --location us-west1-c
Erstellen Sie einen GKE-Knotenpool.
gcloud container node-pools create TPU_NODE_POOL_NAME \ --project PROJECT_ID \ --location=us-west1-c \ --cluster=TPU_CLUSTER_NAME \ --node-locations=us-west1-c \ --machine-type=ct5lp-hightpu-1t \ --num-nodes=1 \ [ --reservation RESERVATION_NAME \ --reservation-affinity=specific ]
Suchen Sie in der GKE-Benutzeroberfläche oder mit dem folgenden Befehl nach dem VM-Namen des TPU-Knotens im Knotenpool.
gcloud compute instances list --filter='metadata.kube-labels:"cloud.google.com/gke-nodepool=TPU_NODEPOOL_NAME"'
Stellen Sie SSH eine Verbindung zu einer VM her, die vom GKE-Knotenpool erstellt wurde:
gcloud compute ssh --zone "us-west1-c" "VM_NAME" --project PROJECT_ID
Nachdem Sie eine Verbindung zu einer VM über SSH hergestellt haben, konfigurieren Sie Docker für die Artifact Registry, die Sie verwenden.
docker-credential-gcr configure-docker --registries=us-west1-docker.pkg.dev
Starten Sie dann einen Container mit dem verwendeten Image.
docker run --privileged --network=host -it --rm --entrypoint=/bin/bash IMAGE_NAME
Testen Sie im Container, ob auf TPUs zugegriffen werden kann.
Wenn Sie beispielsweise ein Bild haben, das PyTorch verwendet, um TPUs zu nutzen, öffnen Sie einen Python-Interpreter:
python3
Führen Sie dann eine Berechnung auf einem TPU-Gerät aus:
import torch import torch_xla.core.xla_model as xm dev = xm.xla_device() t1 = torch.randn(3,3,device=dev) t2 = torch.randn(3,3,device=dev) print(t1 + t2)
Beispielausgabe:
>>> tensor([[ 0.3355, -1.4628, -3.2610], >>> [-1.4656, 0.3196, -2.8766], >>> [ 0.8667, -1.5060, 0.7125]], device='xla:0')
Wenn die Berechnung fehlschlägt, ist Ihr Bild möglicherweise nicht richtig konfiguriert.
Möglicherweise müssen Sie beispielsweise die erforderlichen Umgebungsvariablen im Dockerfile des Images festlegen. Um dies zu bestätigen, wiederholen Sie die Berechnung, nachdem Sie die Umgebungsvariablen manuell wie folgt festgelegt haben:
export TPU_SKIP_MDS_QUERY=1 # Don't query metadata export TPU_HOST_BOUNDS=1,1,1 # There's only one host export TPU_CHIPS_PER_HOST_BOUNDS=1,1,1 # 1 chips per host export TPU_WORKER_HOSTNAMES=localhost export TPU_WORKER_ID=0 # Always 0 for single-host TPUs export TPU_ACCELERATOR_TYPE=v5litepod-1 # Since we use v5e 1x1 accelerator.
Wenn PyTorch- oder LibTPU-Abhängigkeiten fehlen, können Sie die Berechnung noch einmal versuchen, nachdem Sie sie mit dem folgenden Befehl installiert haben:
# Install PyTorch with TPU support pip install torch torch_xla[tpu] torchvision -f https://storage.googleapis.com/libtpu-releases/index.html
Fehlerbehebung mit einer Dataflow-VM
Alternativ können Sie während der Ausführung eines Jobs eine SSH-Verbindung zur Dataflow-Worker-VM-Instanz herstellen. Da Dataflow-Worker-VMs nach Abschluss der Pipeline heruntergefahren werden, müssen Sie die Laufzeit möglicherweise künstlich verlängern, indem Sie eine Berechnung durchführen, die über einen längeren Zeitraum wartet.
Da ein TPU-Gerät nicht von mehreren Prozessen gemeinsam genutzt werden kann, müssen Sie möglicherweise eine Pipeline ausführen, bei der keine Berechnungen auf einer TPU erfolgen.
Suchen Sie nach einer VM für den laufenden TPU-Job, indem Sie in der Google Cloud -Suchleiste der Console nach der Dataflow-Job-ID suchen oder den folgenden
gcloud
-Befehl verwenden:gcloud compute instances list --project PROJECT_ID --filter "STATUS='RUNNING' AND description ~ 'Created for Dataflow job: JOB_ID'"
Nachdem Sie über SSH eine Verbindung zu einer VM mit TPUs hergestellt haben, starten Sie einen Container aus dem verwendeten Image. Ein Beispiel finden Sie unter Fehler mit einer eigenständigen VM beheben.
Konfigurieren Sie im Container die TPU-Einstellungen neu und installieren Sie die erforderlichen Bibliotheken, um die Einrichtung zu testen. Ein Beispiel finden Sie unter Fehler mit einer eigenständigen VM beheben.
Worker starten nicht
Prüfen Sie vor der Fehlerbehebung, ob die folgenden Pipelineoptionen richtig eingestellt sind:
- die Option
--dataflow_service_option=worker_accelerator
- die Option
--worker_zone
- die Option
--machine_type
Prüfen Sie, ob in den Konsolenlogs angezeigt wird, dass Worker gestartet werden, der Job aber mit einer Meldung ähnlich der folgenden fehlschlägt:
Workflow failed. Causes: The Dataflow job appears to be stuck because no worker
activity has been seen in the last 25m.
Die Ursache dieser Probleme kann mit Kapazitäts- oder Worker-Startproblemen zusammenhängen.
Kapazität: Wenn Sie On-Demand-TPU-Kapazität oder eine Reservierung verwenden, die erschöpft ist, werden neue Pipelines möglicherweise erst gestartet, wenn Kapazität verfügbar ist. Wenn Sie eine Reservierung verwenden, können Sie die verbleibende Kapazität auf der Seite Compute Reservations (Compute-Reservierungen) in derGoogle Cloud -Konsole oder mit dem folgenden Befehl prüfen:
gcloud compute reservations describe RESERVATION_NAME --zone ZONE
Prüfen Sie, ob für Ihren Job Worker-VMs gestartet wurden. Wenn für Ihren Job ein Worker gestartet wird, geben Logger wie
worker
,worker_startup
,kubelet
und andere in der Regel eine Ausgabe aus. Außerdem sollte auf der Seite Job-Messwerte in der Google Cloud -Konsole die Anzahl der aktuellen Worker größer als null sein.Worker-Start: Prüfen Sie die
job-message
- undlauncher
-Logs. Wenn in Ihrer Pipeline Worker gestartet werden, diese aber nicht hochfahren können, haben Sie möglicherweise Fehler in Ihrem benutzerdefinierten Container.Festplattenspeicher: Prüfen Sie, ob für Ihren Job genügend Festplattenspeicher verfügbar ist. Verwenden Sie die Option
--disk_size_gb
, um den Speicherplatz zu erhöhen.
Job schlägt mit einem Fehler fehl
Wenn Ihr Job mit einem Fehler fehlschlägt, können Sie die folgenden Tipps zur Fehlerbehebung nutzen.
Start des Worker-Pools fehlgeschlagen
Wenn der folgende Fehler angezeigt wird, prüfen Sie, ob in Ihrer Pipeline --worker_zone
angegeben ist und ob die Zone mit der Zone für Ihre Reservierung übereinstimmt.
JOB_MESSAGE_ERROR: Startup of the worker pool in zone ZONE failed to bring up any of the desired 1 workers. [...] INVALID_FIELD_VALUE: Instance 'INSTANCE_NAME' creation failed: Invalid value for field 'resource.reservationAffinity': '{ "consumeReservationType": "SPECIFIC_ALLOCATION", "key": "compute.googleapis.com/RESERVATION_NAME...'. Specified reservations [RESERVATION_NAME] do not exist.
Verwaltete Instanzgruppen unterstützen keine Cloud TPUs
Wenn der folgende Fehler angezeigt wird, wenden Sie sich an Ihr Kontoteam, um zu prüfen, ob Ihr Projekt für die Verwendung von TPUs registriert wurde, oder melden Sie einen Fehler über den Google Issue Tracker.
apache_beam.runners.dataflow.dataflow_runner.DataflowRuntimeException: Dataflow pipeline failed. State: FAILED, Error: Workflow failed. Causes: One or more operations had an error [...]: [INVALID_FIELD_VALUE] 'Invalid value for field 'resource.instanceTemplate': Managed Instance Groups do not support Cloud TPUs. '.
Ungültiger Wert für das Feld
Wenn der folgende Fehler angezeigt wird, prüfen Sie, ob beim Aufrufen der Pipeline die Dataflow-Dienstoption worker_accelerator
festgelegt ist.
JOB_MESSAGE_ERROR: Workflow failed. Causes: One or more operations had an error: 'operation-[...]': [INVALID_FIELD_VALUE] 'Invalid value for field 'resource.instanceTemplate': 'projects/[...]-harness'. Regional Managed Instance Groups do not support Cloud TPUs.'
Gerät oder Ressource ist beschäftigt
Wenn der folgende Fehler angezeigt wird, führt ein Dataflow-Worker, der Ihre Pipeline verarbeitet, wahrscheinlich mehr als einen Prozess aus, der gleichzeitig auf die TPU zugreift. Dies wird nicht unterstützt. Weitere Informationen finden Sie unter TPUs und Worker-Parallelität.
RuntimeError: TPU initialization failed: open(/dev/vfio/0): Device or resource busy: Device or resource busy; Couldn't open iommu group /dev/vfio/0
Wenn der oben genannte Fehler beim Debuggen Ihrer Pipeline auf einer VM auftritt, können Sie den Prozess, der die TPU blockiert, mit den folgenden Befehlen untersuchen und beenden:
apt update ; apt install lsof
lsof -w /dev/vfio/0
kill -9 PROCESS_ID # to terminate the process.
Instanzen mit Gastbeschleunigern unterstützen keine Live-Migration
Wenn Sie den folgenden Fehler sehen, wurde die Pipeline wahrscheinlich mit einem explizit festgelegten Maschinentyp mit Beschleunigern gestartet, aber die Beschleunigerkonfiguration wurde nicht korrekt angegeben. Prüfen Sie, ob beim Aufrufen Ihrer Pipeline die Dataflow-Dienstoption worker_accelerator
festgelegt ist, und achten Sie darauf, dass der Optionsname keine Tippfehler enthält.
JOB_MESSAGE_ERROR: Startup of the worker pool in zone ZONE failed to bring up any of the desired 1 workers. [...] UNSUPPORTED_OPERATION: Instance INSTANCE_ID creation failed: Instances with guest accelerators do not support live migration.
Der Workflow wurde vom Dienst automatisch abgelehnt.
Die folgenden Fehler können auch auftreten, wenn einige der erforderlichen Pipelineoptionen fehlen oder falsch sind:
The workflow was automatically rejected by the service. The requested accelerator type tpu-v5-lite-podslice;topology:1x1 requires setting the worker machine type to ct5lp-hightpu-1t. Learn more at: https://cloud.google.com/dataflow/docs/guides/configure-worker-vm
Zeitüberschreitung beim Warten auf eine Aktualisierung durch den Worker
Wenn Sie Pipelines auf TPU-VMs mit vielen vCPUs starten und die Standardanzahl der Worker-Threads nicht reduzieren, kann es zu Fehlern wie den folgenden kommen:
Workflow failed. Causes WORK_ITEM failed. The job failed because a work item has failed 4 times. Root cause: Timed out waiting for an update from the worker.
Um diesen Fehler zu vermeiden, reduzieren Sie die Anzahl der Threads. Sie könnten beispielsweise Folgendes festlegen:
--number_of_worker_harness_threads=50
.
Keine TPU-Nutzung
Wenn Ihre Pipeline erfolgreich ausgeführt wird, aber keine TPU-Geräte verwendet werden oder nicht darauf zugegriffen werden kann, prüfen Sie, ob die von Ihnen verwendeten Frameworks wie JAX oder PyTorch auf die angeschlossenen Geräte zugreifen können. Informationen zum Beheben von Fehlern in Ihrem Container-Image auf einer einzelnen VM finden Sie unter Fehler mit einer eigenständigen VM beheben.