En esta página, se explica cómo ejecutar una canalización de Apache Beam en Dataflow con TPU. Los trabajos que usan TPU generan cargos, como se especifica en la página de precios de Dataflow.
Para obtener más información sobre el uso de TPU con Dataflow, consulta la compatibilidad de Dataflow con las TPU.
Opcional: Haz una reserva específica para usar aceleradores
Si bien puedes usar TPUs a pedido, te recomendamos que uses TPUs de Dataflow con reservas específicamente segmentadas Google Cloud. Esto ayuda a garantizar que tengas acceso a los aceleradores disponibles y a tiempos de inicio rápidos de los trabajadores. Las canalizaciones que consumen una reserva de TPU no requieren cuota de TPU adicional.
Si no haces una reserva y decides usar las TPU a pedido, aprovisiona la cuota de TPU antes de ejecutar tu canalización.
Opcional: Asigna una cuota de TPU
Puedes usar las TPU con capacidad a pedido o con una reserva. Si deseas usar TPUs según demanda, debes aprovisionar la cuota de TPU antes de hacerlo. Si usas una reserva específicamente segmentada, puedes omitir esta sección.
Para usar las TPU bajo demanda sin una reserva, verifica el límite y el uso actual de la cuota de la API de Compute Engine para las TPU de la siguiente manera:
Console
Ve a la página Cuotas en la consola de Google Cloud :
En la casilla
Filtro, haz lo siguiente:Usa la siguiente tabla para seleccionar y copiar la propiedad de la cuota según la versión de TPU y el tipo de máquina. Por ejemplo, si planeas crear nodos TPU v5e a pedido cuyo tipo de máquina comience con
ct5lp-
, ingresaName: TPU v5 Lite PodSlice chips
.Versión de TPU, el tipo de máquina comienza con Propiedad y nombre de la cuota para instancias bajo demanda TPU v5e,
ct5lp-
Name:
TPU v5 Lite PodSlice chipsTPU v5p,
ct5p-
Name:
TPU v5p chipsTPU v6e,
ct6e-
Dimensions (e.g. location):
tpu_family:CT6ESelecciona la propiedad Dimensiones (p.ej., ubicación) y, luego, ingresa
region:
seguido del nombre de la región en la que planeas iniciar tu canalización. Por ejemplo, ingresaregion:us-west4
si planeas usar la zonaus-west4-a
. La cuota de TPU es regional, por lo que todas las zonas dentro de la misma región consumen la misma cuota de TPU.
Configura una imagen de contenedor personalizada
Para interactuar con las TPU en las canalizaciones de Dataflow, debes proporcionar software que pueda operar en dispositivos XLA en tu entorno de ejecución de canalizaciones. Esto requiere que instales bibliotecas de TPU según las necesidades de tu canalización y que configures variables de entorno según el dispositivo TPU que uses.
Para personalizar la imagen del contenedor, instala Apache Beam en una imagen base lista para usar que tenga las bibliotecas de TPU necesarias. Como alternativa, instala el software de TPU en las imágenes publicadas con los lanzamientos del SDK de Apache Beam.
Para proporcionar una imagen de contenedor personalizada, usa la opción de canalización sdk_container_image
. Para obtener más información, consulta Usa contenedores personalizados en Dataflow.
Cuando usas un acelerador de TPU, debes establecer las siguientes variables de entorno en la imagen del contenedor.
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
Según el acelerador que uses, también deberás establecer las variables de la siguiente tabla.
tipo | topology | worker_machine_type de Dataflow requerida |
Variables de entorno adicionales |
---|---|---|---|
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 |
Un ejemplo de Dockerfile para la imagen de contenedor personalizada podría verse de la siguiente manera:
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"]
Ejecuta tu trabajo con TPU
Las consideraciones para ejecutar un trabajo de Dataflow con TPU incluyen las siguientes:
- Debido a que los contenedores de TPU pueden ser grandes, para evitar quedarte sin espacio en el disco, aumenta el tamaño predeterminado del disco de arranque a 50 gigabytes o a un tamaño adecuado según lo requiera tu imagen de contenedor con la opción de canalización
--disk_size_gb
. - Limita el paralelismo dentro del trabajador.
TPUs y paralelismo de trabajadores
En la configuración predeterminada, las canalizaciones de Python de Dataflow inician un proceso del SDK de Apache Beam por núcleo de VM. Los tipos de máquinas TPU tienen una gran cantidad de núcleos de CPU virtuales, pero solo un proceso puede realizar cálculos en un dispositivo TPU. Además, un proceso puede reservar un dispositivo TPU durante toda su vida útil. Por lo tanto, debes limitar el paralelismo dentro del trabajador cuando ejecutes una canalización de TPU de Dataflow. Para limitar el paralelismo de trabajadores, sigue estas instrucciones:
- Si tu caso de uso implica ejecutar inferencias en un modelo, usa la API de
RunInference
de Beam. Para obtener más información, consulta Inferencia de modelos de lenguaje grandes en Beam. - Si no puedes usar la API de Beam
RunInference
, usa los objetos compartidos de varios procesos de Beam para restringir ciertas operaciones a un solo proceso. - Si no puedes usar las recomendaciones anteriores y prefieres iniciar solo un proceso de Python por trabajador, configura la opción de canalización
--experiments=no_use_multiple_sdk_containers
. - Para los trabajadores con más de 100 CPU virtuales, reduce la cantidad de subprocesos con la opción de canalización
--number_of_worker_harness_threads
. Usa la siguiente tabla para ver si tu tipo de TPU usa más de 100 CPU virtuales.
En la siguiente tabla, se enumeran los recursos de procesamiento totales por trabajador para cada configuración de TPU.
Tipo de TPU | topology | tipo de máquina | Chips de TPU | CPU virtual | 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 |
Ejecuta una canalización con TPUs
Para ejecutar un trabajo de Dataflow con TPU, usa el siguiente comando.
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
Reemplaza lo siguiente:
- PIPELINE: Tu archivo de código fuente de canalización
- PROJECT: El nombre del proyecto de Google Cloud
- BUCKET: El bucket de Cloud Storage.
- REGION: Una región de Dataflow, por ejemplo,
us-central1
. - TPU_TYPE: Es un tipo de TPU compatible, por ejemplo,
tpu-v5-lite-podslice
. Para obtener una lista completa de los tipos y las topologías, consulta Aceleradores de TPU compatibles. - TPU_TOPOLOGY: Es la topología de TPU, por ejemplo,
1x1
. - MACHINE_TYPE: Es el tipo de máquina correspondiente, por ejemplo,
ct5lp-hightpu-1t
. - DISK_SIZE_GB: Es el tamaño del disco de arranque para cada VM de trabajador, por ejemplo,
100
. - IMAGE: Es la ruta de acceso de Artifact Registry para tu imagen de Docker.
- NUMBER_OF_THREADS: Opcional Es la cantidad de subprocesos del agente de trabajo.
Verifica tu trabajo de Dataflow
Para confirmar que el trabajo use VMs de trabajador con TPU, sigue estos pasos:
En la consola de Google Cloud , ve a la página Trabajos de Dataflow >.
Selecciona un trabajo.
Haz clic en la pestaña Métricas del trabajo.
En la sección Ajuste de escala automático, confirma que haya al menos una VM de Trabajadores actuales.
En el panel lateral Información del trabajo, verifica que
machine_type
comience conct
. Por ejemplo,ct6e-standard-1t
. Esto indica el uso de la TPU.
Soluciona problemas de tu trabajo de Dataflow
Si tienes problemas para ejecutar tu trabajo de Dataflow con TPU, consulta Soluciona problemas de tu trabajo de TPU de Dataflow.
¿Qué sigue?
- Obtén más información sobre la compatibilidad con TPU en Dataflow.
- Obtén más información sobre la inferencia de modelos grandes en Beam.