Cette page explique comment exécuter un pipeline Apache Beam sur Dataflow avec des TPU. Les tâches utilisant des TPU sont facturées comme indiqué sur la page des tarifs de Dataflow.
Pour en savoir plus sur l'utilisation des TPU avec Dataflow, consultez la page Compatibilité de Dataflow avec les TPU.
Facultatif : Effectuer une réservation spécifique pour utiliser des accélérateurs
Bien que vous puissiez utiliser des TPU à la demande, nous vous recommandons vivement d'utiliser des TPU Dataflow avec des réservations spécifiquement ciblées Google Cloud. Cela vous permet de vous assurer d'avoir accès aux accélérateurs disponibles et de bénéficier de temps de démarrage rapides des nœuds de calcul. Les pipelines qui consomment une réservation de TPU ne nécessitent pas de quota de TPU supplémentaire.
Si vous n'effectuez pas de réservation et choisissez d'utiliser des TPU à la demande, provisionnez un quota de TPU avant d'exécuter votre pipeline.
Facultatif : Provisionner un quota de TPU
Vous pouvez utiliser des TPU avec une capacité à la demande ou à l'aide d'une réservation. Si vous souhaitez utiliser des TPU à la demande, vous devez provisionner un quota de TPU au préalable. Si vous utilisez une réservation spécifiquement ciblée, vous pouvez ignorer cette section.
Pour utiliser des TPU à la demande sans réservation, vérifiez la limite et l'utilisation actuelle de votre quota d'API Compute Engine pour les TPU comme suit :
Console
Accédez à la page Quotas dans la Google Cloud console :
Dans la zone Filter (Filtrer), procédez comme suit :
Utilisez le tableau suivant pour sélectionner et copier la propriété du quota en fonction de la version du TPU et du type de machine. Par exemple, si vous prévoyez de créer des nœuds TPU v5e à la demande dont le type de machine commence par
ct5lp-, saisissezName: TPU v5 Lite PodSlice chips.Version du TPU, type de machine commençant par Propriété et nom du quota pour les instances à la demande TPU v5e,
ct5lp-Name:
TPU v5 Lite PodSlice chipsTPU v5p,
ct5p-Name:
TPU v5p chipsTPU v6e,
ct6e-Dimensions (e.g. location):
tpu_family:CT6ESélectionnez la propriété Dimensions (par exemple, emplacement) et saisissez
region:suivi du nom de la région dans laquelle vous prévoyez de démarrer votre pipeline. Par exemple, saisissezregion:us-west4si vous prévoyez d'utiliser la zoneus-west4-a. Le quota de TPU est régional. Par conséquent, toutes les zones d'une même région consomment le même quota de TPU.
Configurer une image de conteneur personnalisée
Pour interagir avec les TPU dans les pipelines Dataflow, vous devez fournir un logiciel capable de fonctionner sur des appareils XLA dans votre environnement d'exécution de pipeline. Pour cela, vous devez installer des bibliothèques de TPU en fonction des besoins de votre pipeline et configurer des variables d'environnement en fonction de l'appareil TPU que vous utilisez.
Pour personnaliser l'image de conteneur, installez Apache Beam dans une image de base prête à l'emploi qui contient les bibliothèques de TPU nécessaires. Vous pouvez également installer le logiciel TPU dans les images publiées avec les versions du SDK Apache Beam.
Pour fournir une image de conteneur personnalisée, utilisez l'option de pipeline sdk_container_image. Pour en savoir plus, consultez la page Utiliser des conteneurs personnalisés dans
Dataflow.
Lorsque vous utilisez un accélérateur TPU, vous devez définir les variables d'environnement suivantes dans l'image de conteneur.
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
En fonction de l'accélérateur que vous utilisez, les variables du tableau suivant doivent également être définies.
| type | topologie | worker_machine_type Dataflow requis |
variables d'environnement supplémentaires |
|---|---|---|---|
| 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 |
Voici un exemple de fichier Dockerfile pour l'image de conteneur personnalisée :
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"]
Exécuter votre tâche avec des TPU
Les points à prendre en compte pour exécuter une tâche Dataflow à l'aide de TPU sont les suivants :
- Les conteneurs de TPU pouvant être volumineux, pour éviter de manquer d'espace disque, augmentez la taille du disque de démarrage par défaut à 50 gigaoctets ou à une taille appropriée, selon les besoins de votre image de conteneur, à l'aide de l'option de pipeline
--disk_size_gb. - Limitez le parallélisme intra-nœud de calcul.
TPU et parallélisme des nœuds de calcul
Dans la configuration par défaut, les pipelines Python Dataflow lancent un processus du SDK Apache Beam par cœur de VM. Les types de machines TPU disposent d'un grand nombre de cœurs de processeur virtuel, mais un seul processus peut effectuer des calculs sur un appareil TPU. De plus, un appareil TPU peut être réservé par un processus pendant toute sa durée de vie. Par conséquent, vous devez limiter le parallélisme intra-nœud de calcul lorsque vous exécutez un pipeline TPU Dataflow. Pour limiter le parallélisme des nœuds de calcul, suivez les conseils ci-dessous :
- Si votre cas d'utilisation implique l'exécution d'inférences sur un modèle, utilisez l'API Beam
RunInference. Pour en savoir plus, consultez la section Inférence de grand modèle de langage dans Beam. - Si vous ne pouvez pas utiliser l'API Beam
RunInference, utilisez les objets partagés multiprocessus de Beam pour limiter certaines opérations à un seul processus. - Si vous ne pouvez pas utiliser les recommandations précédentes et préférez ne lancer qu'un seul
processus Python par
nœud de calcul, définissez l'
--experiments=no_use_multiple_sdk_containersoption de pipeline. - Vous pouvez réduire davantage le nombre de threads à l'aide de l'option de pipeline
--number_of_worker_harness_threadssi cela permet d'améliorer les performances.
Le tableau suivant répertorie le total des ressources de calcul par nœud de calcul pour chaque configuration de TPU.
| Type de TPU | topologie | type de machine | Puces TPU | vCPU | Mémoire RAM (Go) |
|---|---|---|---|---|---|
| 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 |
Exécuter un pipeline avec des TPU
Pour exécuter une tâche Dataflow à l'aide de TPU, utilisez la commande suivante.
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
Remplacez les éléments suivants :
- PIPELINE : fichier de code source de votre pipeline.
- PROJECT : nom du Google Cloud projet.
- BUCKET : bucket Cloud Storage.
- REGION : région Dataflow, par exemple
us-central1. - TPU_TYPE : type de TPU compatible, par exemple
tpu-v5-lite-podslice. Pour obtenir la liste complète des types et des topologies, consultez la section Accélérateurs TPU compatibles. - TPU_TOPOLOGY : topologie du TPU, par exemple
1x1. - MACHINE_TYPE : type de machine correspondant, par exemple
ct5lp-hightpu-1t. - DISK_SIZE_GB : taille du disque de démarrage pour chaque VM de nœud de calcul, par exemple
100. - IMAGE : chemin d'accès à Artifact Registry pour votre image Docker.
- NUMBER_OF_THREADS : facultatif. Nombre de threads de faisceau de nœud de calcul.
Vérifier la tâche Dataflow
Pour vérifier que la tâche utilise des VM de nœud de calcul à l'aide de TPU, procédez comme suit :
Dans la Google Cloud console, accédez à la page Dataflow > Jobs.
Sélectionnez une tâche.
Cliquez sur l'onglet Job metrics (Métriques de job).
Dans la section Autoscaling (Autoscaling), vérifiez qu'il existe au moins une VM Current workers (Nœuds de calcul actuels).
Dans le panneau latéral Job info (Informations sur la tâche), vérifiez que
machine_typecommence parct. Par exemple,ct6e-standard-1t. Cela indique l'utilisation du TPU.
Résoudre les problèmes liés à la tâche Dataflow
Si vous rencontrez des problèmes lors de l'exécution de votre tâche Dataflow à l'aide de TPU, consultez la page Résoudre les problèmes liés à la tâche TPU Dataflow.
Étape suivante
- Essayez les exemples de démarrage rapide : Exécuter Dataflow sur des TPU.
- En savoir plus sur la compatibilité des TPU sur Dataflow.
- En savoir plus sur l'inférence de modèle étendu dans Beam.