Créer une NodeClass - Amazon SageMaker AI

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éer une 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, consultezUtilisation de partitions GPU dans Amazon SageMaker HyperPod.

  • 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 quenvidia.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.

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

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

  4. 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
  5. Appliquez la configuration :

    kubectl apply -f nodeclass.yaml
  6. 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>