Ayude a mejorar esta página
¿Quiere contribuir a esta guía del usuario? Desplácese hasta el final de esta página y seleccione Editar esta página en GitHub. Sus contribuciones ayudarán a que nuestra guía del usuario sea mejor para todos.
Creación de nodos autoadministrados con bloques de capacidad para ML
Los bloques de capacidad para machine learning (ML) permiten reservar instancias de GPU en una fecha futura para respaldar cargas de trabajo de ML de corta duración. Para obtener más información, consulte Bloques de capacidad para ML en la Guía del usuario de Amazon EC2 para instancias de Linux.
Consideraciones
importante
-
Los bloques de capacidad solo están disponibles para determinados tipos de instancias de Amazon EC2 y Regiones de AWS. Para obtener información sobre compatibilidad, consulte los requisitos previos para trabajar con bloques de capacidad en la Guía del usuario de Amazon EC2 para instancias de Linux.
-
Actualmente, los bloques de capacidad no se pueden usar con Karpenter.
-
Si crea el grupo de nodos autoadministrados antes de que se active la reserva de capacidad, defina la capacidad deseada como
0
. -
Para que los nodos dispongan de tiempo suficiente para vaciarse correctamente, le sugerimos que programe el escalado para que llegue a cero más de 30 minutos antes de la hora de finalización de la reserva del bloque de capacidad.
-
Para agotar los Pods correctamente, se recomienda configurar AWS Node Termination Handler, tal como se explica en los pasos de ejemplo.
Uso de bloques de capacidad con nodos autoadministrados
Puede utilizar bloques de capacidad con Amazon EKS para aprovisionar y escalar nodos autoadministrados. En los siguientes pasos se ofrece un ejemplo general. Los ejemplos de plantillas AWS CloudFormation no cubren todos los aspectos necesarios en una carga de trabajo de producción. Por lo general, también querrá un script de arranque para unir el nodo al clúster, especificar la AMI acelerada de Amazon EKS y un perfil de instancia adecuado para unirse al clúster. Para obtener más información, consulte Creación de nodos autoadministrados de Amazon Linux.
-
Cree una plantilla de lanzamiento que se adapte a su carga de trabajo. Para obtener más información, consulte Use Capacity Blocks for machine learning workloads en la Guía del usuario de Amazon EC2 Auto Scaling.
Asegúrese de que
LaunchTemplateData
incluya lo siguiente:-
InstanceMarketOptions
con"capacity-block"
establecido enMarketType
-
CapacityReservationSpecification: CapacityReservationTarget
conCapacityReservationId
establecido en el bloque de capacidad (por ejemplo:
)cr-02168da1478b509e0
-
IamInstanceProfile
con elArn
establecido en el
aplicableiam-instance-profile-arn
-
ImageId
establecido en el
aplicableimage-id
-
InstanceType
establecido en un tipo de instancia que admita bloques de capacidad (por ejemplo:
)p5.48xlarge
-
SecurityGroupIds
establecido en los ID aplicables (por ejemplo:
)sg-05b1d815d1EXAMPLE
-
UserData
establecido en el
aplicable a su grupo de nodos autoadministradouser-data
A continuación se muestra un extracto de una plantilla de CloudFormation que crea una plantilla de lanzamiento dirigida a un bloque de capacidad.
NodeLaunchTemplate: Type: "AWS::EC2::LaunchTemplate" Properties: LaunchTemplateData: InstanceMarketOptions: MarketType: "capacity-block" CapacityReservationSpecification: CapacityReservationTarget: CapacityReservationId: "cr-
02168da1478b509e0
" IamInstanceProfile: Arn:iam-instance-profile-arn
ImageId:image-id
InstanceType: p5.48xlarge KeyName:key-name
SecurityGroupIds: - sg-05b1d815d1EXAMPLE
UserData:user-data
Debe pasar la subred de la zona de disponibilidad en la que se realiza la reserva, ya que los bloques de capacidad son zonales.
-
-
Utilice la plantilla de lanzamiento para crear un grupo de nodos autoadministrado. Si lo hace antes de que se active la reserva de capacidad, ajuste la capacidad deseada a
0
. Al crear el grupo de nodos, asegúrese de especificar únicamente la subred correspondiente a la zona de disponibilidad en la que se va a reservar la capacidad.A continuación se muestra un ejemplo de plantilla de CloudFormation a la que puede hacer referencia al crear una que se aplique a su carga de trabajo. En este ejemplo se obtienen
LaunchTemplateId
yVersion
del recursoAWS::Amazon EC2::LaunchTemplate
que se muestra en el paso anterior. También se obtienen los valores deDesiredCapacity
,MaxSize
,MinSize
yVPCZoneIdentifier
que se declaran en otras partes de la misma plantilla.NodeGroup: Type: "AWS::AutoScaling::AutoScalingGroup" Properties: DesiredCapacity: !Ref NodeAutoScalingGroupDesiredCapacity LaunchTemplate: LaunchTemplateId: !Ref NodeLaunchTemplate Version: !GetAtt NodeLaunchTemplate.LatestVersionNumber MaxSize: !Ref NodeAutoScalingGroupMaxSize MinSize: !Ref NodeAutoScalingGroupMinSize VPCZoneIdentifier: !Ref Subnets Tags: - Key: Name PropagateAtLaunch: true Value: !Sub ${ClusterName}-${NodeGroupName}-Node - Key: !Sub kubernetes.io/cluster/${ClusterName} PropagateAtLaunch: true Value: owned
-
Una vez que el grupo de nodos se ha creado correctamente, asegúrese de registrar el valor de
NodeInstanceRole
correspondiente al grupo de nodos que se ha creado. Esto es necesario para asegurarse de que, al escalar el grupo de nodos, los nuevos nodos se unan al clúster y Kubernetes pueda reconocerlos. Para obtener más información, consulte las instrucciones de la AWS Management Console en Creación de nodos autoadministrados de Amazon Linux. -
Se recomienda crear una política de escalado programado para el grupo de escalado automático que se ajuste a los tiempos de reserva del bloque de capacidad. 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.
Puede utilizar todas las instancias que haya reservado hasta 30 minutos antes de la hora de finalización del bloque de capacidad. Las instancias que aún estén en ejecución en ese momento comenzarán a finalizar. Para que los nodos dispongan de tiempo suficiente para vaciarse correctamente, le sugerimos que programe el escalado para que llegue a cero más de 30 minutos antes de la hora de finalización de la reserva del bloque de capacidad.
Si en lugar de esto desea escalar verticalmente cada vez que el estado de la reserva de capacidad sea
Active
, debe actualizar la capacidad deseada para el grupo de escalado automático a la hora de inicio de la reserva del bloque de capacidad. En ese caso, también tendría que reducir verticalmente y manualmente más de 30 minutos antes de la hora de finalización de la reserva del bloque de capacidad. -
El grupo de nodos ya está listo para la programación de cargas de trabajo y Pods.
-
Para vaciar los Pods correctamente, se recomienda configurar AWS Node Termination Handler. Este controlador podrá observar eventos del ciclo de vida de “reducción horizontal de grupos de escalado automático” de Amazon EC2 Auto Scaling mediante EventBridge y permitir que el plano de control de Kubernetes tome las medidas necesarias antes de que la instancia deje de estar disponible. De lo contrario, los objetos de Pods y Kubernetes quedarán bloqueados en estado pendiente. Para obtener más información, consulte AWS Node Termination Handler
en GitHub. Si no configura un controlador de finalización de nodos, le recomendamos que comience a vaciar los Pods manualmente antes de la ventana de 30 minutos, con el fin de que tengan tiempo suficiente para vaciarse correctamente.