Implementa TPU en el modo All Capacity en GKE

En este documento, se explica cómo implementar y administrar cargas de trabajo con la función modo de capacidad total de TPU en GKE. Las reservas en el modo All Capacity proporcionan un control mejorado sobre tus recursos de TPU, lo que te permite colocar tus cargas de trabajo con un control detallado dentro de tu capacidad reservada.

Este documento está dirigido a ingenieros de aprendizaje automático (AA) y administradores y operadores de plataformas que deseen usar la organización de contenedores de Kubernetes con un control detallado sobre las implementaciones de TPU.

Antes de leer este documento, asegúrate de estar familiarizado con lo siguiente:

¿Qué es el modo All Capacity de TPU?

El modo All Capacity de TPU, habilitado por TPU Cluster Director, te brinda control total sobre tu capacidad de TPU reservada. Cluster Director de TPU es un servicio de administración que te brinda control basado en reservas sobre tus TPU.

A diferencia del modo administrado anterior, en el que Google Cloud reserva una parte de tu capacidad para controlar las fallas de hardware, el modo All Capacity te otorga acceso a la totalidad de los recursos de TPU reservados. Este modo ofrece visibilidad completa del estado del hardware, pero también te transfiere la responsabilidad de administrar las fallas de los nodos y el mantenimiento planificado.

Para obtener más información sobre las funciones clave del modo All Capacity, consulta Modo All Capacity en la descripción general de TPU Cluster Director.

Terminología relacionada con el modo All Capacity en GKE

En la siguiente tabla, se incluyen los términos y las equivalencias definidos por el tamaño de un bloque, un subbloque y un cubo en la versión de Ironwood (TPU7x). Un cubo es una topología 4x4x4 de chips de TPU interconectados, que solo se aplica a las topologías en tuplas de 3 elementos ({A}x{B}x{C}).

Recurso de TPU Núcleos Chips Hosts Cubos
1 chip 2 1 - -
1 organizador 8 4 1 -
1 subbloque 128 64 16 1
Un bloque contiene 144 subbloques 18432 9,216 2304 144

Para obtener más información sobre las topologías permitidas en un bloque, consulta Elige una topología.

Antes de comenzar

Antes de comenzar, asegúrate de haber realizado las siguientes tareas:

  • Habilita la API de Google Kubernetes Engine.
  • Habilitar la API de Google Kubernetes Engine
  • Si deseas usar Google Cloud CLI para esta tarea, instala y, luego, inicializa gcloud CLI. Si ya instalaste gcloud CLI, ejecuta el comando gcloud components update para obtener la versión más reciente. Es posible que las versiones anteriores de gcloud CLI no admitan la ejecución de los comandos que se describen en este documento.
  • Asegúrate de tener un clúster estándar existente en la versión 1.34.0-gke.2201000 o posterior. Para crear un clúster nuevo, consulta Crea un clúster regional.
  • Asegúrate de tener suficiente cuota para las TPU en la región que deseas usar.
  • Instala JobSet v0.2.3 o una versión posterior.

Limitaciones

El modo All Capacity de TPU en GKE solo admite versiones de Ironwood (TPU7x).

Usa el modo All Capacity de TPU en GKE

En esta sección, se describe el flujo de trabajo para usar el modo All Capacity de TPU en GKE.

  1. Familiarízate con Cluster Director de TPU.
  2. Solicita capacidad de TPU en el modo All Capacity.
  3. Consulta la topología y el estado de las reservas en el modo All Capacity.
  4. Completa el paso que se indica en este documento:
    1. Crea un grupo de nodos de GKE
    2. Programa cargas de trabajo
    3. Administra las fallas de nodos con una reserva en el modo All Capacity
  5. Administra eventos de mantenimiento con TPU en el modo All Capacity.
  6. Informa y repara hosts defectuosos con TPU en el modo All Capacity.

Crea un grupo de nodos dentro de una reserva en el modo All Capacity

El modo All Capacity en GKE te permite crear grupos de nodos de las siguientes maneras:

  • Es un grupo de nodos en el que GKE selecciona el bloque o subbloque en tu reserva de TPU en el modo All Capacity.
  • Es un grupo de nodos que segmenta un bloque o subbloque en particular dentro de una reserva en el modo All Capacity de TPU.

