View a markdown version of this page

Gérez le calcul des AI/ML charges de travail sur Amazon EKS à l'aide de groupes de nœuds - Amazon EKS

Aidez à améliorer cette page

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.

Pour contribuer à ce guide de l'utilisateur, cliquez sur le GitHub lien Modifier cette page sur qui se trouve dans le volet droit de chaque page.

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.

Gérez le calcul des AI/ML charges de travail sur Amazon EKS à l'aide de groupes de nœuds

Astuce

Inscrivez-vous aux prochains AI/ML ateliers Amazon EKS.

Cette section explique comment gérer le calcul accéléré (AWS Trainium, GPU NVIDIA) pour les charges de travail d'entraînement et d'inférence liées à l'IA à l'aide de groupes de nœuds gérés par Amazon EKS ou de nœuds autogérés.

Les groupes de nœuds gérés par EKS et les nœuds autogérés utilisent EC2 Auto Scaling Groups (ASG). Les groupes de nœuds gérés par EKS disposent d'API EKS dédiées à la création, à la mise à jour et à la suppression de nœuds, ainsi que d'une fonctionnalité de réparation des nœuds et de crochets de fin de cycle de vie intégrés. Les nœuds autogérés EKS sont déployés et gérés directement via les API EC2.

Ces options vous permettent de définir le type d'instance, le nombre souhaité, les limites de dimensionnement et le modèle de lancement EC2 dès le départ. Envisagez d'utiliser des groupes de nœuds gérés par EKS ou des nœuds autogérés si vous avez également des charges de travail autres que celles d'EKS et que vous préférez une configuration cohérente via des modèles de lancement EC2. Les groupes de nœuds EKS conviennent à la formation et au réglage précis des charges de travail lorsque l'encombrement de calcul accéléré est connu à l'avance. Notez que le mode automatique EKS et Karpenter prennent également en charge le provisionnement de capacité statique, voir Gérez le calcul des AI/ML charges de travail avec EKS Auto Mode et Karpenter pour plus d'informations.

Les groupes de nœuds gérés et les nœuds autogérés par EKS prennent en charge toutes les options d'achat de calcul accéléré (SpotOn-Demand, réservations de On-Demand capacité, blocs de capacité pour le ML). Vous créez un groupe de nœuds gérés ou autogérés distinct par type de capacité, chacun ayant son propre modèle de lancement, ses propres types d'instances et sa propre configuration de dimensionnement. Cela vous permet de ASG-backed contrôler explicitement chaque pool de capacités sans logique de provisionnement dynamique hétérogène.

Groupes de nœuds gérés par EKS et nœuds autogérés

Le choix entre les groupes de nœuds gérés par EKS et les nœuds autogérés dépend du niveau de personnalisation et de contrôle dont vous avez besoin. Les groupes de nœuds gérés par EKS permettent de personnaliser un sous-ensemble du modèle de lancement EC2, tandis que les nœuds autogérés prennent en charge l'ensemble du modèle de lancement EC2. Si vous n'avez aucune raison précise de personnaliser et de gérer vous-même le cycle de vie des nœuds, commencez par les groupes de nœuds gérés par EKS et passez aux nœuds autogérés uniquement lorsqu'une exigence spécifique l'y oblige.

Utilisez des groupes de nœuds gérés lorsque : vous souhaitez qu'EKS gère la sélection des AMI, le démarrage des nœuds, les mises à jour continues, la réparation des nœuds et les flux de travail de vidange progressifs en votre nom. Les groupes de nœuds gérés par EKS constituent le point de départ recommandé si vous ne préférez pas utiliser le mode automatique d'EKS ou Karpenter pour les charges de travail de formation et d'inférence. Lorsque vous utilisez Capacity Blocks for ML, les groupes de nœuds gérés par EKS créent automatiquement une politique de dimensionnement planifiée qui vide le groupe de nœuds 40 minutes avant la fin de la réservation, éliminant ainsi le besoin d'utiliser le gestionnaire de terminaison de AWS nœuds ou votre propre automatisation de réduction. Utilisez les groupes de nœuds gérés par EKS lorsque vous utilisez une EKS-optimized AMI compatible, lorsque vous n'avez pas besoin de personnalisations approfondies des modèles de lancement EC2 au niveau du noyau ou lorsque vous souhaitez un chemin de mise à niveau des nœuds plus simple pour les versions de Kubernetes.

