

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 un NodeClass


**Important**  
Vous devez commencer avec 0 nœud dans votre groupe d’instances et laisser Karpenter gérer la mise à l’échelle automatique. Si vous commencez avec plus de 0 nœud, Karpenter les réduira verticalement à 0.

Une classe de nœuds (`NodeClass`) définit les paramètres au niveau de l’infrastructure qui s’appliquent aux groupes de nœuds de votre cluster Amazon EKS, notamment la configuration réseau, les paramètres de stockage et le balisage des ressources. A `HyperPodNodeClass` est une personnalisation `NodeClass` qui correspond à des groupes d'instances précréés dans SageMaker HyperPod, définissant des contraintes concernant les types d'instances et les zones de disponibilité pris en charge pour les décisions de Karpenter en matière de dimensionnement automatique.

**Considérations relatives à la création d’une classe de nœuds**
+ Vous pouvez spécifier jusqu’à 10 groupes d’instances dans un élément `NodeClass`.
+ Lorsque vous utilisez le partitionnement GPU avec MIG (GPU multi-instance), Karpenter peut automatiquement approvisionner les nœuds avec des groupes d'instances compatibles MIG. Assurez-vous que vos groupes d'instances incluent les types d'instances pris en charge par MIG (ml.p4d.24xlarge, ml.p5.48xlarge ou ml.p5e/p5en.48xlarge) et configurez les étiquettes MIG appropriées lors de la création du cluster. Pour plus d'informations sur la configuration du partitionnement du GPU, consultez[Utilisation de partitions GPU dans Amazon SageMaker HyperPod](sagemaker-hyperpod-eks-gpu-partitioning.md).
+ Si des étiquettes personnalisées sont appliquées à des groupes d'instances, vous pouvez les afficher dans le `desiredLabels` champ lorsque vous demandez le `HyperpodNodeClass` statut. Cela inclut les étiquettes de configuration MIG telles que`nvidia.com/mig.config`. Lorsque des tâches entrantes demandent des ressources MIG, Karpenter redimensionne automatiquement les instances en appliquant les étiquettes MIG appropriées.
+ Si vous choisissez de supprimer un groupe d'instances, nous vous recommandons de le supprimer de votre cluster `NodeClass` avant de le supprimer de votre HyperPod cluster. Si un groupe d’instances est supprimé alors qu’il est utilisé dans un élément `NodeClass`, l’élément `NodeClass` sera marqué comme n’étant pas `Ready` pour le provisionnement et ne sera pas utilisé pour les opérations ultérieures de mise à l’échelle tant que le groupe d’instances ne sera pas supprimé de `NodeClass`.
+ Lorsque vous supprimez des groupes d’instances d’un élément `NodeClass`, Karpenter détecte une dérive sur les nœuds qui étaient gérés par Karpenter dans le ou les groupes d’instances et interrompt les nœuds en fonction des contrôles de votre budget dédié aux interruptions.
+ Les sous-réseaux utilisés par le groupe d’instances doivent appartenir à la même zone de disponibilité. Les sous-réseaux sont spécifiés en utilisant `OverrideVpcConfig` au niveau du groupe d’instances ou du cluster. `VpcConfig` est utilisé par défaut.
+ Seule la capacité à la demande est prise en charge pour le moment. Les groupes d’instances dotés d’un plan d’entraînement ou d’une capacité réservée ne sont pas pris en charge.
+ Les groupes d’instances avec `DeepHealthChecks (DHC)` ne sont pas pris en charge. En effet, une vérification de surveillance approfondie de l’état (DHC) prend environ de 60 à 90 minutes et les pods resteront à l’état d’attente pendant cette période, ce qui peut entraîner un surprovisionnement.

Les étapes suivantes décrivent comment créer un élément `NodeClass`.

1. Créez un fichier YAML (par exemple, nodeclass.yaml) avec votre configuration `NodeClass`.

1. Appliquez la configuration à votre cluster en utilisant kubectl.

1. Référencez l’élément `NodeClass` dans votre configuration de `NodePool`.

1. Voici un exemple de `NodeClass` qui utilise les types d’instance ml.c5.xlarge et ml.c5.4xlarge :

   ```
   apiVersion: karpenter.sagemaker.amazonaws.com/v1
   kind: HyperpodNodeClass
   metadata:
     name: sample-nc
   spec:
     instanceGroups:
       # name of InstanceGroup in HyperPod cluster. InstanceGroup needs to pre-created
       # MaxItems: 10
       - auto-c5-xaz1
       - auto-c5-4xaz2
   ```

1. Appliquez la configuration :

   ```
   kubectl apply -f nodeclass.yaml
   ```

1. Surveillez l' NodeClass état pour vous assurer que la condition Prêt est définie sur True :

   ```
   kubectl get hyperpodnodeclass sample-nc -o yaml
   ```

   ```
   apiVersion: karpenter.sagemaker.amazonaws.com/v1
   kind: HyperpodNodeClass
   metadata:
     creationTimestamp: "<timestamp>"
     name: sample-nc
     uid: <resource-uid>
   spec:
     instanceGroups:
     - auto-c5-az1
     - auto-c5-4xaz2
   status:
     conditions:
     // true when all IGs in the spec are present in SageMaker cluster, false otherwise
     - lastTransitionTime: "<timestamp>"
       message: ""
       observedGeneration: 3
       reason: InstanceGroupReady
       status: "True"
       type: InstanceGroupReady
     // true if subnets of IGs are discoverable, false otherwise
     - lastTransitionTime: "<timestamp>"
       message: ""
       observedGeneration: 3
       reason: SubnetsReady
       status: "True"
       type: SubnetsReady
     // true when all dependent resources are Ready [InstanceGroup, Subnets]
     - lastTransitionTime: "<timestamp>"
       message: ""
       observedGeneration: 3
       reason: Ready
       status: "True"
       type: Ready
     instanceGroups:
     - desiredLabels:
       - key: <custom_label_key>
         value: <custom_label_value>
       - key: nvidia.com/mig.config
         value: all-1g.5gb
       instanceTypes:
       - ml.c5.xlarge
       name: auto-c5-az1
       subnets:
       - id: <subnet-id>
         zone: <availability-zone-a>
         zoneId: <zone-id-a>
     - instanceTypes:
       - ml.c5.4xlarge
       name: auto-c5-4xaz2
       subnets:
       - id: <subnet-id>
         zone: <availability-zone-b>
         zoneId: <zone-id-b>
   ```