Diseña para la flexibilidad y eficiencia de la capacidad en GKE con Gemini

En este documento, se explica cómo diseñar clústeres de Google Kubernetes Engine (GKE) resilientes y estrategias de programación de cargas de trabajo que te ayuden a obtener recursos, como GPUs, TPUs y CPUs de alto rendimiento. Si aprovechas Gemini enGoogle Cloud y Compute Advisor (vista previa), puedes evitar Pods pendientes y mejorar la programación confiable para las cargas de trabajo de IA.

Este documento está dirigido a los arquitectos de Cloud y a los administradores y operadores de plataformas que administran la infraestructura de GKE y desean optimizar la planificación y la programación de la capacidad.

Descripción general de la flexibilidad, la eficiencia y la disponibilidad de la capacidad de procesamiento en GKE

La programación de Kubernetes se basa en las solicitudes de recursos declaradas. Cuando se programan aceleradores a gran escala, como GPU o TPU, las solicitudes de recursos estrictas pueden provocar que los clústeres no se puedan escalar si no hay hardware específico disponible. Puedes optimizar la disponibilidad de capacidad en GKE con las siguientes funciones:

  • Creación automática de grupos de nodos: Creación dinámica de grupos de nodos de varias familias.
  • Respaldo a nivel de la carga de trabajo: Tolerancias y selectores de nodos configurados para aceptar hardware alternativo.
  • Programación geográfica y regional: Capacidades multizonales y multirregionales de GKE
  • Administración de reservas: Consumir capacidad comprada anticipadamente antes de solicitar recursos on demand.

Prácticas recomendadas para la flexibilidad, la eficiencia y la disponibilidad de la capacidad de procesamiento en GKE

En esta sección, se proporcionan recomendaciones para aumentar la disponibilidad de capacidad cuando programes cargas de trabajo en GKE. Estas prácticas recomendadas abarcan estrategias como el diseño de requisitos de hardware flexibles, la configuración de la creación automática de grupos de nodos y el aprovechamiento de la distribución geográfica para adaptarse a las limitaciones de recursos. La creación automática de grupos de nodos administra automáticamente los grupos de nodos según las especificaciones de los Pods. En lugar de predefinir grupos de nodos, especifica los requisitos de recursos en tus manifiestos de Pod y permite que GKE cree nodos de forma dinámica.

También puedes descubrir e implementar las siguientes prácticas recomendadas con Compute Advisor. Para obtener más información, consulta Usa Compute Advisor.

Opciones para aumentar la disponibilidad de la capacidad de procesamiento

Para optimizar la disponibilidad de capacidad, puedes indicarle a GKE que evite vincular cargas de trabajo a una sola familia de máquinas estáticas o tipo de acelerador. A continuación, se muestran ejemplos de cómo puedes configurar grupos de nodos flexibles y reglas de afinidad de Pod para diferentes clases de cargas de trabajo. Las alternativas específicas que elijas dependerán de las demandas de recursos de tu aplicación:

  • Grupos de nodos de CPU de uso general:

    • Ejemplo principal: N2 (de uso general basado en Intel).
    • Alternativas de muestra: N2D (AMD EPYC), C2 o C2D (optimizadas para procesamiento) o E2 (optimizadas para costos).
    • Patrón de implementación: Configura las especificaciones de Pods con afinidad de nodos o tolerancias que permitan la programación en varias etiquetas de familias de máquinas, por ejemplo, cloud.google.com/machine-family en ["n2", "n2d", "c2d"]. Esta configuración permite que GKE aprovisione el grupo que tenga capacidad disponible.
  • Grupos de nodos de GPU:

    • Ejemplo principal: Serie A2 (GPU NVIDIA A100).
    • Alternativas de muestra: L4 (IA/AA universal) o T4 (inferencia).
    • Patrón de implementación: Configura grupos de nodos o ComputeClasses independientes para diferentes niveles de GPU. Para las cargas de trabajo que pueden ejecutarse sin funciones específicas de la GPU A100, permite que los Pods recurran a los grupos de L4 o T4 si el aprovisionamiento de A2 está restringido.
  • Grupos de nodo TPU:

    • Ejemplo principal: TPU Ironwood (TPU7x).
    • Alternativas de muestra: TPU v6 (Trillium) o TPU v5 (v5e o v5p).
    • Patrón de implementación: El aprovisionamiento de porciones de TPU puede ser muy restringido. Diseña cargas de trabajo de entrenamiento con flexibilidad a nivel del framework (por ejemplo, parámetros de configuración de JAX o PyTorch que admitan topologías de porciones variables) para implementarlas en porciones de v6 o v5 cuando la capacidad de TPU Ironwood (TPU7x) no esté disponible.

En la siguiente tabla, se resumen las selecciones principales y las alternativas de hardware para diferentes tipos de cargas de trabajo:

