Créez des nœuds autogérés avec Capacity Blocks for ML - Amazon EKS

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Créez des nœuds autogérés avec Capacity Blocks for ML

Les blocs de capacité pour l'apprentissage automatique (ML) vous permettent de réserver des GPU instances à une date future afin de prendre en charge vos charges de travail de machine learning de courte durée. Pour plus d'informations, consultez Capacity Blocks for ML dans le guide de EC2 l'utilisateur Amazon pour les instances Linux.

Considérations

Important
  • Les blocs de capacité ne sont disponibles que pour certains types d'EC2instances Amazon et certaines AWS régions. Pour plus d'informations sur la compatibilité, consultez les conditions préalables à l'utilisation des blocs de capacité dans le guide de EC2 l'utilisateur Amazon pour les instances Linux.

  • Les blocs de capacité ne peuvent actuellement pas être utilisés avec Karpenter.

  • Si vous créez un groupe de nœuds autogéré avant que la réservation de capacité ne soit active, définissez la capacité souhaitée sur0.

  • Afin de disposer de suffisamment de temps pour vidanger le(s) nœud(s) de manière gracieuse, nous vous conseillons de programmer une mise à l'échelle jusqu'à zéro plus de 30 minutes avant l'heure de fin de la réserve du bloc de capacité.

  • Afin que votre Pods pour qu'il soit correctement vidé, nous vous recommandons de configurer AWS Node Termination Handler comme expliqué dans les étapes d'exemple.

Utiliser des blocs de capacité avec des nœuds autogérés

Vous pouvez utiliser les blocs de capacité avec Amazon EKS pour le provisionnement et le dimensionnement de vos nœuds autogérés. Les étapes suivantes vous donnent un aperçu général de l'exemple. Les exemples AWS CloudFormation de modèles ne couvrent pas tous les aspects nécessaires à une charge de travail de production. Généralement, vous souhaitez également qu'un script d'amorçage relie le nœud au cluster, spécifie l'EKSAMIaccélérateur Amazon et un profil d'instance approprié pour rejoindre le cluster. Pour de plus amples informations, veuillez consulter Créez des nœuds Amazon Linux autogérés.

  1. Créez un modèle de lancement applicable à votre charge de travail. Pour plus d'informations, consultez la section Utiliser les blocs de capacité pour les charges de travail d'apprentissage automatique dans le guide de l'utilisateur d'Amazon EC2 Auto Scaling.

    Assurez-vous qu'il LaunchTemplateData inclut les éléments suivants :

    • InstanceMarketOptions avec MarketType défini sur "capacity-block"

    • CapacityReservationSpecification: CapacityReservationTargetavec CapacityReservationId défini sur le bloc de capacité (par exemple :cr-02168da1478b509e0 )

    • IamInstanceProfileavec le Arn set correspondant iam-instance-profile-arn

    • ImageIdréglé sur la valeur applicable image-id

    • InstanceTypedéfini sur un type d'instance qui prend en charge les blocs de capacité (par exemple : p5.48xlarge)

    • SecurityGroupIdsdéfini sur la valeur applicable IDs (par exemple : sg-05b1d815d1EXAMPLE)

    • UserDataréglé sur la valeur applicable user-data pour votre groupe de nœuds autogéré

      Voici un extrait d'un CloudFormation modèle qui crée un modèle de lancement ciblant un bloc de capacité.

      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

      Vous devez transmettre le sous-réseau de la zone de disponibilité dans laquelle la réservation est effectuée, car les blocs de capacité sont répartis par zone.

  2. Utilisez le modèle de lancement pour créer un groupe de nœuds autogéré. Si vous effectuez cette opération avant que la réservation de capacité ne soit active, définissez la capacité souhaitée sur0. Lorsque vous créez le groupe de nœuds, assurez-vous que vous ne spécifiez que le sous-réseau correspondant à la zone de disponibilité dans laquelle la capacité est réservée.

    Voici un exemple de CloudFormation modèle auquel vous pouvez faire référence lors de la création d'un modèle applicable à votre charge de travail. Cet exemple permet d'obtenir le LaunchTemplateId et Version de la AWS::Amazon EC2::LaunchTemplate ressource indiquée à l'étape précédente. Il obtient également les valeurs pour DesiredCapacity, MaxSize, MinSize, et VPCZoneIdentifier qui sont déclarées ailleurs dans le même modèle.

    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
  3. Une fois que le groupe de nœuds a été créé avec succès, assurez-vous d'enregistrer le NodeInstanceRole pour le groupe de nœuds qui a été créé. Vous en avez besoin pour vous assurer que lorsque le groupe de nœuds est redimensionné, les nouveaux nœuds rejoignent le cluster et Kubernetes est capable de reconnaître les nœuds. Pour plus d'informations, consultez les AWS Management Console instructions de la section Création de nœuds Amazon Linux autogérés.

  4. Nous vous recommandons de créer une politique de mise à l'échelle programmée pour le groupe Auto Scaling qui s'aligne sur les heures de réserve du bloc de capacité. Pour plus d'informations, consultez la section Scheduled Scaling for Amazon EC2 Auto Scaling dans le guide de l'utilisateur d'Amazon EC2 Auto Scaling.

    Vous pouvez utiliser toutes les instances que vous avez réservées jusqu'à 30 minutes avant l'heure de fin du bloc de capacité. Les instances encore en cours d'exécution à ce moment-là commenceront à prendre fin. Afin de disposer de suffisamment de temps pour vidanger le(s) nœud(s) de manière gracieuse, nous vous conseillons de programmer une mise à l'échelle jusqu'à zéro plus de 30 minutes avant l'heure de fin de la réserve du bloc de capacité.

    Si vous souhaitez plutôt augmenter manuellement chaque fois que la réservation de capacité est effectuéeActive, vous devez mettre à jour la capacité souhaitée du groupe Auto Scaling au début de la réservation du Capacity Block. Ensuite, vous devrez également réduire manuellement la capacité plus de 30 minutes avant l'heure de fin de la réserve du bloc de capacité.

  5. Le groupe de nœuds est désormais prêt pour les charges de travail et Pods à programmer.

  6. Afin que votre Pods pour être correctement vidé, nous vous recommandons de configurer AWS Node Termination Handler. Ce gestionnaire sera en mesure de surveiller les événements du cycle de vie « ASG scale-in » liés à Amazon EC2 Auto Scaling en utilisant EventBridge et en autorisant Kubernetes plan de contrôle pour prendre les mesures nécessaires avant que l'instance ne soit indisponible. Dans le cas contraire, votre Pods and Kubernetes les objets resteront bloqués dans un état d'attente. Pour plus d'informations, consultez AWS Node Termination Handler activé GitHub.

    Si vous ne configurez pas de gestionnaire de terminaison de nœuds, nous vous recommandons de commencer à vider votre Pods manuellement avant d'atteindre la fenêtre de 30 minutes afin qu'ils aient suffisamment de temps pour être égouttés gracieusement.