Ayude a mejorar esta página
Para contribuir a esta guía del usuario, elija el enlace Edit this page on GitHub que se encuentra en el panel derecho de cada página.
Administración de la computación para cargas de trabajo de IA y ML con el modo automático de EKS y Karpenter
sugerencia
Regístrese
En esta sección, se trata cómo administrar la computación acelerada (AWS Trainium, GPU de NVIDIA) para las cargas de trabajo de entrenamiento de IA e inferencia con el modo automático de Amazon EKS o Karpenter autoadministrado.
El modo automático de EKS y Karpenter admiten dos modos de aprovisionamiento: aprovisionamiento dinámico y aprovisionamiento estático. Con el aprovisionamiento dinámico, el modo automático de EKS y Karpenter aprovisionan y escalan las instancias de computación acelerada a medida que se programan las cargas de trabajo en el clúster. Con el aprovisionamiento estático, el modo automático de EKS y Karpenter aprovisionan y mantienen un número fijo de nodos. El aprovisionamiento dinámico y estático se puede utilizar en el mismo clúster para mantener un grupo de capacidad de línea de base constante y, al mismo tiempo, adaptarse a las demandas de la carga de trabajo.
El modo automático de EKS y Karpenter admiten las cuatro opciones de compra de capacidad (bajo demanda, spot, bloques de capacidad y ODCR) y siempre aprovisionan primero la capacidad reservada, seguida de spot o bajo demanda.
Modo automático de EKS frente a Karpenter
Ambos enfoques comparten la API NodePool, pero difieren en cuanto a la propiedad operativa, las API de recursos, la compatibilidad con los sistemas operativos, la gestión de las interrupciones de spot y la flexibilidad de configuración.
| Característica | Modo automático de EKS | Karpenter autoadministrado |
|---|---|---|
|
Lo mejor para |
Equipos que prefieren una infraestructura administrada con costos operativos mínimos |
Equipos que prefieren tener el control total sobre el ciclo de vida de los nodos, las AMI, el ajuste del SO y los parches. |
|
Modelo operativo |
AWS aprovisiona y administra el controlador de Karpenter, los controladores de GPU y Trainium, los complementos para dispositivos, los parches del SO y la gestión de interrupciones de spot. |
Usted instala y opera el controlador de Karpenter en el clúster y es responsable de los controladores de GPU y Trainium, los complementos para dispositivos, el ciclo de vida de la AMI, los parches y la gestión de interrupciones de spot. |
|
Opciones de computación |
Bajo demanda, spot, ODCR y bloques de capacidad para ML |
Bajo demanda, spot, ODCR y bloques de capacidad para ML |
|
API de recursos |
|
|
|
Sistema operativo del nodo |
Solo Bottlerocket. Se incluyen las dependencias de GPU de NVIDIA, AWS Trainium y EFA. |
AL2023, Bottlerocket, Windows o su propia AMI. |
|
Duración del nodo |
Duración máxima del nodo de 21 días para la aplicación de parches de seguridad. Las cargas de trabajo deben tolerar la rotación de nodos. |
Define el ciclo de vida del nodo mediante los presupuestos de |
|
Gestión de interrupciones de spot |
Nativo. No se requiere ninguna cola de SQS ni Node Termination Handler. |
Es su responsabilidad configurarlo y habilitarlo. |
|
Extracción rápida de contenedores |
La extracción en paralelo de SOCI se incluye en todas las instancias de las familias G, P y Trn |
Es su responsabilidad configurarlo y habilitarlo. |
|
Grupos de ubicación de EC2 |
Clúster, partición, distribución |
Clúster, partición, distribución |
|
Configuración de la interfaz de red |
Configuración por interfaz para el tipo |
Configuración por interfaz para el tipo |
|
Reparación de nodos |
Habilitado de forma predeterminada, se incluye el agente de supervisión de nodos EKS |
Habilitado de forma opcional, el agente de supervisión de nodos de EKS es autoadministrado |
|
Precios |
Cuota de administración del modo automático de EKS |
Código abierto. Pagará por las instancias de EC2 subyacentes. |
Etiquetas conocidas de IA y ML comunes
El modo automático de EKS y Karpenter muestran etiquetas de instancia que puede usar en requirements del NodePool y nodeSelector o nodeAffinity del pod para segmentar las cargas de trabajo sin necesidad de codificar de forma rígida los tipos de instancia. El prefijo de la etiqueta difiere entre ambos: el modo automático de EKS utiliza eks.amazonaws.com/, mientras que Karpenter autoadministrado usa karpenter.k8s.aws/.
En las siguientes tablas, se muestran las etiquetas relevantes que se pueden usar en NodePools. El modo automático de EKS y Karpenter también aplican las etiquetas que figuran en la documentación de Karpenter
Etiquetas de programación para la capacidad reservada
Cuando el modo automático de EKS o Karpenter lanzan un nodo en una reserva, agregan las siguientes etiquetas. Utilícelas en el nodeSelector, la afinidad de nodos o los requisitos del NodePool para dirigir las cargas de trabajo.
-
karpenter.sh/capacity-type:reserved,on-demand, ospot. Indica la capacidad que respalda el nodo. -
karpenter.k8s.aws/capacity-reservation-id: ID de reserva específico en el que se lanzó el nodo. -
karpenter.k8s.aws/capacity-reservation-type:defaultpara ODCR,capacity-blockpara bloques de capacidad.
En los siguientes ejemplos, se muestran patrones de programación comunes:
Fijación de un pod a una reserva específica (sin alternativas):
spec: nodeSelector: karpenter.sh/capacity-type: reserved karpenter.k8s.aws/capacity-reservation-id: "cr-0123456789abcdef0"
Segmentación solo de nodos de ODCR (cualquier ODCR, no bloques de capacidad):
spec: nodeSelector: karpenter.sh/capacity-type: reserved karpenter.k8s.aws/capacity-reservation-type: default
Segmentación de cualquier capacidad reservada (ODCR o bloque de capacidad):
spec: nodeSelector: karpenter.sh/capacity-type: reserved
Preferencia de la capacidad reservada, pero spot o bajo demanda como alternativas si no está disponible:
spec: affinity: nodeAffinity: preferredDuringSchedulingIgnoredDuringExecution: - weight: 100 preference: matchExpressions: - key: karpenter.sh/capacity-type operator: In values: ["reserved"]
Comportamiento de vencimiento de la reserva
Las ODCR y los bloques de capacidad se comportan de forma diferente cuando finaliza la reserva. Asegúrese de que la estrategia de programación y puntos de control coincida con el tipo de reserva que respalda su carga de trabajo.
ODCR
Una instancia lanzada en una ODCR no está en esa ODCR de forma indefinida. La ODCR puede vencer, cancelarse o la instancia puede eliminarse manualmente de la ODCR. Si ocurre alguna de estas situaciones y el modo automático de EKS o Karpenter detecta que la instancia ya no pertenece a una ODCR, actualiza la etiqueta karpenter.sh/capacity-type del nodo de reserved a on-demand. La instancia continúa funcionando con la capacidad bajo demanda estándar y los pods existentes continúan funcionando ininterrumpidamente.
nota
Los pods programados con un nodeSelector: karpenter.sh/capacity-type: reserved estricto no se programarán en el nodo si se han vuelto a etiquetar. Para que las cargas de trabajo sobrevivan al vencimiento o la cancelación de la ODCR, utilice el patrón preferredDuringSchedulingIgnoredDuringExecution que se muestra anteriormente en lugar de un nodeSelector.
Bloques de capacidad
A diferencia de las ODCR, los bloques de capacidad siempre tienen una hora de finalización y EC2 termina las instancias de los bloques de capacidad 30 minutos antes de la hora de finalización (60 minutos para los tipos de instancias UltraServer). Planifique los trabajos de entrenamiento e inferencia para completar o guardar el estado antes de que finalice el periodo de reserva. Los pods que utilicen un nodeSelector estricto para un capacity-reservation-id específico pasan a Pending una vez que el bloque venza y no se reprogramarán en ningún otro lugar. Combine los puntos de control con el patrón de afinidad flexible anterior si necesita que las cargas de trabajo pasen a otra capacidad durante el vencimiento del bloque de capacidad.
-
Puede usar instancias reservadas hasta 30 minutos antes de la hora de finalización del bloque de capacidad para la mayoría de los tipos de instancias, o 60 minutos antes de la hora de finalización para los tipos de instancias UltraServer.
-
El modo automático de EKS y Karpenter comienzan a vaciar de forma preventiva los nodos de un bloque de capacidad 10 minutos antes de que EC2 inicie la terminación, por lo que las cargas de trabajo tienen tiempo de guardar puntos de control y cerrarse de forma controlada.
NodePools de capacidad estática
El modo automático de EKS y Karpenter admiten NodePools de capacidad estática, que mantienen un número fijo de nodos independientemente de la demanda de la carga de trabajo. Los grupos estáticos eliminan los retrasos en el arranque en frío para inferencias sensibles a la latencia y permiten reservar una huella de infraestructura mínima para el clúster.
Para configurar la capacidad estática, se establece el campo replicas en el NodePool.
Consideraciones
-
Una vez que
replicasestá establecido en un NodePool, no se puede eliminar. Un solo NodePool no puede cambiar entre el aprovisionamiento de capacidad estática y dinámica. -
Los NodePools de capacidad estática no se tienen en cuenta para la consolidación. Establezca
limits.nodespor encima dereplicaspara permitir el escalado temporal durante el vencimiento o la desviación de la AMI. -
Para una distribución predecible de las zonas de disponibilidad (AZ), cree un NodePool de capacidad estática por AZ en lugar de abarcar varias zonas en un solo grupo.
bloques de capacidad para ML
Los bloques de capacidad para ML le permiten reservar instancias de la familia P y Trainium para un periodo futuro definido. Son de prepago, por lo que el modo automático de EKS y Karpenter los consideran gratuitos y los priorizan frente a spot y bajo demanda. Los bloques de capacidad para ML pueden tener una duración de reserva de entre 1 y 14 días o un múltiplo de 7 días, hasta 182 días (6 meses).
Para usar bloques de capacidad para ML con el modo automático de EKS o Karpenter, configure capacityReservationSelectorTerms con el ID de reserva de capacidad en su NodeClass. No puede utilizar la coincidencia de reservas abiertas con bloques de capacidad para ML. Un término puede especificar un ID, un conjunto de etiquetas o criterios de coincidencia de instancias para llevar a cabo la selección. Al especificar las etiquetas, seleccionará todas las reservas de capacidad accesibles desde la cuenta que tengan etiquetas coincidentes. Esto se puede restringir aún más si se especifica el ID de la cuenta del propietario.
Para obtener más ejemplos, consulte la documentación de Karpenter
Reservas de capacidad bajo demanda (ODCR)
Las ODCR garantizan la capacidad en una zona de disponibilidad (AZ) específica sin un compromiso a largo plazo. Se le facturará según las tarifas estándar bajo demanda, tanto si utiliza la capacidad como si no. Las ODCR son compatibles con todas las familias de GPU de NVIDIA, incluidas las instancias de la familia G que no son compatibles con bloques de capacidad para ML. Las ODCR son de prepago, por lo que el modo automático de EKS y Karpenter los consideran gratuitos y los priorizan frente a spot y bajo demanda.
Las ODCR se comportan de forma diferente a los bloques de capacidad para ML al final de la reserva. Cuando una ODCR vence o se cancela, la instancia continúa ejecutándose de forma estándar bajo demanda. Para obtener más información, consulte Comportamiento de vencimiento de la reserva.
Para usar las ODCR con el modo automático de EKS o Karpenter, configure capacityReservationSelectorTerms con los términos de la reserva de capacidad en su NodeClass. Un término puede especificar un ID, un conjunto de etiquetas o criterios de coincidencia de instancias para llevar a cabo la selección. Al especificar las etiquetas, seleccionará todas las reservas de capacidad accesibles desde la cuenta que tengan etiquetas coincidentes. Al especificar los criterios de coincidencia de instancias, selecciona las reservas según su comportamiento de coincidencia: abiertas (coincide con todas las instancias compatibles) o segmentadas (solo coincide con las instancias segmentadas explícitamente). Esto se puede restringir aún más si se especifica el ID de la cuenta del propietario.
Para obtener más ejemplos, consulte la documentación de Karpenter
Bajo demanda
Bajo demanda es el tipo de capacidad predeterminado y se puede utilizar con aprovisionamiento estático o dinámico en el modo automático de EKS y Karpenter. Para solicitar instancias bajo demanda de forma explícita, establezca karpenter.sh/capacity-type: on-demand en su NodePool. El modo automático de EKS y Karpenter seleccionan la instancia de menor precio que satisfaga las solicitudes de recursos del pod. Utilice la opción bajo demanda para el desarrollo, la creación de prototipos, el escalado de inferencias impredecible y cualquier carga de trabajo que requiera disponibilidad inmediata sin riesgo de interrupción.
Spot
Instancias de spot ofrece hasta un 90 % de ahorro en comparación con las instancias bajo demanda al utilizar la capacidad sobrante de EC2. AWS puede reclamar instancias de spot con un aviso de interrupción de 2 minutos. Para maximizar la disponibilidad, incluya varias familias de instancias en el NodePool. Combine las cargas de trabajo de Spot con un PodDisruptionBudget y un punto de control en un almacenamiento duradero (Amazon S3 o Amazon EFS) a intervalos regulares para que los pods puedan guardar el estado durante el plazo de vaciado.
Spot es ideal para cargas de trabajo de entrenamiento e inferencia reanudables y tolerantes a errores, en las que se aceptan interrupciones ocasionales a cambio de un importante ahorro de costos.
Entre los candidatos comunes, se incluyen los siguientes:
-
Ajuste y barridos de hiperparámetros: muchas pruebas cortas y en paralelo que se pueden reintentar si se interrumpen.
-
Entrenamiento distribuido con puntos de control: trabajos de larga duración que guardan periódicamente el estado en S3 o FSx y que pueden reanudarse desde el último punto de control después de la pérdida del nodo.
-
Inferencia por lotes y sin conexión: trabajos de puntuación a gran escala sobre conjuntos de datos en los que la latencia de extremo a extremo se mide en horas en lugar de segundos.
-
Canalizaciones de preprocesamiento de datos e ingeniería de características: transformaciones en paralelo en grandes conjuntos de datos.
-
Punto de referencia y evaluación del modelo: tareas repetibles que producen resultados idempotentes.
-
Desarrollo, creación de prototipos y cuadernos: experimentación interactiva en la que los usuarios pueden tolerar reinicios ocasionales.
Evite spot para inferencias en tiempo real sensibles a la latencia, puntos de conexión de producción sujetos a SLA y cargas de trabajo que no utilizan puntos de control o que no toleran los reinicios.
Para solicitar instancias de spot de forma explícita, establezca karpenter.sh/capacity-type: spot en su NodePool.