Pathways es un sistema diseñado para permitir la creación de sistemas de aprendizaje automático (AA) a gran escala, de múltiples tareas y activados de forma dispersa. Te permite usar miles o decenas de miles de aceleradores, con la capacidad de asignar de forma dinámica cantidades variables de procesamiento para diferentes tareas según sus requisitos de procesamiento.
Pathways simplifica los cálculos de AA a gran escala, ya que permite que un solo cliente de JAX organice las cargas de trabajo en porciones de TPU grandes, que pueden abarcar miles de chips TPU.
Google usa Pathways de forma interna para entrenar modelos grandes, como Gemini. Pathways on Cloud ofrece los mismos beneficios a los clientes de Google Cloud .
Antes de comenzar
-
Selecciona la pestaña según cómo planeas usar las muestras de esta página:
gcloud
Instala Google Cloud CLI y, luego, accede a gcloud CLI con tu identidad federada. Después de acceder, inicializa Google Cloud CLI con el siguiente comando:
gcloud initREST
Para usar las muestras de la API de REST incluidas en esta página en un entorno de desarrollo local, debes usar las credenciales que proporciones a la gcloud CLI.
Instala Google Cloud CLI y, luego, accede a gcloud CLI con tu identidad federada.
Para obtener más información, consulta Autentícate para usar REST en la documentación de autenticación de Google Cloud .
Antes de comenzar
Puedes ejecutar Pathways en Google Kubernetes Engine (GKE) o en un clúster de Cluster Director con Slurm. Selecciona la pestaña de tu plataforma.
GKE
Completa los siguientes requisitos previos:
- Instala las herramientas de Kubernetes.
- Instala Google Cloud CLI.
- Habilita la API de Kubernetes Engine.
En este documento, se proporciona una descripción general de cómo usar las TPU administradas por Pathways en GKE para cargas de trabajo por lotes, en tiempo real y de forma interactiva. Se supone que ya estás familiarizado con el uso de las TPU en GKE, incluidas las TPU de porción única y de porciones múltiples en GKE, y que tienes experiencia general con las TPU de porciones múltiples.
Cluster Director
Completa los siguientes requisitos previos:
En este documento, se proporciona una descripción general de cómo usar Pathways con TPU en un clúster de Cluster Director para cargas de trabajo por lotes e interactivas. Se supone que ya conoces Cluster Director, las máquinas de TPU en Cluster Director y la ejecución de trabajos con Slurm, y que tienes experiencia general con las TPU de Multislice.
Para crear un clúster, consulta Crea un clúster de Cluster Director con Pathways.
Controlador único y varios controladores
Existen dos formas principales de administrar y organizar los cálculos en varios dispositivos:
| Función | Controlador único (Pathways) | Controlador múltiple (predeterminado de JAX) |
|---|---|---|
Control |
Punto de control único: Un solo programa cliente actúa como el controlador central. |
Control distribuido: Participan varios procesos, cada uno con su propia instancia de intérprete de Python. |
Ver |
Vista unificada: El cliente ve todos los dispositivos como un único sistema unificado. |
Vista localizada: Cada proceso de Python solo ve los dispositivos conectados a él. |
Programación |
Programación simplificada: Interactúas con un solo cliente, lo que hace que el sistema aparezca como una sola máquina grande con muchos aceleradores locales. |
Programa único, datos múltiples (SPMD): Usa principalmente el paradigma de SPMD, lo que requiere que todos los dispositivos ejecuten el mismo programa. |
Flexibilidad |
Admite patrones de procesamiento complejos más allá de SPMD, incluido el paralelismo de canalización asimétrico y la dispersión computacional. |
Puede ser menos flexible en la administración de recursos, en especial en diferentes porciones de TPU. |
Componentes de Pathways
En las siguientes secciones, se describen los componentes principales de la arquitectura de Pathways.
Administrador de recursos de Pathways
Este componente es el plano de control central del sistema de Pathways. Administra todos los recursos de aceleradores y coordina la asignación de aceleradores para tus trabajos. Supervisa el estado de los trabajadores y controla la programación, la pausa y la reanudación de los trabajos. Sirve como un punto de contacto único para los errores y el estado del sistema. Este componente solo requiere recursos de CPU.
Cliente de Pathways
Este componente es una implementación del entorno de ejecución del framework interino (IFRT) que sirve como punto de entrada al sistema de Pathways. Recibe operaciones de alto nivel (HLO) de tu programa. El cliente de Pathways se coordina con el administrador de recursos de Pathways para determinar dónde colocar los programas compilados para la ejecución según tu código. Presenta una vista unificada del sistema a un cliente de JAX determinado. Este componente solo requiere recursos de CPU.
Trabajador de Pathways
Los procesos de los trabajadores de Pathways se ejecutan en las máquinas aceleradoras (VMs de TPU). Reciben ejecutables compilados de tu programa desde el servidor proxy de IFRT y realizan los cálculos en las TPU. Los trabajadores de Pathways envían datos de vuelta a tu programa a través del servidor proxy de IFRT. Este componente requiere recursos de acelerador.
Cliente proxy de IFRT
El cliente proxy de IFRT es una implementación de código abierto de la API de Interim Framework Runtime (IFRT) que desvincula el código del usuario del entorno de ejecución subyacente y mejora la portabilidad y la transparencia del código. JAX usa esta implementación como alternativa a su entorno de ejecución de varios controladores predeterminado. El cliente proxy de IFRT actúa como un puente de comunicación entre tu programa y los componentes de Pathways. Envía solicitudes al servidor proxy de IFRT y recibe resultados de él. Este componente solo requiere recursos de CPU.
Servidor proxy de IFRT
El servidor proxy de IFRT es un servidor gRPC que recibe solicitudes del cliente proxy de IFRT y las reenvía al cliente de Pathways, que controla la distribución del trabajo. Este componente solo requiere recursos de CPU.
Servidor sidecar
El servidor de sidecar es un servidor de gRPC que se ubica junto con el trabajador de Pathways en la VM del acelerador. Ejecuta el código de Python especificado por el usuario directamente en la VM del acelerador para reducir la latencia de transferencia de datos entre el controlador y los aceleradores. El servidor de sidecar interactúa con el trabajador de Pathways a través de un protocolo con versiones personalizado en el transporte de gRPC.
Componentes de Pathways en GKE
En esta sección, se asignan los componentes de Pathways a los componentes de GKE, como los contenedores y los Pods.
Puedes encontrar las imágenes de contenedor de Pathways en las siguientes ubicaciones:
| Tipo de contenedor | Ubicación |
|---|---|
Servidor proxy de IFRT |
|
Administrador o trabajador de recursos de Pathways |
|
Administrador de recursos de Pathways
Después de
crear un clúster de GKE,
puedes usar el siguiente containerSpec para implementar el administrador de recursos
de Pathways:
- name: pathways-rm image: us-docker.pkg.dev/cloud-tpu-v2-images/cloud-pathways/server:latest imagePullPolicy: Always env: - name: HOST_ADDRESS valueFrom: fieldRef: fieldPath: "metadata.labels['jobset.sigs.k8s.io/coordinator']" - name: TPU_SKIP_MDS_QUERY value: "true" args: - --server_port=29001 - --node_type=resource_manager - --instance_count=WORKLOAD_NODEPOOL_COUNT - --instance_type=SLICE_TOPOLOGY - --gcs_scratch_location=gs://BUCKET_NAME
El contenedor usa los siguientes argumentos:
--server_port: Es el puerto que usa el administrador de recursos de Pathways para comunicarse con otros componentes de Pathways.--node_type: Es el tipo de nodo. Establece este argumento enresource_managerpara el administrador de recursos de Pathways; no es necesario para los otros contenedores.--instance_count: Es la cantidad de porciones de TPU.--instance_type: Es el tipo de TPU y la topología de la porción, en el formatotpuTPU_TYPE:TOPOLOGY, por ejemplo,tpuv5e:4x4.--gcs_scratch_location: Es un bucket de Cloud Storage que se usa para los archivos temporales.
Servidor proxy de IFRT
Puedes usar el siguiente containerSpec para implementar un servidor proxy de IFRT:
- name: pathways-proxy image: us-docker.pkg.dev/cloud-tpu-v2-images/cloud-pathways/proxy_server:latest imagePullPolicy: Always env: - name: PATHWAYS_HEAD valueFrom: fieldRef: fieldPath: "metadata.labels['jobset.sigs.k8s.io/coordinator']" args: - --resource_manager_address=$(PATHWAYS_HEAD):29001 - --server_port=29000 - --gcs_scratch_location=gs://BUCKET_NAME ports: - containerPort: 29000
El contenedor usa los siguientes argumentos:
--resource_manager_address: Es el nombre de host y el puerto que usa el servidor proxy para comunicarse con el administrador de recursos de Pathways. El puerto debe coincidir con el valor de--server_portque se usa para el contenedor del administrador de recursos de Pathways.--server_port: Es el puerto que usa el servidor proxy de IFRT para comunicarse con el cliente proxy de IFRT.--gcs_scratch_location: Es un bucket de Cloud Storage que se usa para los archivos temporales.
Trabajador de Pathways
Puedes usar el siguiente containerSpec para implementar trabajadores de Pathways:
- name: worker image: us-docker.pkg.dev/cloud-tpu-v2-images/cloud-pathways/server:latest imagePullPolicy: Always env: - name: PATHWAYS_HEAD valueFrom: fieldRef: fieldPath: "metadata.labels['jobset.sigs.k8s.io/coordinator']" - name: MEGASCALE_NUM_SLICES valueFrom: fieldRef: fieldPath: "metadata.labels['jobset.sigs.k8s.io/replicatedjob-replicas']" - name: MEGASCALE_SLICE_ID valueFrom: fieldRef: fieldPath: "metadata.labels['jobset.sigs.k8s.io/job-index']" - name: MEGASCALE_COORDINATOR_ADDRESS value: "$(PATHWAYS_HEAD)" args: - --server_port=29001 - --resource_manager_address=$(PATHWAYS_HEAD):29001 - --gcs_scratch_location=gs://BUCKET_NAME ports: - containerPort: 29001 resources: limits: google.com/tpu: "4"
El contenedor usa los siguientes argumentos:
--resource_manager_address: Es el nombre de host y el puerto que usan los trabajadores de TPU para comunicarse con el administrador de recursos de Pathways. El puerto debe coincidir con el valor de--server_portque se usa para el contenedor del administrador de recursos de Pathways.--server_port: Es el puerto que usan los trabajadores para comunicarse con el servidor proxy y el administrador de recursos de Pathways.--gcs_scratch_location: Es un bucket de Cloud Storage que se usa para los archivos temporales.
El administrador de recursos de Pathways, el servidor proxy de IFRT y los trabajadores de Pathways pueden tener puertos diferentes, pero, en este ejemplo, el administrador de recursos de Pathways y el trabajador de Pathways comparten el mismo puerto.
Componentes de Pathways en Cluster Director
En esta sección, se asignan los componentes de Pathways a los trabajos de Slurm en un clúster de Cluster Director.
Las secuencias de comandos de Pathways ejecutan los componentes de Pathways con Enroot. La secuencia de comandos setup_env.sh
usa las siguientes imágenes de contenedor, que coinciden con la versión de JAX
(0.11.1) del entorno de Python que compila:
| Tipo de contenedor | Ubicación |
|---|---|
Servidor proxy de IFRT |
|
Administrador o trabajador de recursos de Pathways |
|
Para iniciar los componentes de Pathways, envía la secuencia de comandos start_pathways.sh
como el trabajo del servicio de Pathways. No escribes los siguientes comandos por tu cuenta:
las secuencias de comandos derivan los argumentos de las variables de entorno que configuras
cuando envías start_pathways.sh, como SLICE_SHAPE, MIN_SLICES,
MAX_SLICES y GCS_BUCKET.
Administrador de recursos de Pathways
El trabajo del servicio de Pathways ejecuta el administrador de recursos de Pathways en un nodo de CPU. Ejecuta el siguiente comando en el contenedor del servidor de Pathways:
/pathways/server \ --server_port=29001 \ --node_type=resource_manager \ --instance_type=tpuTPU_TYPE:TOPOLOGY \ --instance_count=MAX_SLICES \ --gcs_scratch_location=gs://BUCKET_NAME/pathways-scratch/shared \ --enable_gcs_olm=false
El comando usa los siguientes argumentos:
--server_port: Es el puerto en el que escucha el administrador de recursos de Pathways. El servidor proxy de IFRT y los trabajadores de Pathways se conectan a este puerto.--node_type: el tipo de nodo,resource_manager. Solo el administrador de recursos de Pathways establece este argumento.--instance_type: Es el tipo de TPU y la topología de cada porción, deSLICE_SHAPE. Por ejemplo,SLICE_SHAPE=2x4establecetpuv6e:2x4.--instance_count: Es la cantidad de porciones de TPU, deMAX_SLICES.--gcs_scratch_location: Es una ruta de acceso en tu bucket de Cloud Storage, desdeGCS_BUCKET, que se usa para archivos temporales, como la caché de compilación.--enable_gcs_olm: indica si Pathways crea reglas de ciclo de vida de objetos de Cloud Storage para limpiar las entradas de caché de compilación antiguas. La secuencia de comandos desactiva esta opción porque requiere permisos adicionales en el bucket.
Servidor proxy de IFRT
El trabajo del servicio de Pathways ejecuta el servidor proxy de IFRT en el mismo nodo de CPU que el administrador de recursos de Pathways. Ejecuta el siguiente comando en el contenedor del servidor proxy de IFRT:
/pathways/proxy_server \ --server_port=29000 \ --resource_manager_address=RM_IP:29001 \ --gcs_scratch_location=gs://BUCKET_NAME/pathways-scratch/shared \ --num_elastic_instances=MAX_SLICES
El comando usa los siguientes argumentos:
--server_port: Es el puerto en el que escucha el servidor proxy de IFRT. Tu programa de JAX se conecta a este puerto.--resource_manager_address: Es la dirección del administrador de recursos de Pathways.RM_IPes la dirección IP interna del nodo de CPU.--gcs_scratch_location: Es la misma ruta de acceso de Cloud Storage que el administrador de recursos de Pathways.--num_elastic_instances: Es la cantidad de porciones que pueden no estar disponibles sin detener la sesión del proxy de IFRT, deMAX_SLICES. Tu carga de trabajo aplicaMIN_SLICES.
Cuando se ejecutan al menos MIN_SLICES porciones, el trabajo de servicio escribe la dirección del servidor proxy de IFRT en ~/pathways/cluster.env. Tu programa de JAX, el cliente proxy de IFRT, lee este archivo para conectarse a Pathways. El programa de JAX se ejecuta como
tu carga de trabajo, por ejemplo, run_maxtext.sh, o en un notebook de Jupyter.
Trabajador de Pathways
El trabajo de servicio de Pathways envía un array de trabajos de Slurm (run_worker_slice.sh) con
una tarea de array para cada porción de TPU. Cada tarea de array ejecuta el siguiente comando
en el contenedor del servidor de Pathways en cada VM de TPU de su porción:
/pathways/server \ --server_port=29001 \ --resource_manager_address=RM_IP:29001 \ --gcs_scratch_location=gs://BUCKET_NAME/pathways-scratch/shared \ --enable_gcs_olm=false
El comando usa los siguientes argumentos:
--server_port: Es el puerto en el que escucha el trabajador de Pathways. El administrador de recursos de Pathways y el servidor proxy de IFRT se conectan a este puerto.--resource_manager_address: Es la dirección del administrador de recursos de Pathways, la misma que para el servidor proxy de IFRT.--gcs_scratch_location,--enable_gcs_olm: Es lo mismo que para el administrador de recursos de Pathways.
La secuencia de comandos también establece la topología de TPU y las variables de entorno MEGASCALE_*
para cada trabajador a partir de los nodos de la porción y el índice de tareas del array.
Si se interrumpe o falla una porción de TPU, Slurm vuelve a poner en cola su tarea de array. Si tienes SSH sin contraseñasudo en los nodos del clúster, el trabajo de servicio también apaga los nodos de la porción para que Slurm pueda volver a crearlos. El administrador de recursos de Pathways y el servidor proxy de IFRT
siguen ejecutándose, por lo que tu programa de JAX no necesita conectarse a una dirección nueva.
¿Qué sigue?
- Crea un clúster de GKE con Pathways
- Crea un clúster de Cluster Director con Pathways
- Ejecuta una carga de trabajo por lotes con Pathways
- Ejecuta una carga de trabajo interactiva con Pathways
- Entrenamiento resiliente con Pathways
- Porta cargas de trabajo de JAX a Pathways.
- Rutas de aprendizaje para solucionar problemas en Cloud
- Ejecuta cargas de trabajo con Pathways en Cluster Toolkit