View a markdown version of this page

Administración de la computación para cargas de trabajo de IA y ML en Amazon EKS con grupos de nodos - Amazon EKS

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 en Amazon EKS con grupos de nodos

sugerencia

Regístrese en los próximos talleres de IA/ML de Amazon EKS.

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 grupos de nodos administrados o nodos autoadministrados de Amazon EKS.

Los grupos de nodos administrados y los nodos autoadministrados de EKS utilizan los grupos de escalado automático (ASG) de EC2. Los grupos de nodos administrados de EKS cuentan con API de EKS específicas para crear, actualizar y eliminar nodos, y también incorporan la funcionalidad de reparación de nodos y los enlaces de terminación del ciclo de vida integrados. Los nodos autoadministrados de EKS se implementan y administran directamente a través de las API de EC2.

Con estas opciones, puede definir el tipo de instancia, la cantidad deseada, los límites de escalado y la plantilla de lanzamiento de EC2 por adelantado. Considere la posibilidad de utilizar grupos de nodos administrados o nodos autoadministrados de EKS si también tiene cargas de trabajo que no son de EKS y prefiere la coherencia de la configuración mediante las plantillas de lanzamiento de EC2. Los grupos de nodos de EKS son ideales para cargas de trabajo de entrenamiento y refinamiento en las que se conoce de antemano el consumo de computación acelerada. Tenga en cuenta que tanto el modo automático de EKS como Karpenter también admiten el aprovisionamiento de capacidad estática; consulte Administración de la computación para cargas de trabajo de IA y ML con el modo automático de EKS y Karpenter para obtener más información.

Los grupos de nodos administrados y los nodos autoadministrados de EKS admiten todas las opciones de compra de computación acelerada (bajo demanda, spot, reservas de capacidad bajo demanda y bloques de capacidad para ML). Debe crear un grupo de nodos administrados o autoadministrados independiente por tipo de capacidad, cada uno con su propia plantilla de lanzamiento, tipos de instancias y configuración de escalado. Esto le proporciona un control explícito y respaldado por ASG sobre cada grupo de capacidades sin una lógica de aprovisionamiento dinámico heterogéneo.

Grupos de nodos administrados frente a nodos autoadministrados de EKS

La elección entre grupos de nodos administrados y nodos autoadministrados de EKS depende del nivel de personalización y control que necesite. Los grupos de nodos administrados de EKS permiten personalizar un subconjunto de plantillas de lanzamiento de EC2, mientras que los nodos autoadministrados admiten toda la gama de plantillas de lanzamiento de EC2. Si no tiene ningún motivo específico para personalizar y administrar el ciclo de vida de los nodos por su cuenta, comience con los grupos de nodos administrados de EKS y pase a los nodos autoadministrados solo cuando lo exija un requisito específico.

Utilice grupos de nodos administrados cuando: desee que EKS gestione la selección de AMI, el arranque de nodos, las actualizaciones continuas, la reparación de nodos y los flujos de trabajo de vaciado controlado en su nombre. Los grupos de nodos administrados de EKS son el punto de partida recomendado si no prefiere utilizar el modo automático de EKS o Karpenter para las cargas de trabajo de entrenamiento e inferencia. Al utilizar bloques de capacidad para ML, los grupos de nodos administrados de EKS crean automáticamente una política de escalado programada que vacía el grupo de nodos 40 minutos antes de que finalice la reserva, lo que elimina la necesidad de utilizar AWS Node Termination Handler o su propia automatización de reducción vertical. Utilice grupos de nodos administrados de EKS cuando utilice una AMI optimizada de EKS compatible, cuando no necesite personalizaciones profundas de plantillas de lanzamiento de EC2 por kernel y cuando desee una ruta de actualización de nodos más sencilla para las versiones de Kubernetes.

Utilice grupos de nodos autoadministrados cuando: necesite un control total sobre la plantilla de lanzamiento de EC2, la AMI, los parámetros del kernel, la configuración del tiempo de ejecución del contenedor o los scripts de arranque personalizados. Las situaciones más comunes de ML incluyen ajustar la configuración del kernel y la NIC para el entrenamiento distribuido con Elastic Fabric Adapter (EFA) o la integración con un controlador de ciclo de vida de nodos personalizado. Los nodos autoadministrados le ofrecen la flexibilidad de enviar los datos de usuario y el perfil de instancia de IAM que necesite, pero asumirá la responsabilidad de las actualizaciones, las políticas de escalado programadas y los enlaces del ciclo de vida, como AWS Node Termination Handler.

Reserva de GPU con bloques de capacidad para ML