Utilisez des groupes de nœuds autogérés lorsque : vous avez besoin d'un contrôle total sur le modèle de lancement EC2, l'AMI, les paramètres du noyau, la configuration d'exécution du conteneur ou les scripts de démarrage personnalisés. Les scénarios ML courants incluent le réglage des paramètres du noyau et de la carte réseau pour l'entraînement distribué avec Elastic Fabric Adapter (EFA) ou l'intégration avec un contrôleur de cycle de vie des nœuds personnalisé. Self-managed les nœuds vous offrent la flexibilité nécessaire pour expédier toutes les données utilisateur et tous les profils d'instance IAM dont vous avez besoin, mais vous êtes responsable des mises à jour, des politiques de dimensionnement planifiées et des hooks de cycle de vie tels que le AWS Node Termination Handler.

GPU de réserve avec blocs de capacité pour le machine learning

Les blocs de capacité pour l'apprentissage automatique (ML) vous permettent de réserver des instances de GPU à une date future pour des charges de travail d'entraînement ou d'inférence limitées dans le temps. Pour plus d'informations, consultez Capacity Blocks for ML dans le guide de l'utilisateur Amazon EC2.

Vous pouvez utiliser les réservations Capacity Block via des groupes de nœuds gérés par EKS et des nœuds autogérés. La configuration du modèle de lancement EC2 est la même dans les deux cas. Le flux de travail de création de nœuds, le comportement de mise à l'échelle réduite et les crochets du cycle de vie liés à l'arrêt de la charge de travail diffèrent selon les options de provisionnement.

Considérations

  • Les blocs de capacité ne sont disponibles que pour certains types d'instances et AWS certaines régions Amazon EC2. Pour plus d'informations, consultez la section Conditions préalables à l'utilisation des blocs de capacité.

  • Les blocs de capacité sont zonaux. Lors de la création du groupe de nœuds, vous devez utiliser le sous-réseau dans la même zone de disponibilité (AZ) que la réservation du bloc de capacité.

  • Si vous créez un groupe de nœuds avant que la réservation du bloc de capacité ne soit active, définissez la capacité souhaitée sur 0 lors de la création du groupe de nœuds.

  • Pour avoir le temps de drainer progressivement la charge de travail, planifiez le passage à zéro plus de 30 minutes avant la fin de la réservation du bloc de capacités. EC2 commence à fermer les instances 30 minutes avant la fin de la réservation.

Créez des groupes de nœuds avec Capacity Blocks for ML

Les groupes de nœuds gérés par EKS et les nœuds autogérés nécessitent l'utilisation d'un modèle de lancement EC2 personnalisé qui cible la réservation du bloc de capacité. Vous trouverez ci-dessous les champs minimaux obligatoires pour les groupes de nœuds gérés par EKS et les nœuds autogérés. Des champs supplémentaires sont obligatoires pour les nœuds autogérés, comme indiqué dans les étapes relatives Self-managed aux nœuds ci-dessous.

Ils LaunchTemplateData doivent inclure :

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

  • CapacityReservationSpecification: CapacityReservationTargetavec CapacityReservationId défini sur l'ID du bloc de capacité. Par exemple, cr-0123456789abcdef0.

  • InstanceTypedéfini sur le type d'instance de votre réservation Capacity Block. Par exemple, p5.48xlarge.

Ces exigences sont illustrées dans les exemples ci-dessous pour créer le modèle de lancement pour les groupes de nœuds gérés par EKS et les nœuds autogérés.