GKE selecciona el bloque o subbloque en tu reserva de TPU en el modo All Capacity.

En este modo, GKE selecciona la ubicación del grupo de nodos dentro de tu reserva de TPU en el modo All Capacity. Este proceso es similar a la creación de grupos de nodos con otras opciones de aprovisionamiento de TPU, como las VMs Spot o según demanda.

Para crear un grupo de nodos, usa el comando gcloud container node-pools create con la marca --reservation. Especifica el nombre completo del recurso de tu reserva de TPU como el valor de la marca --reservation.

Si deseas ver un ejemplo de un comando de creación de grupos de nodos, consulta Cómo crear un grupo de nodos de forma manual.

Segmenta un bloque o subbloque dentro de una reserva

El modo All Capacity de TPU te permite segmentar un bloque o subbloque específico dentro de tu reserva de TPU para cargas de trabajo paralelas. Esta capacidad es útil para las cargas de trabajo que requieren una proximidad cercana entre los chips de TPU para minimizar la latencia.

  1. Consulta las configuraciones de bloque, subbloque y host disponibles. Completa los pasos que se indican en el documento Visualiza la topología y el estado de las reservas en el modo All Capacity.

  2. Crea una política de carga de trabajo:

    gcloud compute resource-policies create workload-policy WORKLOAD_POLICY_NAME \
        --type=HIGH_THROUGHPUT \
        --accelerator-topology=TPU_TOPOLOGY \
        --project=PROJECT_ID \
        --region=REGION
    

    Reemplaza lo siguiente:

    • WORKLOAD_POLICY_NAME: Es un nombre para tu política de carga de trabajo.
    • TPU_TOPOLOGY: Es la topología de TPU Ironwood (TPU7x). Por ejemplo, 2x2x2 Para ver todas las topologías compatibles con Ironwood (TPU7x), consulta Planifica las TPU en GKE.
    • PROJECT_ID: Es el ID del proyecto de Google Cloud .
    • REGION: Es la región de la política de carga de trabajo. Una política de carga de trabajo es un recurso regional y se puede reutilizar en todos los grupos de nodos que comparten la misma topología.
  3. Para crear un grupo de nodos y segmentar un bloque o subbloque en particular de la reserva, usa la marca --reservation para especificar el nombre completo del recurso del bloque o subbloque objetivo dentro de tu reserva.

    Para segmentar un bloque específico dentro de tu reserva, usa el siguiente comando:

    gcloud container node-pools create NODE_POOL_NAME \
        --cluster=CLUSTER_NAME \
        --machine-type=tpu7x-standard-4t \
        --placement-policy=WORKLOAD_POLICY_NAME \
        --zone=ZONE \
        --reservation=project/PROJECT/reservation/RESERVATION_NAME/reservationBlocks/BLOCK_NAME
    

    Para segmentar un subbloque específico dentro de un bloque, usa el siguiente comando:

    gcloud container node-pools create NODE_POOL_NAME \
        --cluster=CLUSTER_NAME \
        --machine-type=tpu7x-standard-4t \
        --placement-policy=WORKLOAD_POLICY_NAME \
        --zone=ZONE \
        --reservation=project/PROJECT/reservation/RESERVATION_NAME/reservationBlocks/BLOCK_NAME/reservationSubBlocks/SUB_BLOCK_NAME
    

    Reemplaza lo siguiente:

    • NODE_POOL_NAME: es el nombre de tu grupo de nodos nuevo.
    • CLUSTER_NAME: Es el nombre del clúster de GKE.
    • WORKLOAD_POLICY_NAME: Es el nombre de la política de cargas de trabajo que creaste.
    • ZONE: Es la zona del grupo de nodos, por ejemplo, us-central1-a.
    • PROJECT: Es el ID del proyecto de Google Cloud .
    • RESERVATION_NAME: Es el nombre de tu reserva de TPU.
    • BLOCK_NAME: Es el bloque específico dentro de tu reserva.
    • SUB_BLOCK_NAME: Es el subbloque específico dentro de tu reserva.

    En los comandos anteriores, se ilustra lo siguiente:

Programa cargas de trabajo