Tipo de carga de trabajo Ejemplo de selección principal Alternativas de muestra Consideraciones de la arquitectura
Cargas de trabajo del sistema o principales N2 N2D, C2D, E2 Abarca los grupos de hardware de Intel y AMD para la creación automática de grupos de nodos.
Inferencia y procesamiento de GPU A2 (A100) L4, T4 Se orienta de forma flexible a grupos de nodos de GPU de menor costo o mayor disponibilidad.
Entrenamiento de modelos en TPU TPU Ironwood (TPU7x) TPU v6, TPU v5 (v5e o v5p) Utiliza topologías flexibles para la programación basada en segmentos.

Implementa la creación automática de grupos de nodos y ComputeClasses

Para optimizar la disponibilidad de capacidad, combina la creación automática de grupos de nodos con ComputeClasses. La siguiente lista incluye las prácticas recomendadas:

  • Define ComputeClasses: Crea recursos de ComputeClass que especifiquen una lista priorizada de familias de máquinas, tipos de GPU o modelos de aprovisionamiento. GKE intenta aprovisionar nodos con la configuración de mayor prioridad disponible en la clase. Una lista de resguardo priorizada te ayuda significativamente a obtener los recursos que requieren tus cargas de trabajo. Por ejemplo, para evitar que GKE recurra a máquinas de uso general cuando un acelerador especializado preferido no esté disponible, agrega el parámetro de configuración whenUnsatisfiable: DoNotScaleUp a tu configuración de ComputeClass. Para obtener más información, consulta Cómo controlar los atributos de los nodos con ajuste de escala automático con ComputeClasses personalizadas.

  • Haz referencia a ComputeClasses en las especificaciones de Pod: En las especificaciones de Pod de tu carga de trabajo, usa la etiqueta cloud.google.com/compute-class para segmentar tu ComputeClass personalizada en lugar de una familia de máquinas o un tipo de GPU específicos. Para obtener más información, consulta Solicita una ComputeClass en una carga de trabajo.

  • Define varias tolerancias: Si no usas ComputeClasses, usa reglas de afinidad de nodos en las especificaciones de tus Pods que permitan un rango de familias de máquinas (como cloud.google.com/machine-family en ["n2", "n2d"]). Para obtener más información, consulta Configura la creación automática de grupos de nodos.

Flexibilidad geográfica y multirregional en GKE

Para aumentar la disponibilidad de capacidad, implementa clústeres de GKE que abarquen varias zonas o ejecuta arquitecturas de varios clústeres:

  • Clústeres multizonales: Asegúrate de que los grupos de nodos estén configurados para realizar un ajuste de escala automático en todas las zonas disponibles de una región.

  • Federación de clústeres multirregionales: Para trabajos asíncronos grandes (como la inferencia por lotes sin conexión o el entrenamiento distribuido), implementa un orquestador de varios clústeres (como Kueue o Cluster Director) para poner en cola las cargas de trabajo de forma global y enviarlas a una región con capacidad disponible.

  • Pods que se ejecutan en VMs Spot: Ejecuta cargas de trabajo interrumpibles en VMs Spot agregando tolerancias y dando instrucciones a GKE para que distribuya el exceso de capacidad en diferentes zonas.

Prácticas recomendadas adicionales para la flexibilidad, la eficiencia y la disponibilidad de la capacidad de procesamiento en GKE

Además de diversificar el hardware, incorpora estas prácticas recomendadas de GKE para optimizar el éxito del escalamiento del clúster:

  • Implementa el aprovisionamiento excesivo de Pods (búferes de capacidad): Implementa Pods de "pausa" de baja prioridad que reserven la capacidad de los nodos con anticipación. Cuando se envían cargas de trabajo de IA de alta prioridad y la capacidad regional está restringida, Kubernetes interrumpe de inmediato los Pods de pausa, lo que permite que los contenedores se inicien sin esperar el aprovisionamiento de nodos nuevos. Para obtener más información, consulta Acerca de los búferes de capacidad.
  • Usa el inicio flexible con aprovisionamiento en cola: Para trabajos de entrenamiento de modelos de IA y por lotes grandes, usa el inicio flexible con aprovisionamiento en cola, que se integra con Kueue y el programador dinámico de cargas de trabajo. El inicio flexible con aprovisionamiento en cola aprovisiona la asignación de nodos atómicos todo o nada, lo que evita fallas parciales en el aumento de la escala del clúster. Para obtener más información, consulta Ejecuta una carga de trabajo a gran escala con inicio flexible y aprovisionamiento en cola.
  • Habilita la transmisión de imágenes y la precarga de imágenes de contenedor: Para imágenes de contenedor de IA grandes (como imágenes de PyTorch o TensorFlow que superen los 10 GB), habilita la transmisión de imágenes de GKE o usa discos de arranque secundarios para la precarga de imágenes. Esta configuración reduce el tiempo de calentamiento de los nodos, lo que permite que los nodos recién aprovisionados comiencen a ejecutar cargas de trabajo en segundos. Para obtener más información, consulta Usa la transmisión de imágenes para extraer imágenes de contenedor y Usa discos de arranque secundarios para precargar datos o imágenes de contenedor.
  • Configura la política de ubicación del escalador automático del clúster en ANY: Configura grupos de nodos (en especial para VMs Spot o de inicio flexible) con la política de ubicación ANY. Este parámetro de configuración indica al escalador automático del clúster que busque la capacidad solicitada en todas las zonas especificadas. El escalador automático del clúster encuentra capacidad para balancear los recuentos de nodos. Para obtener más información, consulta la descripción general del escalador automático de clústeres.
  • Optimiza el uso del acelerador con el uso compartido de la GPU: Para las cargas de trabajo que no requieren una GPU dedicada, usa el uso compartido de la GPU, las GPUs de instancias múltiples (MIG) o NVIDIA MPS para permitir que varios contenedores compartan un solo acelerador. Este enfoque optimiza la capacidad efectiva en todos los grupos de nodos. Para obtener más información, consulta Acerca de las estrategias de uso compartido de GPU en GKE.