Managed node groups
  1. Créez un fichier nommé eks-capacity-block-lt.json avec les contenus suivants.

    Remplacez le contenu pour CapacityReservationId et InstanceType par les valeurs de votre bloc de capacité. Pour plus d'informations sur les champs supplémentaires du modèle de lancement EC2, consultez Personnaliser les nœuds gérés à l’aide de modèles de lancement et Utiliser les blocs de capacité pour les charges de travail d'apprentissage automatique.

    { "LaunchTemplateData": { "InstanceMarketOptions": { "MarketType": "capacity-block" }, "CapacityReservationSpecification": { "CapacityReservationTarget": { "CapacityReservationId": "cr-0123456789abcdef0" } }, "InstanceType": "p5.48xlarge" } }
  2. Créez le modèle de lancement.

    aws ec2 create-launch-template \ --launch-template-name EKS-Capacity-Block-Launch-Template \ --launch-template-data file://eks-capacity-block-lt.json
  3. Utilisez le modèle de lancement pour créer un groupe de nœuds géré par EKS. Remplacez les espaces réservés dans la commande ci-dessous par des valeurs applicables à votre environnement. La commande ci-dessous définit --ami-type les AMI EKS-optimized NVIDIA AL2023. Consultez Utiliser des AMI EKS-optimized accélérées pour les instances GPU pour plus d'informations sur les EKS-optimized AMI disponibles. Si vous utilisez une AMI personnalisée avec des groupes de nœuds gérés par EKS, spécifiez votre ID d'AMI dans le modèle de lancement.

    Lorsque vous créez un groupe de nœuds géré par EKS qui utilise des blocs de capacité, procédez comme suit :

    • Définissez --capacity-type sur "CAPACITY_BLOCK".

    • Spécifiez uniquement le sous-réseau dans la même zone de disponibilité que la réservation de capacité.

    • Si vous spécifiez une valeur différente de zéro desiredSize avant que la réservation ne soit active, le groupe Auto Scaling signale les erreurs de lancement jusqu'à ce que la réservation soit active. Une fois actives, les instances sont lancées et l'ASG s'adapte à la demandedesiredSize.

      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 vous l'avez défini desiredSize 0 au moment de la création, augmentez le groupe de nœuds lorsque la réservation devient active en utilisant l'une des options suivantes :

    • Une politique de dimensionnement planifiée sur l'ASG alignée sur l'heure de début de la réservation. Pour plus d'informations, consultez la section Mise à l'échelle programmée pour Amazon EC2 Auto Scaling dans le Guide de l'utilisateur d'Amazon EC2 Auto Scaling.

    • La console Amazon EKS ou aws eks update-nodegroup-config pour mettre à jour la configuration de dimensionnement.

  5. Vérifiez que les nœuds rejoignent le cluster après la mise à l'échelle.

  6. EKS crée automatiquement une politique de dimensionnement planifiée nommée Amazon EKS Node Group Capacity Scaledown Before Reservation End afin de réduire le groupe de nœuds à 0 40 minutes avant la fin de la réservation. Cela donne aux Pods le temps d'être correctement vidés avant qu'EC2 ne commence à mettre fin aux instances au bout de 30 minutes. Ne modifiez ni ne supprimez cette action planifiée.

Self-managed nodes
  1. Créez un fichier nommé eks-capacity-block-lt.json avec les contenus suivants.

    Remplacez le contenu pour CapacityReservationId et InstanceType par les valeurs de votre bloc de capacité. Pour plus d'informations sur les champs supplémentaires du modèle de lancement EC2, consultez Personnaliser les nœuds gérés à l’aide de modèles de lancement et Utiliser les blocs de capacité pour les charges de travail d'apprentissage automatique.

    Remplacez le contenu de IamInstanceProfileImageId,SecurityGroupIds,UserData, KeyName par les valeurs de votre environnement.

    { "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. Créez le modèle de lancement.

    aws ec2 create-launch-template \ --launch-template-name EKS-Capacity-Block-Launch-Template \ --launch-template-data file://eks-capacity-block-lt.json
  3. Utilisez le modèle de lancement pour créer le groupe Auto Scaling en suivant les étapes décrites dansCréer des nœuds Amazon Linux autogérés. Si la réservation n'est pas encore active, réglez-la DesiredCapacity sur0. Spécifiez uniquement le sous-réseau dans la zone de disponibilité où la capacité est réservée.

  4. Une fois que vos nœuds autogérés ont été créés avec DesiredCapacity set to0, créez une politique de dimensionnement planifiée sur le groupe Auto Scaling alignée sur les heures de réservation du Capacity Block. Pour plus d'informations, consultez Mise à l'échelle planifiée dans le Guide de l'utilisateur Amazon EC2 Auto Scaling.

    Vous pouvez utiliser les instances réservées jusqu'à 30 minutes avant l'heure de fin de la réservation. Prévoyez une mise à zéro plus de 30 minutes avant l'heure de fin pour que les capsules aient le temps de se vider.

    Si vous préférez redimensionner manuellement, mettez à jour la capacité souhaitée par l'ASG au début de la réservation et à nouveau plus de 30 minutes avant l'heure de fin.

  5. Pour vider correctement les pods, configurez le AWS Node Termination Handler. Il surveille les événements du cycle de vie de scale-in d'ASG issus d'Amazon EC2 Auto Scaling à l' EventBridge aide d'Amazon EC2 Auto Scaling et laisse le plan de contrôle Kubernetes agir avant que l'instance ne soit indisponible. Sans cela, les Pods et les objets Kubernetes peuvent rester bloqués dans un état d'attente. Pour plus d'informations, consultez AWS Node Termination Handler activé GitHub.

    Si vous ne configurez pas le gestionnaire de terminaison des nœuds, videz manuellement les pods avant le délai de 30 minutes afin qu'ils aient le temps d'être correctement vidés.