创建 NodeClass - 亚马逊 SageMaker AI

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

创建 NodeClass

重要

您的实例组必须从 0 个节点开始,并让 Karpenter 处理自动扩缩。如果初始节点数大于 0,Karpenter 会将其缩减至 0。

节点类(NodeClass)定义了适用于 Amazon EKS 集群中节点组的基础设施级别设置,包括网络配置、存储设置和资源标记等。A HyperPodNodeClass 是一种自定义项NodeClass,它映射到中预先创建的实例组 SageMaker HyperPod,它定义了在 Karpenter 的自动扩展决策中支持哪些实例类型和可用区的限制。

创建节点类的注意事项

  • 您可以在 NodeClass 中最多指定 10 个实例组。

  • 在 MIG(多实例 GPU)中使用 GPU 分区时,Karpenter 可以自动为节点配置支持 MiG 的实例组。确保您的实例组包含 MIG 支持的实例类型(ml.p4d.24xlarge、ml.p5.48xlarge 或 ml.p5e/p5en.48xlarge),并在创建集群时配置相应的 MIG 标签。有关配置 GPU 分区的更多信息,请参阅在亚马逊中使用 GPU 分区 SageMaker HyperPod

  • 如果将自定义标签应用于实例组,则可以在查询HyperpodNodeClass状态时在desiredLabels字段中查看它们。这包括 MIG 配置标签,例如。nvidia.com/mig.config当传入的任务请求 MIG 资源时,Karpenter 将使用相应的 MIG 标签自动扩展实例。

  • 如果您选择删除实例组,我们建议您先将其从您的集群中删除,NodeClass然后再将其从您的 HyperPod集群中删除。如果删除一个正在 NodeClass 中使用的实例组,则 NodeClass 将被标记非 Ready 状态且无法进行预调配,并且在从 NodeClass 中移除该实例组之前,该实例组不会用于后续扩展操作。

  • 当您从 NodeClass 中移除实例组时,Karpenter 将检测到实例组中由 Karpenter 管理的节点存在偏差,并将根据中断预算控制措施中断节点。

  • 实例组所使用的子网应属于同一个可用区。子网是通过 OverrideVpcConfig 在实例组级别或集群级别指定的。默认情况下,将使用 VpcConfig

  • 此时仅支持按需容量。不支持具有训练计划或预留容量的实例组。

  • 不支持带 DeepHealthChecks (DHC) 的实例组。这是因为 DHC 大约需要 60-90 分钟才能完成,在此期间,容器组(pod)将保持待处理状态,这可能会导致过度预调配。

以下步骤展示了如何创建 NodeClass

  1. 创建一个包含 NodeClass 配置的 YAML 文件(例如 nodeclass.yaml)。

  2. 使用 kubectl 将此配置应用于集群。

  3. NodePool 配置中引用 NodeClass

  4. 以下示例 NodeClass 使用 ml.c5.xlarge 和 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. 应用配置:

    kubectl apply -f nodeclass.yaml
  6. 监控 NodeClass 状态以确保状态中的 “就绪” 条件设置为 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>