Usa Compute Advisor

Compute Advisor es una interfaz potenciada por IA en la consola deGoogle Cloud , que cuenta con la tecnología de Gemini y te ayuda a diseñar arquitecturas resilientes y rentables para GKE.

Compute Advisor proporciona orientación sobre la disponibilidad casi en tiempo real para las VMs de inicio flexible y las VMs Spot, y verifica las políticas y las cuotas de recursos de tu organización antes de la implementación. Compute Advisor no proporciona orientación sobre la disponibilidad para las cargas de trabajo que requieren recursos on demand.

Para acceder a Gemini en la consola de Google Cloud , sigue estos pasos:

  1. En la consola de Google Cloud , ve a la página Descripción general.

    Ir a Descripción general

  2. En la sección Diseña tu infraestructura con Compute Advisor, envía una instrucción. Gemini comienza a generar una respuesta.

  3. Para generar recomendaciones de arquitectura, ejecuta una de las siguientes instrucciones de ejemplo en Compute Advisor. Cuando haces clic en los botones Ejecutar instrucción en Compute Advisor, la consola de Google Cloud puede tardar más de 15 segundos en cargarse:

  • Estrategia general de aceleración:

    Caso de uso: Usa esta instrucción para analizar los indicadores de capacidad regional y recibir recomendaciones sobre los tipos de máquinas, las zonas y las estrategias de programación de resguardo cuando diseñes configuraciones de clústeres.

    Configure a GKE cluster to improve chances of obtaining scarce GPU or TPU capacity.
    

    Ejecutar instrucción en Compute Advisor

  • Flexibilidad geográfica y alternativas:

    Caso de uso: Usa esta instrucción cuando diseñes arquitecturas de varios clústeres o sistemas globales de filas de trabajos (por ejemplo, con Kueue) para cambiar la ejecución de cargas de trabajo entre regiones según la disponibilidad de recursos.

    Configure multi-region fallbacks and geographic scheduling on GKE to increase GPU availability.
    

    Ejecutar instrucción en Compute Advisor

  • Consumo de reservas prioritario:

    Caso de uso: Usa esta instrucción para generar patrones de configuración de YAML para la afinidad de Pod y las reglas de ajuste de escala automático que priorizan la capacidad de reserva.

    Configure GKE autoscaling rules and Pod specs to prioritize consuming active reservations before scaling into on-demand pools.
    

    Ejecutar instrucción en Compute Advisor

  • ComputeClasses para la priorización de respaldo:

    Caso de uso: Usa esta instrucción para generar el manifiesto YAML de un CustomResourceDefinition de ComputeClass que priorice las GPUs de alto rendimiento, pero que incluya respaldos de nivel inferior para garantizar la programación de cargas de trabajo.

    Define a ComputeClass manifest for GKE to prioritize A2 GPU nodes with automatic fallbacks to L4 or T4 GPUs.
    

    Ejecutar instrucción en Compute Advisor

  • Creación automática de grupos de nodos para la diversificación:

    Caso de uso: Usa esta instrucción para escribir el manifiesto YAML de los límites de recursos del escalador automático de clústeres de GKE y las reglas de afinidad de Pods que permiten que el NAP aprovisione automáticamente nodos alternativos de GPU o CPU.

    Configure GKE node pool auto-creation to diversify machine families and prevent pending pods when regional accelerator capacity is constrained.
    

    Ejecutar instrucción en Compute Advisor

¿Qué sigue?