Después de crear un grupo de nodos con VMs de TPU en el modo All Capacity, puedes implementar tu carga de trabajo como cualquier otro grupo de nodo TPU. En el caso del modo All Capacity de TPU, no hay diferencias adicionales en la programación de cargas de trabajo en comparación con los grupos de nodos que usan reservas estándar respaldadas por SLO.

Para obtener más información y ejemplos de cargas de trabajo que usan TPU, consulta Ejecuta tu carga de trabajo en nodos en porción de TPU y Ejecuta una carga de trabajo de Multislice.

Administra las fallas de los nodos

Las reservas en el modo All Capacity de TPU son reservas sin retenciones. Sin retenciones significa que recibes la capacidad total de la TPU, incluida la parte queGoogle Cloud suele retener para las conmutaciones por error en el modo de capacidad administrada.

En el modo All Capacity de TPU, si una VM falla debido a problemas como una falla de hardware, Google Cloud intenta recuperar la VM en el mismo host (reparación in situ). Por lo tanto, te recomendamos que mantengas capacidad de reserva para admitir la reprogramación de cargas de trabajo durante las fallas de infraestructura.

Falla y recuperación del nodo

Cuando falla un nodo en una reserva del modo All Capacity de TPU, ocurren los siguientes eventos:

  • Google Cloudinicia un evento de reparación para la instancia de VM de Compute Engine con errores. Este proceso intenta restablecer la VM al estado RUNNING y devolver el estado del nodo de GKE a READY.
  • La VM de TPU entra en estado de reparación, y es posible que falle cualquier carga de trabajo que se ejecute en ese nodo, según su política de conmutación por error. El estado del grupo de nodos no cambia a ERROR, incluso si una o más de sus VMs experimentan fallas.

Para supervisar el estado de tus nodos, sigue estos pasos:

  1. Enumera los nodos del grupo de nodos:

    kubectl get nodes
    

    Los nodos con errores tienen el estado NotReady.

  2. Supervisa el estado del nodo de Compute Engine:

    Para las VMs de TPU en el modo All Capacity, usa gcloud compute instances describe. Este comando también proporciona el estado físico de la topología para encontrar detalles del host, el subbloque y el bloque.

    gcloud compute instances describe VM_NAME \
            --format="table[box,title=VM-Position](resourceStatus.physical_host_topology:label=location)" \
            --zone=ZONE
    

    Reemplaza lo siguiente:

    • VM_NAME: Es el nombre de la instancia de VM de TPU.
    • ZONE: Es la zona de la VM, por ejemplo, us-central1-a.

    Para obtener más información sobre cómo recuperar información sobre la topología y el estado de tu capacidad del modo All Capacity, consulta Visualiza la topología y el estado de las reservas en el modo All Capacity.

Administra el mantenimiento

Para controlar posibles interrupciones y garantizar que tus cargas de trabajo sigan siendo resilientes, puedes administrar el mantenimiento de nodos individuales con las políticas de mantenimiento de GKE. Para obtener más información, consulta Períodos de mantenimiento y exclusiones de mantenimiento.

GKE no admite el mantenimiento de grupos para las VMs de TPU en una reserva del modo All Capacity. Para realizar el mantenimiento del grupo a nivel del subbloque, el bloque o la reserva, usa las APIs de Compute Engine. Para obtener más información, consulta Administra eventos de mantenimiento con TPU en el modo All Capacity.

Realiza una limpieza

Para evitar que se apliquen cargos no deseados a tu cuenta de Google Cloud , borra los grupos de nodo TPU que ya no tengan cargas de trabajo programadas. Si las cargas de trabajo en ejecución deben finalizarse de forma correcta, usa el comando kubectl drain para limpiar las cargas de trabajo antes de borrar el grupo de nodos.

  1. Borra un grupo de nodos TPU:

    gcloud container node-pools delete NODE_POOL_NAME \
        --location=LOCATION \
        --cluster=CLUSTER_NAME
    

    Reemplaza lo siguiente:

    • NODE_POOL_NAME: el nombre del grupo de nodos
    • CLUSTER_NAME: el nombre del clúster
    • LOCATION: Es la ubicación de procesamiento del clúster.

¿Qué sigue?