

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

# 훈련 운영자 설치
<a name="sagemaker-eks-operator-install"></a>

훈련 운영자를 설치하는 방법에 대해 알아보려면 다음 섹션을 참조하세요.

## 사전 조건
<a name="sagemaker-eks-operator-prerequisites"></a>

 HyperPod 훈련 운영자를 사용하려면 먼저 다음 사전 조건을 충족해야 합니다.
+  [Amazon EKS 오케스트레이션을 사용하여 HyperPod 클러스터 생성](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-hyperpod-eks-operate-console-ui-create-cluster.html) 
+ HyperPod 클러스터에 최신 AMI 설치 자세한 내용은 [Amazon EKS용 SageMaker HyperPod AMI 릴리스](sagemaker-hyperpod-release-ami-eks.md) 단원을 참조하십시오.
+ [cert-manager 설치](https://cert-manager.io/docs/installation/)
+  [콘솔을 사용하여 EKS Pod Identity Agent 설정](https://docs.aws.amazon.com/eks/latest/userguide/pod-id-agent-setup.html). 를 사용하려면 다음 명령을 AWS CLI사용합니다.

  ```
  aws eks create-addon \ 
   --cluster-name my-eks-cluster \
   --addon-name eks-pod-identity-agent \
   --region AWS 리전
  ```
+ (선택 사항) 프라이빗 VPC에서 HyperPod 클러스터 노드를 실행하는 경우 Amazon SageMaker AI API(`com.amazonaws.aws-region.sagemaker.api`) 및 Amazon EKS Auth 서비스(com.amazonaws.*aws-region*.eks-auth)에 대한 PrivateLinks VPC 엔드포인트를 설정해야 합니다. 또한 클러스터 노드가 트래픽이 VPC 엔드포인트를 통해 라우팅되어 SageMaker AI 및 Amazon EKS와 통신할 수 있도록 허용하는 보안 그룹에 있는 서브넷으로 실행되고 있는지 확인해야 합니다. 제대로 설정되지 않으면 추가 기능 설치가 실패할 수 있습니다. VPC 엔드포인트 설정에 대한 자세한 내용은 [VPC 엔드포인트 생성을 참조하세요](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html#create-interface-endpoint-aws).

## 훈련 운영자 설치
<a name="sagemaker-eks-operator-install-operator"></a>

 이제 SageMaker AI 콘솔, Amazon EKS 콘솔 또는 AWS CLI 를 사용하여 HyperPod 훈련 운영자를 설치할 수 있습니다. 콘솔 방법은 운영자를 설치하는 데 도움이 되는 간소화된 경험을 제공합니다. 는 더 많은 설치를 사용자 지정할 수 있는 프로그래밍 방식의 접근 방식을 AWS CLI 제공합니다.

두 콘솔 경험에서 SageMaker AI는 원클릭 설치를 제공하여 IAM 실행 역할을 생성하고, Pod Identity 연결을 생성하고, 운영자를 설치합니다. Amazon EKS 콘솔 설치는 비슷하지만 이 방법은 IAM 실행 역할을 자동으로 생성하지 않습니다. 이 프로세스 중에 콘솔이 미리 채우는 정보로 새 IAM 실행 역할을 생성하도록 선택할 수 있습니다. 기본적으로 이러한 생성된 역할은 운영자를 설치하려는 현재 클러스터에만 액세스할 수 있습니다. 다른 클러스터를 포함하도록 역할의 권한을 편집하지 않는 한, 운영자를 제거했다가 다시 설치하는 경우 새 역할을 생성해야 합니다.

------
#### [ SageMaker AI console (recommended) ]

1. [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)에서 Amazon SageMaker AI 콘솔을 엽니다.

1. 클러스터의 세부 정보 페이지로 이동합니다.

1. **대시보드** 탭에서 **Amazon SageMaker HyperPod 훈련 운영자**라는 추가 기능을 찾아 **설치**를 선택합니다. 설치 프로세스 중에 SageMaker AI는 [AmazonSageMakerHyperPodTrainingOperatorAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonSageMakerHyperPodTrainingOperatorAccess.html) 관리형 정책과 유사한 권한을 가진 IAM 실행 역할을 생성하고 Amazon EKS 클러스터와 새 실행 역할 간에 Pod Identity 연결을 생성합니다.

------
#### [ Amazon EKS console ]

**참고**  
Amazon EKS 클러스터를 통해 추가 기능을 설치하는 경우 먼저 키-값 페어 `SageMaker:true`로 HyperPod 클러스터에 태그를 지정해야 합니다. 그러지 않으면 설치가 실패합니다.

1. [https://console.aws.amazon.com/eks/home\$1/clusters](https://console.aws.amazon.com/eks/home#/clusters)에서 Amazon EKS 콘솔을 엽니다.

1. EKS 클러스터로 이동하여 **추가 기능**을 선택한 다음 **추가 기능 가져오기**를 선택합니다.

1. Amazon SageMaker HyperPod 훈련 운영자를 선택한 후 **다음**을 선택합니다.

1. **버전**에서 콘솔은 기본적으로 최신 버전으로 설정되어 있으므로 사용하는 것이 좋습니다.

1. **추가 기능 액세스**에서 훈련 운영자 추가 기능에 사용할 Pod Identity IAM 역할을 선택합니다. 역할이 아직 없는 경우 **권장 역할 생성**을 선택하여 생성합니다.

1. 이 역할 생성 프로세스 중에 IAM 콘솔은 사용 사례, [AmazonSageMakerHyperPodTrainingOperatorAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonSageMakerHyperPodTrainingOperatorAccess.html) 관리형 정책 및 기타 필요한 권한, 역할 이름, 설명과 같은 필요한 모든 정보를 미리 채웁니다. 단계를 진행하면서 정보를 검토하고 **역할 생성**을 선택합니다.

1. EKS 콘솔에서 추가 기능의 설정을 검토한 다음 **생성**을 선택합니다.

------
#### [ CLI ]

1. HyperPod 클러스터의 IAM 실행 역할에 EKS Pod Identity가 역할을 수임하거나 다음 신뢰 정책을 사용하여 [새 IAM 역할을 생성](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create.html)할 수 있는 신뢰 관계가 있는지 확인합니다. 또는 Amazon EKS 콘솔을 사용하여 추가 기능을 설치하여 권장 역할을 생성할 수 있습니다.

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Sid": "AllowEksAuthToAssumeRoleForPodIdentity",
         "Effect": "Allow",
         "Principal": {
           "Service": "pods.eks.amazonaws.com"
         },
         "Action": [
           "sts:AssumeRole",
           "sts:TagSession",
           "eks-auth:AssumeRoleForPodIdentity"
         ]
       }
     ]
   }
   ```

------

1.  [AmazonSageMakerHyperPodTrainingOperatorAccess 관리형 정책](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonSageMakerHyperPodTrainingOperatorAccess.html)을 생성한 역할에 연결합니다.

1.  [그런 다음, EKS 클러스터, IAM 역할 및 새 IAM 역할 간에 Pod Identity 연결을 생성합니다](https://docs.aws.amazon.com/eks/latest/userguide/pod-identities.html).

   ```
   aws eks create-pod-identity-association \
   --cluster-name my-eks-cluster \
   --role-arn ARN of your execution role \
   --namespace aws-hyperpod \
   --service-account hp-training-operator-controller-manager \
   --region AWS 리전
   ```

1.  프로세스를 완료한 후 ListPodIdentityAssociations 작업을 사용하여 생성한 연결을 확인할 수 있습니다. 샘플 응답은 다음과 같습니다.

   ```
   aws eks list-pod-identity-associations --cluster-name my-eks-cluster
   {
       "associations": [{
           "clusterName": "my-eks-cluster",
           "namespace": "aws-hyperpod",
           "serviceAccount": "hp-training-operator-controller-manager",
           "associationArn": "arn:aws:eks:us-east-2:123456789012:podidentityassociation/my-hyperpod-cluster/a-1a2b3c4d5e6f7g8h9",
           "associationId": "a-1a2b3c4d5e6f7g8h9"
       }]
   }
   ```

1. 훈련 운영자를 설치하려면 `create-addon` 작업을 사용합니다. `--addon-version` 파라미터는 선택 항목입니다. 제공하지 않으면 기본값은 최신 버전입니다. 가능한 버전을 가져오려면 [DescribeAddonVersions](https://docs.aws.amazon.com/eks/latest/APIReference/API_DescribeAddonVersions.html) 작업을 사용합니다.

   ```
   aws eks create-addon \
     --cluster-name my-eks-cluster \
     --addon-name amazon-sagemaker-hyperpod-training-operator \
     --resolve-conflicts OVERWRITE
   ```

------

HyperPod 클러스터에 훈련 연산자가 이미 설치되어 있는 경우 EKS 추가 기능을 원하는 버전으로 업데이트할 수 있습니다. [ 체크포인트 없는 훈련](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-eks-checkpointless.html) 또는 [ 탄력적 훈련](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-eks-elastic-training.html)을 사용하려면 다음을 고려하세요.
+ 체크포인트 없는 훈련과 탄력적 훈련 모두 EKS 추가 기능이 버전 1.2.0 이상이어야 합니다.
+ Amazon SageMaker HyperPod 훈련 운영자는 모든 EKS 추가 기능 버전과 이전 버전과의 호환성을 유지하므로 모든 추가 기능 버전에서 1.2.0 이상으로 업그레이드할 수 있습니다.
+ 버전 1.2.0 이상에서 하위 버전으로 다운그레이드하는 경우 다운그레이드 전에 기존 작업을 삭제하고 다운그레이드가 완료된 후 작업을 다시 제출해야 합니다.

------
#### [ Amazon EKS Console ]

1. [https://console.aws.amazon.com/eks/home\$1/clusters](https://console.aws.amazon.com/eks/home#/clusters)에서 Amazon EKS 콘솔을 엽니다.

1. EKS 클러스터로 이동하여 **추가 기능을** 선택합니다. 그런 다음 Amazon SageMaker HyperPod 훈련 연산자 추가 기능을 선택하고 **편집**을 선택합니다.

1. **버전** 메뉴에서 원하는 추가 기능의 버전을 선택한 다음 **변경 사항 저장**을 선택합니다.

------
#### [ CLI ]

1. 먼저 클러스터에 대해 지원되는 추가 기능 버전 목록을 가져옵니다.

   ```
   aws eks describe-addon-versions \
     --kubernetes-version $(aws eks describe-cluster --name my-eks-cluster --query 'cluster.version' --output text) \
     --addon-name amazon-sagemaker-hyperpod-training-operator \
     --query 'addons[0].addonVersions[].addonVersion' \
     --output table
   ```

1. 그런 다음 추가 기능을 원하는 버전으로 업데이트합니다.

   ```
   aws eks update-addon \
     --cluster-name my-eks-cluster \
     --addon-name amazon-sagemaker-hyperpod-training-operator \
     --addon-version target-version
     --resolve-conflicts OVERWRITE
   ```

------

 훈련 운영자에는 사용 사례에 적합할 수 있는 여러 옵션과 기본값이 함께 제공됩니다. 변경하기 전에 기본값으로 훈련 운영자를 사용해 보는 것이 좋습니다. 아래 표에는 모든 파라미터와 각 파라미터를 구성할 수 있는 예시가 나와 있습니다.


| 파라미터 | 설명 | 기본값 | 
| --- | --- | --- | 
| hpTrainingControllerManager.manager.resources.requests.cpu | 컨트롤러에 할당할 프로세서 수 | 1 | 
| hpTrainingControllerManager.manager.resources.requests.memory | 컨트롤러에 할당할 메모리의 양 | 2Gi | 
| hpTrainingControllerManager.manager.resources.limits.cpu | 컨트롤러의 CPU 한도 | 2 | 
| hpTrainingControllerManager.manager.resources.limits.memory | 컨트롤러의 메모리 한도 | 4Gi | 
| hpTrainingControllerManager.nodeSelector | 컨트롤러 포드의 노드 선택기 | 기본 동작은 레이블이 sagemaker.amazonaws.com/compute-type: "HyperPod"인 노드를 선택하는 것입니다. | 

## HyperPod 탄력적 에이전트
<a name="sagemaker-eks-operator-elastic-agent"></a>

HyperPod 탄력적 에이전트는 [PyTorch의 ElasticAgent](https://docs.pytorch.org/docs/stable/elastic/agent.html)의 확장입니다. 각 컨테이너에서 훈련 워커의 수명 주기를 오케스트레이션하고 HyperPod 훈련 운영자와 통신합니다. HyperPod 훈련 운영자를 사용하려면 먼저 HyperPod 탄력적 에이전트를 훈련 이미지에 설치해야 운영자를 사용하여 작업을 제출하고 실행할 수 있습니다. 다음은 탄력적 에이전트를 설치하고 `hyperpodrun`을 사용하여 작업 런처를 생성하는 Docker 파일입니다.

**참고**  
[ 체크포인트 없는 훈련](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-eks-checkpointless.html)과 [ 탄력적 훈련](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-eks-elastic-training.html) 모두 HyperPod 탄력적 에이전트 버전 1.1.0 이상을 사용해야 합니다.

```
RUN pip install hyperpod-elastic-agent

ENTRYPOINT ["entrypoint.sh"]
# entrypoint.sh
...
hyperpodrun --nnodes=node_count --nproc-per-node=proc_count \
            --rdzv-backend hyperpod \ # Optional
            --inprocess-restart \ # Optional (in-process fault recovery with checkpointless training)
            ... # Other torchrun args
            # pre-traing arg_group
            --pre-train-script pre.sh --pre-train-args "pre_1 pre_2 pre_3" \
            # post-train arg_group
            --post-train-script post.sh --post-train-args "post_1 post_2 post_3" \
            training.py --script-args
```

이제 `kubectl`을 사용하여 작업을 제출할 수 있습니다.

### HyperPod 탄력적 에이전트 인수
<a name="sagemaker-eks-operator-elastic-agent-args"></a>

 HyperPod 탄력적 에이전트는 모든 원래 인수를 지원하고 그 외 인수를 몇 가지 추가합니다. 다음은 HyperPod 탄력적 에이전트에서 사용할 수 있는 모든 인수입니다. PyTorch의 탄력적 에이전트에 대한 자세한 내용은 [공식 설명서](https://docs.pytorch.org/docs/stable/elastic/agent.html) 참조하세요.


| 인수 | 설명 | 기본 값 | 
| --- | --- | --- | 
| --shutdown-signal | 종료를 위해 워커에 보낼 신호(SIGTERM 또는 SIGKILL) | "SIGKILL" | 
| --shutdown-timeout | 종료 신호와 SIGKILL 신호 사이의 초 단위 제한 시간 | 15 | 
| --server-host | 에이전트 서버 주소 | "0.0.0.0" | 
| --server-port | 에이전트 서버 포트 | 8080 | 
| --server-log-level | 에이전트 서버 로그 수준 | "info" | 
| --server-shutdown-timeout | 서버 종료 제한 시간(초) | 300 | 
| --pre-train-script | 사전 훈련 스크립트 경로 | 없음 | 
| --pre-train-args | 사전 훈련 스크립트에 대한 인수 | 없음 | 
| --post-train-script | 훈련 후 스크립트 경로 | 없음 | 
| --post-train-args | 훈련 후 스크립트에 대한 인수 | 없음 | 
| --inprocess-restart | inprocess\$1restart 기능을 사용할지 여부를 지정하는 플래그 | FALSE | 
| --inprocess-timeout | 프로세스 수준 재시작을 트리거하기 전에 에이전트가 작업자가 동기화 장벽에 도달할 때까지 기다리는 초 단위 시간입니다. | 없음 | 

## 태스크 거버넌스(선택 사항)
<a name="sagemaker-eks-operator-task-governance"></a>

훈련 운영자는 [HyperPod 태스크 거버넌스](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-hyperpod-eks-operate-console-ui-governance)라는 리소스 할당을 간소화하고 Amazon EKS 클러스터에서 팀 및 프로젝트 간 컴퓨팅 리소스를 효율적으로 활용하도록 설계된 강력한 관리 시스템에 통합되어 있습니다. HyperPod 태스크 거버넌스를 설정하려면 [SageMaker HyperPod 태스크 거버넌스 설정](sagemaker-hyperpod-eks-operate-console-ui-governance-setup.md) 섹션을 참조하세요.

**참고**  
HyperPod 태스크 거버넌스 추가 기능을 설치할 때는 버전 v1.3.0-eksbuild.1 이상을 사용해야 합니다.

작업을 제출할 때 대기열 이름과 및 `hyperpod-ns-team-name-localqueue` 및 `priority-class-name-priority`라는 우선순위 클래스 레이블을 포함해야 합니다. 예를 들어 Kueue를 사용하는 경우 레이블은 다음과 같습니다.
+ kueue.x-k8s.io/queue-name: hyperpod-ns-*team-name*-localqueue
+ kueue.x-k8s.io/priority-class: *priority-class*-name-priority

다음은 구성 파일에 대한 예시입니다.

```
apiVersion: sagemaker.amazonaws.com/v1
kind: HyperPodPytorchJob
metadata:
  name: hp-task-governance-sample
  namespace: hyperpod-ns-team-name
  labels:
    kueue.x-k8s.io/queue-name: hyperpod-ns-team-name-localqueue
    kueue.x-k8s.io/priority-class: priority-class-priority
spec:
  nprocPerNode: "1"
  runPolicy:
    cleanPodPolicy: "None"
  replicaSpecs: 
    - name: pods
      replicas: 4
      spares: 2
      template:
        spec:
          containers:
            - name: ptjob
              image: XXXX
              imagePullPolicy: Always
              ports:
                - containerPort: 8080
              resources:
                requests:
                  cpu: "2"
```

그런 다음, 아래 kubectl 명령을 사용하여 YAML 파일을 적용합니다.

```
kubectl apply -f task-governance-job.yaml
```

## Kueue(선택 사항)
<a name="sagemaker-eks-operator-kueue"></a>

작업을 직접 실행할 수 있지만 조직은 훈련 운영자를 Kueue와 통합하여 리소스를 할당하고 작업을 예약할 수도 있습니다. 아래 단계에 따라 Kueue를 HyperPod 클러스터에 설치합니다.

1. [공식 Kueue 설명서](https://kueue.sigs.k8s.io/docs/installation/#install-a-custom-configured-released-version)의 설치 가이드를 따릅니다. `controller_manager_config.yaml` 구성 단계에 도달하면 다음 구성을 추가합니다.

   ```
   externalFrameworks:
   - "HyperPodPytorchJob.v1.sagemaker.amazonaws.com"
   ```

1. 공식 설치 가이드의 나머지 단계를 따릅니다. Kueue 설치를 완료한 후 `kubectl apply -f sample-queues.yaml` 명령을 사용하여 일부 샘플 대기열을 생성할 수 있습니다. 다음 YAML 파일을 사용합니다.

   ```
   apiVersion: kueue.x-k8s.io/v1beta1
   kind: ClusterQueue
   metadata:
     name: cluster-queue
   spec:
     namespaceSelector: {}
     preemption:
       withinClusterQueue: LowerPriority
     resourceGroups:
     - coveredResources:
       - cpu
       - nvidia.com/gpu
       - pods
       flavors:
       - name: default-flavor
         resources:
         - name: cpu
           nominalQuota: 16
         - name: nvidia.com/gpu
           nominalQuota: 16
         - name: pods
           nominalQuota: 16
   ---
   apiVersion: kueue.x-k8s.io/v1beta1
   kind: LocalQueue
   metadata:
     name: user-queue
     namespace: default
   spec:
     clusterQueue: cluster-queue
   ---
   apiVersion: kueue.x-k8s.io/v1beta1
   kind: ResourceFlavor
   metadata:
     name: default-flavor
   ---
   apiVersion: kueue.x-k8s.io/v1beta1
   description: High priority
   kind: WorkloadPriorityClass
   metadata:
     name: high-priority-class
   value: 1000
   ---
   apiVersion: kueue.x-k8s.io/v1beta1
   description: Low Priority
   kind: WorkloadPriorityClass
   metadata:
     name: low-priority-class
   value: 500
   ```