Auf dieser Seite wird erläutert, wie eine Apache Beam-Pipeline in Dataflow mit TPUs ausgeführt wird. Für Jobs, die TPUs verwenden, fallen Gebühren an, wie in der Dataflow-Preisseite beschrieben .
Weitere Informationen zur Verwendung von TPUs mit Dataflow finden Sie unter Dataflow-Unterstützung für TPUs.
Optional: Bestimmte Reservierung für die Verwendung von Beschleunigern vornehmen
Sie können TPUs zwar nach Bedarf verwenden, wir empfehlen jedoch dringend, Dataflow-TPUs mit speziell ausgerichteten Google Cloud Reservierungen zu verwenden. So haben Sie Zugriff auf verfügbare Beschleuniger und schnelle Worker-Startzeiten. Für Pipelines, die eine TPU-Reservierung nutzen, ist kein zusätzliches TPU-Kontingent erforderlich.
Wenn Sie keine Reservierung vornehmen und TPUs nach Bedarf verwenden möchten, stellen Sie das TPU-Kontingent bereit, bevor Sie die Pipeline ausführen.
Optional: TPU-Kontingent bereitstellen
Sie können TPUs nach Bedarf oder mit einer Reservierung verwenden. Wenn Sie TPUs nach Bedarf verwenden möchten, müssen Sie das TPU-Kontingent vorher bereitstellen. Wenn Sie eine speziell ausgerichtete Reservierung verwenden, können Sie diesen Abschnitt überspringen.
So prüfen Sie das Limit und die aktuelle Nutzung Ihres Compute Engine API-Kontingents für TPUs, wenn Sie TPUs nach Bedarf ohne Reservierung verwenden möchten:
Console
Rufen Sie in der Google Cloud Console die Seite Kontingente auf.
Gehen Sie im Feld Filter so vor:
Wählen Sie in der folgenden Tabelle die Eigenschaft des Kontingents basierend auf der TPU-Version und dem Maschinentyp aus und kopieren Sie sie. Wenn Sie beispielsweise On-Demand-TPU v5e-Knoten erstellen möchten, deren Maschinentyp mit
ct5lp-beginnt, geben SieName: TPU v5 Lite PodSlice chipsein.TPU-Version, Maschinentyp beginnt mit Eigenschaft und Name des Kontingents für On-Demand-Instanzen TPU v5e,
ct5lp-Name:
TPU v5 Lite PodSlice chipsTPU v5p,
ct5p-Name:
TPU v5p chipsTPU v6e,
ct6e-Dimensions (e.g. location):
tpu_family:CT6EWählen Sie die Eigenschaft Dimensionen (z.B. Standort) aus und geben Sie
region:gefolgt vom Namen der Region ein, in der Sie die Pipeline starten möchten. Geben Sie beispielsweiseregion:us-west4ein, wenn Sie die Zoneus-west4-averwenden möchten. Das TPU-Kontingent ist regional, d. h. alle Zonen innerhalb derselben Region nutzen dasselbe TPU-Kontingent.
Benutzerdefiniertes Container-Image konfigurieren
Wenn Sie mit TPUs in Dataflow-Pipelines interagieren möchten, müssen Sie Software bereitstellen, die in der Pipeline-Laufzeitumgebung auf XLA-Geräten ausgeführt werden kann. Dazu müssen Sie TPU-Bibliotheken basierend auf den Anforderungen der Pipeline installieren und Umgebungsvariablen basierend auf dem verwendeten TPU-Gerät konfigurieren.
Wenn Sie das Container-Image anpassen möchten, installieren Sie Apache Beam in einem Standard-Basis-Image , das die erforderlichen TPU-Bibliotheken enthält. Alternativ können Sie die TPU-Software in den Images installieren, die mit Apache Beam SDK-Releases veröffentlicht wurden.
Verwenden Sie die Pipeline-Option sdk_container_image, um ein benutzerdefiniertes Container-Image bereitzustellen. Weitere Informationen finden Sie unter Benutzerdefinierte Container in
Dataflow verwenden.
Wenn Sie einen TPU-Beschleuniger verwenden, müssen Sie die folgenden Umgebungsvariablen im Container-Image festlegen.
ENV TPU_SKIP_MDS_QUERY=1 # Don't query metadata
ENV TPU_HOST_BOUNDS=1,1,1 # There's only one host
ENV TPU_WORKER_HOSTNAMES=localhost
ENV TPU_WORKER_ID=0 # Always 0 for single-host TPUs
Je nach verwendetem Beschleuniger müssen auch die Variablen in der folgenden Tabelle festgelegt werden.
| Typ | Topologie | Erforderlicher Dataflow-worker_machine_type |
Zusätzliche Umgebungsvariablen |
|---|---|---|---|
| tpu-v5-lite-podslice | 1x1 | ct5lp-hightpu-1t | TPU_ACCELERATOR_TYPE=v5litepod-1 |
| tpu-v5-lite-podslice | 2x2 | ct5lp-hightpu-4t | TPU_ACCELERATOR_TYPE=v5litepod-4 |
| tpu-v5-lite-podslice | 2x4 | ct5lp-hightpu-8t | TPU_ACCELERATOR_TYPE=v5litepod-8 |
| tpu-v6e-slice | 1x1 | ct6e-standard-1t | TPU_ACCELERATOR_TYPE=v6e-1 |
| tpu-v6e-slice | 2x2 | ct6e-standard-4t | TPU_ACCELERATOR_TYPE=v6e-4 |
| tpu-v6e-slice | 2x4 | ct6e-standard-8t | TPU_ACCELERATOR_TYPE=v6e-8 |
| tpu-v5p-slice | 2x2x1 | ct5p-hightpu-4t | TPU_ACCELERATOR_TYPE=v5p-8 |
Ein Beispiel für ein Dockerfile für das benutzerdefinierte Container-Image:
FROM python:3.11-slim
COPY --from=apache/beam_python3.11_sdk:2.66.0 /opt/apache/beam /opt/apache/beam
# Configure the environment to access TPU device
ENV TPU_SKIP_MDS_QUERY=1
ENV TPU_HOST_BOUNDS=1,1,1
ENV TPU_WORKER_HOSTNAMES=localhost
ENV TPU_WORKER_ID=0
# Configure the environment for the chosen accelerator.
# Adjust according to the accelerator you use.
ENV TPU_ACCELERATOR_TYPE=v5litepod-1
ENV TPU_CHIPS_PER_HOST_BOUNDS=1,1,1
# Install TPU software stack.
RUN pip install jax[tpu] apache-beam[gcp]==2.66.0 -f https://storage.googleapis.com/jax-releases/libtpu_releases.html
ENTRYPOINT ["/opt/apache/beam/boot"]
Job mit TPUs ausführen
Folgendes ist für die Ausführung eines Dataflow-Jobs mit TPUs zu beachten:
- Da TPU-Container groß sein können, sollten Sie die Standardgröße des Bootlaufwerks auf mindestens 50 Gigabyte oder eine geeignete Größe erhöhen, die für Ihr Container-Image erforderlich ist. Verwenden Sie dazu die Pipeline-Option
--disk_size_gb. - Beschränken Sie die Parallelität innerhalb des Workers.
TPUs und Parallelität der Worker
In der Standardkonfiguration starten Dataflow-Python-Pipelines einen Apache Beam SDK-Prozess pro VM Kern. TPU-Maschinentypen haben eine große Anzahl von vCPU-Kernen, aber nur ein Prozess kann Berechnungen auf einem TPU-Gerät ausführen. Außerdem kann ein TPU-Gerät von einem Prozess für die gesamte Lebensdauer des Prozesses reserviert werden. Daher müssen Sie die Parallelität innerhalb des Workers einschränken, wenn Sie eine Dataflow-TPU-Pipeline ausführen. So beschränken Sie die Parallelität der Worker:
- Wenn Sie Inferenz auf einem Modell ausführen möchten, verwenden Sie die Beam-API
RunInference. Weitere Informationen finden Sie unter Large Language Model Inferenz in Beam. - Wenn Sie die Beam
RunInferenceAPI nicht verwenden können, verwenden Sie die gemeinsam genutzten Beam-Objekte für mehrere Prozesse , um bestimmte Vorgänge auf einen einzelnen Prozess zu beschränken. - Wenn Sie die vorherigen Empfehlungen nicht verwenden können und nur einen Python-Prozess pro
Worker starten möchten, legen Sie die
--experiments=no_use_multiple_sdk_containersPipeline-Option fest. - Sie können die Anzahl der Threads weiter reduzieren, indem Sie die Pipeline-Option
--number_of_worker_harness_threadsverwenden, wenn dadurch eine bessere Leistung erzielt wird.
In der folgenden Tabelle sind die gesamten Compute-Ressourcen pro Worker für jede TPU-Konfiguration aufgeführt.
| TPU-Typ | Topologie | Maschinentyp | TPU-Chips | vCPU | RAM (GB) |
|---|---|---|---|---|---|
| tpu-v5-lite-podslice | 1x1 | ct5lp-hightpu-1t | 1 | 24 | 48 |
| tpu-v5-lite-podslice | 2x2 | ct5lp-hightpu-4t | 4 | 112 | 192 |
| tpu-v5-lite-podslice | 2x4 | ct5lp-hightpu-8t | 8 | 224 | 384 |
| tpu-v6e-slice | 1x1 | ct6e-standard-1t | 1 | 44 | 176 |
| tpu-v6e-slice | 2x2 | ct6e-standard-4t | 4 | 180 | 720 |
| tpu-v6e-slice | 2x4 | ct6e-standard-8t | 8 | 360 | 1440 |
| tpu-v5p-slice | 2x2x1 | ct5p-hightpu-4t | 4 | 208 | 448 |
Pipeline mit TPUs ausführen
Führen Sie den folgenden Befehl aus, um einen Dataflow-Job mit TPUs auszuführen.
python PIPELINE \
--runner "DataflowRunner" \
--project "PROJECT" \
--temp_location "gs://BUCKET/tmp" \
--region "REGION" \
--dataflow_service_options "worker_accelerator=type:TPU_TYPE;topology:TPU_TOPOLOGY" \
--worker_machine_type "MACHINE_TYPE" \
--disk_size_gb "DISK_SIZE_GB" \
--sdk_container_image "IMAGE" \
--number_of_worker_harness_threads NUMBER_OF_THREADS
Ersetzen Sie Folgendes:
- PIPELINE: Ihre Quellcode-Pipelinedatei
- PROJECT: Der Google Cloud Projektname.
- BUCKET: Der Cloud Storage-Bucket
- REGION: Eine Dataflow-Region, z. B.
us-central1 - TPU_TYPE: Ein unterstützter TPU-Typ, z. B.
tpu-v5-lite-podsliceEine vollständige Liste der Typen und Topologien finden Sie unter Unterstützte TPU-Beschleuniger. - TPU_TOPOLOGY: Die TPU-Topologie, z. B.
1x1 - MACHINE_TYPE: Der entsprechende Maschinentyp, z. B.
ct5lp-hightpu-1t. - DISK_SIZE_GB: Die Größe des Bootlaufwerks für jede Worker-VM, z. B.
100. - IMAGE: Der Artifact Registry-Pfad für das Docker-Image
- NUMBER_OF_THREADS: Optional. Die Anzahl der Worker-Harness-Threads.
Dataflow-Job prüfen
So prüfen Sie, ob der Job Worker-VMs mit TPUs verwendet:
Rufen Sie in der Google Cloud Console die Seite Dataflow > Jobs auf.
Wählen Sie einen Job aus.
Klicken Sie auf den Tab Jobmesswerte.
Prüfen Sie im Bereich Autoscaling, ob mindestens eine Aktuelle Worker-VM vorhanden ist.
Prüfen Sie im Seitenbereich Jobinformationen, ob
machine_typemitctbeginnt. Beispiel:ct6e-standard-1t. Dies weist auf die TPU-Nutzung hin.
Fehlerbehebung bei Dataflow-Jobs
Wenn bei der Ausführung Ihres Dataflow-Jobs mit TPUs Probleme auftreten, siehe Fehlerbehebung bei Dataflow-TPU Jobs.
Nächste Schritte
- Probieren Sie die Kurzanleitungen aus: Dataflow auf TPUs ausführen.
- Weitere Informationen zur TPU-Unterstützung in Dataflow
- Informationen zur Inferenz mit großen Modellen in Beam