

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

# NodeClass を作成する
<a name="sagemaker-hyperpod-eks-autoscaling-nodeclass"></a>

**重要**  
インスタンスグループ内のノードを 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](sagemaker-hyperpod-eks-gpu-partitioning.md)。
+ カスタムラベルがインスタンスグループに適用される場合は、`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 など)。

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

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

1. 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
   ```

1. 以下のとおり設定を適用します。

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

1. 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>
   ```