NodeClass を作成する - Amazon SageMaker AI

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

NodeClass を作成する

重要

インスタンスグループ内のノードを 0 から開始し、Karpenter にオートスケーリングの処理を許可する必要があります。ノード数が 0 を超える場合、Karpenter はノードを 0 にスケールダウンします。

ノードクラス (NodeClass) は、ネットワーク設定、ストレージ設定、リソースタグ付けなど、EKS クラスター内のノードのグループに適用されるインフラストラクチャレベルの設定を定義します。HyperPodNodeClass は、SageMaker HyperPod で事前に作成されたインスタンスグループにマッピングするカスタム NodeClass で、Karpenter のオートスケーリングの決定でサポートされているインスタンスタイプとアベイラビリティーゾーンに関する制約を定義します。

ノードクラスの作成に関する考慮事項

  • NodeClass では、最大 10 個のインスタンスを指定できます。

  • MIG (マルチインスタンス GPU) で GPU パーティショニングを使用する場合、Karpenter は MIG 対応インスタンスグループを使用してノードを自動的にプロビジョニングできます。インスタンスグループに MIG がサポートするインスタンスタイプ (ml.p4d.24xlarge、ml.p5.48xlarge、または ml.p5e/p5en.48xlarge) が含まれていることを確認し、クラスターの作成時に適切な MIG ラベルを設定します。GPU パーティショニングの設定の詳細については、「」を参照してくださいAmazon SageMaker HyperPod での GPU パーティションの使用 HyperPod

  • カスタムラベルがインスタンスグループに適用される場合は、HyperpodNodeClassステータスをクエリするときに desiredLabelsフィールドにラベルを表示できます。これには、 などの MIG 設定ラベルが含まれますnvidia.com/mig.config。受信ジョブが MIG リソースをリクエストすると、Karpenter は適切な MIG ラベルを適用してインスタンスを自動的にスケーリングします。

  • インスタンスグループを削除する場合は、HyperPod クラスターから削除する前に、NodeClass から削除することをお勧めします。インスタンスグループが NodeClass で使用されている間に削除された場合、NodeClass はプロビジョニングには Ready でないとマークされ、インスタンスグループが NodeClass から削除されるまで後続のスケーリングオペレーションには使用されません。

  • NodeClass からインスタンスグループを削除すると、Karpenter はインスタンスグループ内の Karpenter が管理するノードのドリフトを検出し、中断量コントロールに基づいてノードを中断します。

  • インスタンスグループで使用されるサブネットは、同じ AZ に配置されている必要があります。サブネットは、インスタンスグループレベルまたはクラスターレベルで OverrideVpcConfig を使用して指定されます。VpcConfig がデフォルトで使用されます。

  • 現時点では、オンデマンドキャパシティのみがサポートされています。トレーニングプランまたはリザーブドキャパシティがあるインスタンスグループはサポートされていません。

  • DeepHealthChecks (DHC) を使用するインスタンスグループはサポートされていません。これは、DHC が完了するまでに約 60~90 分かかり、その間ポッドが保留状態のままになるため、オーバープロビジョニングが発生する可能性があるためです。

以下の手順は、NodeClass を作成する方法を説明しています。

  1. NodeClass ノードクラス設定で YAML ファイルを作成します (nodeclass.yaml など)。

  2. kubectl を使用してこの設定をクラスターに適用します。

  3. NodePool 設定で NodeClass を参照します。

  4. ml.c5.xlarge インスタンスタイプと ml.c5.4xlarge インスタンスタイプを使用する NodeClass の例は、次のとおりです。

    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>