

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# NodeClass 생성
<a name="sagemaker-hyperpod-eks-autoscaling-nodeclass"></a>

**중요**  
인스턴스 그룹에서 노드 0개로 시작하고 Karpenter가 오토 스케일링을 처리하도록 해야 합니다. 0개보다 많은 노드로 시작하는 경우 Karpenter는 노드를 0개로 스케일 다운합니다.

노드 클래스(`NodeClass`)는 네트워크 구성, 스토리지 설정, 리소스 태그 지정을 포함하여 Amazon 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 파티션 사용](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\$190분이 걸리고 해당 기간 동안 포드가 보류 중 상태로 유지되어 오버프로비저닝이 발생할 수 있기 때문입니다.

다음 단계에서는 `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 상태를 모니터링하여 상태의 Ready 조건이 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>
   ```