Los bloques de capacidad para machine learning (ML) le permiten reservar instancias de GPU en una fecha futura para cargas de trabajo de entrenamiento o inferencia con límite de tiempo. Para obtener más información, consulte Bloques de capacidad para ML en la Guía del usuario de Amazon EC2.

Puede utilizar reservas de bloques de capacidad a través de grupos de nodos administrados y nodos autoadministrados de EKS. La configuración de la plantilla de lanzamiento de EC2 es la misma en ambos casos. El flujo de trabajo de creación de nodos, el comportamiento de reducción vertical y los enlaces del ciclo de vida para la finalización de la carga de trabajo difieren según las opciones de aprovisionamiento.

Consideraciones

  • Los bloques de capacidad solo están disponibles para determinados tipos de instancias de Amazon EC2 y regiones de AWS. Consulte Requisitos previos para trabajar con bloques de capacidad para obtener más información.

  • Los bloques de capacidad son zonales. Durante la creación del grupo de nodos, debe usar la subred en la misma zona de disponibilidad (AZ) que la reserva del bloque de capacidad.

  • Si crea un grupo de nodos antes de que se active la reserva del bloque de capacidad, establezca la capacidad deseada en 0 durante la creación del grupo de nodos.

  • Para dejar tiempo suficiente para el vaciado controlado de las cargas de trabajo, programe el escalado a cero más de 30 minutos antes de que finalice la reserva del bloque de capacidad. EC2 comienza a cerrar las instancias 30 minutos antes de que acabe la reserva.

Creación de grupos de nodos administrados con bloques de capacidad para ML

Los grupos de nodos administrados y los nodos autoadministrados de EKS requieren el uso de una plantilla de lanzamiento de EC2 personalizada que tenga como destino la reserva del bloque de capacidad. A continuación se muestran los campos mínimos obligatorios para los grupos de nodos administrados y los nodos autoadministrados de EKS. Se requieren campos adicionales para los nodos autoadministrados, como se muestra en los pasos de los nodos autoadministrados que se indican a continuación.

Los LaunchTemplateData deben incluir lo siguiente:

  • InstanceMarketOptions con MarketType establecido en "capacity-block"

  • CapacityReservationSpecification: CapacityReservationTarget con CapacityReservationId establecido en el ID del bloque de capacidad. Por ejemplo, cr-0123456789abcdef0.

  • InstanceType establecido en el tipo de instancia de la reserva del bloque de capacidad. Por ejemplo, p5.48xlarge.

Estos requisitos se muestran en los ejemplos que aparecen a continuación para crear la plantilla de lanzamiento para los grupos de nodos administrados y los nodos autoadministrados de EKS.

Managed node groups
  1. Cree un archivo denominado eks-capacity-block-lt.json con el siguiente contenido.

    Sustituya el contenido de CapacityReservationId y InstanceType por los valores del bloque de capacidad. Para obtener más información sobre los campos adicionales de la plantilla de lanzamiento de EC2, consulte Personalización de nodos administrados con plantillas de lanzamiento y Uso de bloques de capacidad para cargas de trabajo de machine learning.

    { "LaunchTemplateData": { "InstanceMarketOptions": { "MarketType": "capacity-block" }, "CapacityReservationSpecification": { "CapacityReservationTarget": { "CapacityReservationId": "cr-0123456789abcdef0" } }, "InstanceType": "p5.48xlarge" } }
  2. Cree la plantilla de lanzamiento.

    aws ec2 create-launch-template \ --launch-template-name EKS-Capacity-Block-Launch-Template \ --launch-template-data file://eks-capacity-block-lt.json
  3. Utilice la plantilla de lanzamiento para crear un grupo de nodos administrados de EKS. Sustituya los marcadores de posición del comando que aparece a continuación por los valores aplicables al entorno. El siguiente comando establece --ami-type en las AMI de NVIDIA optimizadas para EKS de AL2023. Consulte Uso de AMI aceleradas optimizadas para EKS para instancias de GPU para obtener más información sobre las AMI optimizadas para EKS disponibles. Si utiliza una AMI personalizada con grupos de nodos administrados de EKS, especifique el ID de AMI en la plantilla de lanzamiento.

    Al crear un grupo de nodos administrados de EKS que utiliza bloques de capacidad, haga lo siguiente:

    • Establece --capacity-type en "CAPACITY_BLOCK".

    • Especifique solo la subred en la misma zona de disponibilidad que la reserva de capacidad.

    • Si especifica un valor distinto de cero en desiredSize antes de que la reserva esté activa, el grupo de escalado automático informa de los errores de lanzamiento hasta que la reserva se active. Una vez activas, las instancias se lanzan y el ASG escala verticalmente hasta el desiredSize solicitado.

      aws eks create-nodegroup \ --cluster-name my-eks-cluster \ --nodegroup-name eks-cb-nodes \ --node-role "arn:aws:iam::111122223333:role/myNodeRole" \ --region region-code \ --subnets subnet-ExampleID1 \ --ami-type "AL2023_x86_64_NVIDIA" \ --scaling-config minSize=0,maxSize=2,desiredSize=0 \ --capacity-type "CAPACITY_BLOCK" \ --launch-template name="EKS-Capacity-Block-Launch-Template"
  4. Si ha establecido desiredSize en 0 en el momento de la creación, escale verticalmente el grupo de nodos cuando se active la reserva de capacidad con uno de los siguientes métodos:

    • Una política de escalado programado en el ASG alineada con la hora de inicio de la reserva. Para obtener más información, consulte Scheduled scaling for Amazon EC2 Auto Scaling en la Guía del usuario de Amazon EC2 Auto Scaling.

    • La consola de Amazon EKS o aws eks update-nodegroup-config para actualizar la configuración de escalado.

  5. Verifique que los nodos se unan al clúster después del escalado.

  6. EKS crea automáticamente una política de escalado programada denominada Reducción vertical de la capacidad del grupo de nodos de Amazon EKS antes del fin de la reserva para reducir verticalmente el grupo de nodos hasta 0 40 minutos antes de que finalice la reserva. Esto permite que los pods tengan tiempo de vaciarse de forma controlada antes de que EC2 comience a terminar las instancias a los 30 minutos. No edite ni elimine esta acción programada.

Self-managed nodes
  1. Cree un archivo denominado eks-capacity-block-lt.json con el siguiente contenido.

    Sustituya el contenido de CapacityReservationId y InstanceType por los valores del bloque de capacidad. Para obtener más información sobre los campos adicionales de la plantilla de lanzamiento de EC2, consulte Personalización de nodos administrados con plantillas de lanzamiento y Uso de bloques de capacidad para cargas de trabajo de machine learning.

    Sustituya el contenido de IamInstanceProfile, ImageId, SecurityGroupIds, UserData, KeyName por los valores correspondientes al entorno.

    { "LaunchTemplateData": { "InstanceMarketOptions": { "MarketType": "capacity-block" }, "CapacityReservationSpecification": { "CapacityReservationTarget": { "CapacityReservationId": "cr-0123456789abcdef0" } }, "IamInstanceProfile": { "Arn": "arn:aws:iam::111122223333:role/myNodeRole" }, "ImageId": "image-id", "InstanceType": "p5.48xlarge", "KeyName": "key-name", "SecurityGroupIds": "sg-05b1d815d1EXAMPLE" ], "UserData": "user-data" } }
  2. Cree la plantilla de lanzamiento.

    aws ec2 create-launch-template \ --launch-template-name EKS-Capacity-Block-Launch-Template \ --launch-template-data file://eks-capacity-block-lt.json
  3. Utilice la plantilla de lanzamiento para crear el grupo de escalado automático según los pasos indicados en Creación de nodos autoadministrados de Amazon Linux. Si la reserva aún no está activa, establezca DesiredCapacity en 0. Especifique solo la subred en la zona de disponibilidad en la que se reserva la capacidad.

  4. Una vez creados los nodos autoadministrados con DesiredCapacity establecido en 0, cree una política de escalado programado en el grupo de escalado automático alineada con los tiempos de reserva del bloque de capacidad. Para obtener más información, consulte Escalado programado para Amazon EC2 Auto Scaling.

    Puede usar las instancias reservadas hasta 30 minutos antes de la hora de finalización de la reserva. Programe el escalado a cero más de 30 minutos antes de la hora de finalización para que los pods tengan tiempo de vaciarse.

    Si prefieres escalar manualmente, actualiza la capacidad deseada de ASG a la hora de inicio de la reserva y, de nuevo, más de 30 minutos antes de la hora de finalización.

  5. Para vaciar los pods de forma controlada, configure AWS Node Termination Handler. Observa los eventos del ciclo de vida de reducción horizontal de ASG de Amazon EC2 Auto Scaling mediante EventBridge y permite que el plano de control de Kubernetes actúe antes de que la instancia deje de estar disponible. De lo contrario, los pods y los objetos de Kubernetes quedarán bloqueados en estado Pendiente. Para obtener más información, consulte AWS Node Termination Handler en GitHub.

    Si no configura Node Termination Handler, vacíe los pods manualmente antes del plazo de 30 minutos para que tengan tiempo suficiente de vaciarse de forma controlada.