

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

# Amazon EKS에서 오케스트레이션한 SageMaker HyperPod 클러스터에서 작업 실행
<a name="sagemaker-hyperpod-eks-run-jobs"></a>

다음 주제에서는 Amazon EKS로 오케스트레이션된 프로비저닝된 SageMaker HyperPod 클러스터에서 컴퓨팅 노드에 액세스하고 ML 워크로드를 실행하는 절차와 예제를 제공합니다. HyperPod 클러스터에서 환경을 설정한 방식에 따라 HyperPod 클러스터에서 ML 워크로드를 실행하는 방법은 다양합니다.

**참고**  
SageMaker HyperPod CLI 또는 kubectl을 통해 작업을 실행할 때 HyperPod는 네임스페이스(팀) 전반의 컴퓨팅 사용률(GPU/CPU 시간)을 추적할 수 있습니다. 이러한 지표 전력 사용량 보고서는 다음을 제공합니다.  
할당된 리소스 소비와 차입한 리소스 소비에 대한 가시성
감사를 위한 Teams 리소스 사용률(최대 180일)
태스크 거버넌스 정책에 따른 비용 어트리뷰션
사용량 보고서를 사용하려면 사용량 보고서 인프라를 설치해야 합니다. 컴퓨팅 할당량을 적용하고 세분화된 비용 어트리뷰션을 활성화하도록 [태스크 거버넌스](sagemaker-hyperpod-eks-operate-console-ui-governance.md)를 구성하는 것이 좋습니다.  
사용량 보고서 설정 및 생성에 대한 자세한 내용은 [Reporting Compute Usage in HyperPod](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-hyperpod-usage-reporting.html)를 참조하세요.

**작은 정보**  
Amazon EKS로 오케스트레이션된 SageMaker HyperPod 클러스터를 설정하고 사용하는 방법에 대한 실습 경험 및 지침은 [ SageMaker HyperPod 워크숍에서 Amazon EKS 지원](https://catalog.us-east-1.prod.workshops.aws/workshops/2433d39e-ccfe-4c00-9d3d-9917b729258e)을 받는 것이 좋습니다.

데이터 사이언티스트 사용자는 SageMaker HyperPod 클러스터의 오케스트레이터로 설정된 EKS 클러스터를 사용하여 기본 모델을 훈련할 수 있습니다. 과학자는 [SageMaker HyperPod CLI](https://github.com/aws/sagemaker-hyperpod-cli)와 기본 `kubectl` 명령을 활용하여 사용 가능한 SageMaker HyperPod 클러스터를 찾고, 훈련 작업(Pods)을 제출하고, 워크로드를 관리합니다. SageMaker HyperPod CLI는 훈련 작업 스키마 파일을 사용하여 작업 제출을 활성화하고 작업 목록, 설명, 취소 및 실행 기능을 제공합니다. 과학자는 HyperPod에서 관리하는 컴퓨팅 할당량과 [SageMaker AI 관리형 MLflow](https://docs.aws.amazon.com/sagemaker/latest/dg/mlflow.html)에 따라 [Kubeflow Training Operator](https://www.kubeflow.org/docs/components/training/overview/)를 사용하여 ML 실험 및 훈련 실행을 관리할 수 있습니다.

**Topics**
+ [SageMaker HyperPod CLI 설치](sagemaker-hyperpod-eks-run-jobs-access-nodes.md)
+ [SageMaker HyperPod CLI 명령](sagemaker-hyperpod-eks-hyperpod-cli-reference.md)
+ [SageMaker HyperPod CLI를 사용하여 작업 실행](sagemaker-hyperpod-eks-run-jobs-hyperpod-cli.md)
+ [`kubectl`를 사용하여 작업 실행](sagemaker-hyperpod-eks-run-jobs-kubectl.md)

# SageMaker HyperPod CLI 설치
<a name="sagemaker-hyperpod-eks-run-jobs-access-nodes"></a>

SageMaker HyperPod는 [SageMaker HyperPod 명령줄 인터페이스](https://github.com/aws/sagemaker-hyperpod-cli)(CLI) 패키지를 제공합니다.

1. 로컬 시스템의 Python 버전이 3.8\$13.11인지 확인합니다.

1. [SageMaker HyperPod CLI](https://github.com/aws/sagemaker-hyperpod-cli) 패키지의 `README` 마크다운 파일에서 사전 조건을 확인합니다.

1. GitHub에서 SageMaker HyperPod CLI 패키지를 복제합니다.

   ```
   git clone https://github.com/aws/sagemaker-hyperpod-cli.git
   ```

1. SageMaker HyperPod CLI를 설치합니다.

   ```
   cd sagemaker-hyperpod-cli && pip install .
   ```

1. 다음 명령을 실행하여 SageMaker HyperPod CLI가 성공적으로 설치되었는지 테스트합니다.

   ```
   hyperpod --help
   ```

**참고**  
데이터 과학자이고 SageMaker HyperPod CLI를 사용하려는 경우 [과학자용 IAM 사용자](sagemaker-hyperpod-prerequisites-iam.md#sagemaker-hyperpod-prerequisites-iam-cluster-user) 및 [Kubernetes 역할 기반 액세스 제어 설정](sagemaker-hyperpod-eks-setup-rbac.md)의 지침에 따라 클러스터 관리자가 IAM 역할을 올바르게 설정했는지 확인합니다.

# SageMaker HyperPod CLI 명령
<a name="sagemaker-hyperpod-eks-hyperpod-cli-reference"></a>

다음 표에는 SageMaker HyperPod CLI 명령이 요약되어 있습니다.

**참고**  
전체 CLI 참조는 [SageMaker HyperPod CLI GitHub 리포지토리의 ](https://github.com/aws/sagemaker-hyperpod-cli)[README](https://github.com/aws/sagemaker-hyperpod-cli?tab=readme-ov-file#sagemaker-hyperpod-command-line-interface)를 참조하세요.


| SageMaker HyperPod CLI 명령 | 개체  | 설명 | 
| --- | --- | --- | 
| hyperpod get-clusters | cluster/access | 사용자가 훈련 workloadsGives를 제출할 수 있는 IAM 권한으로 활성화된 모든 클러스터를 나열합니다.최대 용량과 함께 워크로드 또는 작업을 실행하지 않는 사용 가능한 전체 인스턴스의 현재 스냅샷을 상태 확인 상태별로 그룹화합니다(예: BurnInPassed). | 
| hyperpod connect-cluster | cluster/access | 지정된 HyperPod 클러스터 및 네임스페이스에서 작동하도록 kubectl 구성 | 
| hyperpod start-job  | 작업 | 대상 클러스터에 작업을 제출합니다-작업 이름은 네임스페이스 수준에서 고유합니다.-사용자는 이를 CLI 인수로 전달하여 yaml 사양을 재정의할 수 있습니다 | 
| hyperpod get-job | 작업 | 제출된 작업의 메타데이터 표시 | 
| hyperpod list-jobs | 작업 | 사용자가 IAM 권한으로 추가되어 훈련 워크로드를 제출할 수 있는 연결된 클러스터/네임스페이스의 모든 작업을 나열합니다 | 
| hyperpod cancel-job | 작업 | 작업을 중지 및 삭제하고 기본 컴퓨팅 리소스를 포기합니다. 이 작업은 다시 재개할 수 없습니다. 필요한 경우 새 작업을 시작해야 합니다. | 
| hyperpod list-pods | pod | 네임스페이스에 지정된 작업의 모든 포드를 나열합니다. | 
| hyperpod get-log | pod | 지정된 작업에서 Particulat 포드의 로그를 검색합니다. | 
| hyperpod exec | pod | 지정된 포드의 쉘에서 bash 명령을 실행하고 출력을 게시합니다 | 
| hyperpod --help | utility | 지원되는 모든 명령 나열 | 

# SageMaker HyperPod CLI를 사용하여 작업 실행
<a name="sagemaker-hyperpod-eks-run-jobs-hyperpod-cli"></a>

작업을 실행하려면 EKS 클러스터에 Kubeflow 훈련 연산자를 설치했는지 확인합니다. 자세한 내용은 [헬름을 사용하여 Amazon EKS 클러스터에 패키지 설치](sagemaker-hyperpod-eks-install-packages-using-helm-chart.md) 섹션을 참조하세요.

`hyperpod get-cluster` 명령을 실행하여 사용 가능한 HyperPod 클러스터 목록을 가져옵니다.

```
hyperpod get-clusters
```

`hyperpod connect-cluster`를 실행하여 HyperPod 클러스터를 오케스트레이션하는 EKS 클러스터를 사용하여 SageMaker HyperPod CLI를 구성합니다.

```
hyperpod connect-cluster --cluster-name <hyperpod-cluster-name>
```

작업을 실행하여 `hyperpod start-job` 명령을 실행합니다. 다음 명령은 필수 옵션이 있는 명령을 보여줍니다.

```
hyperpod start-job \
    --job-name <job-name>
    --image <docker-image-uri>
    --entry-script <entrypoint-script>
    --instance-type <ml.instance.type>
    --node-count <integer>
```

이 `hyperpod start-job` 명령에는 작업 자동 재개 및 작업 예약과 같은 다양한 옵션도 함께 제공됩니다.

## 작업 자동 재개 활성화
<a name="sagemaker-hyperpod-eks-run-jobs-hyperpod-cli-enable-auto-resume"></a>

`hyperpod start-job` 명령에는 작업 자동 재개를 지정하는 다음 옵션도 있습니다. SageMaker HyperPod 노드 복원력 기능을 사용하여 작업 자동 재개를 활성화하려면 `restart-policy` 옵션의 값을 `OnFailure`로 설정해야 합니다. 작업은 `kubeflow` 네임스페이스 또는 접두사가 `hyperpod`인 네임스페이스에서 실행되어야 합니다.
+ [--auto-resume <bool>] \$1Optional, 실패 후 작업 자동 재개를 활성화하면 기본값은 false입니다
+ [--max-retry <int>] \$1Optional, auto-resume이 true인 경우 max-retry 기본값은 지정되지 않은 경우 1입니다
+ [--restart-policy <enum>] \$1Optional, PyTorchJob 재시작 정책. 허용 가능한 값은 `Always`, `OnFailure`, `Never` 또는 `ExitCode`입니다. 기본값은 `OnFailure`입니다.

```
hyperpod start-job \
    ... // required options \
    --auto-resume true \
    --max-retry 3 \
    --restart-policy OnFailure
```

## 예약 옵션을 사용하여 작업 실행
<a name="sagemaker-hyperpod-eks-run-jobs-hyperpod-cli-scheduling"></a>

`hyperpod start-job` 명령에는 대기열 메커니즘을 사용하여 작업을 설정하는 다음 옵션이 있습니다.

**참고**  
EKS 클러스터에 [Kueue](https://kueue.sigs.k8s.io/docs/overview/)를 설치해야 합니다. 설치하지 않은 경우 [SageMaker HyperPod 태스크 거버넌스 설정](sagemaker-hyperpod-eks-operate-console-ui-governance-setup.md)의 지침을 따르세요.
+ [--scheduler-type <enum>] \$1Optional, 스케줄러 유형을 지정합니다. 기본값은 `Kueue`입니다.
+ [--queue-name <string>] \$1Optional, 작업과 함께 제출하려는 [로컬 대기열](https://kueue.sigs.k8s.io/docs/concepts/local_queue/) 또는 [클러스터 대기열](https://kueue.sigs.k8s.io/docs/concepts/cluster_queue/)의 이름을 지정합니다. 대기열은 클러스터 관리자가 `CreateComputeQuota`를 사용하여 생성해야 합니다.
+ [--priority <string>] \$1Optional, 클러스터 관리자가 생성해야 하는 [워크로드 우선순위 클래스](https://kueue.sigs.k8s.io/docs/concepts/workload_priority_class/)의 이름을 지정합니다.

```
hyperpod start-job \
    ... // required options
    --scheduler-type Kueue \
    --queue-name high-priority-queue \
    --priority high
```

## 구성 파일에서 작업 실행
<a name="sagemaker-hyperpod-eks-run-jobs-hyperpod-cli-from-config"></a>

또는 작업에 필요한 모든 파라미터가 포함된 작업 구성 파일을 생성한 다음 --config-file 옵션을 사용하여 이 구성 파일을 `hyperpod start-job` 명령에 전달할 수 있습니다. 이 경우

1. 필요한 파라미터를 사용하여 작업 구성 파일을 생성합니다. [기본 구성 파일](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-hyperpod-eks-run-jobs-hyperpod-cli.html#sagemaker-hyperpod-eks-hyperpod-cli-from-config)은 SageMaker HyperPod CLI GitHub 리포지토리의 작업 구성 파일을 참조하세요.

1. 다음과 같이 구성 파일을 사용하여 작업을 시작합니다.

   ```
   hyperpod start-job --config-file /path/to/test_job.yaml
   ```

**작은 정보**  
`hyperpod start-job` 명령의 전체 파라미터 목록은 SageMaker HyperPod CLI GitHub 리포지토리의 `README.md`에서 [작업 제출](https://github.com/aws/sagemaker-hyperpod-cli?tab=readme-ov-file#submitting-a-job) 섹션을 참조하세요.

# `kubectl`를 사용하여 작업 실행
<a name="sagemaker-hyperpod-eks-run-jobs-kubectl"></a>

**참고**  
훈련 작업 자동 재개에는 Kubeflow Training Operator 릴리스 버전 `1.7.0`, `1.8.0` 또는 `1.8.1`이 필요합니다.

참고로 Helm 차트를 사용하여 클러스터에 Kubeflow 훈련 연산자를 설치해야 합니다. 자세한 내용은 [헬름을 사용하여 Amazon EKS 클러스터에 패키지 설치](sagemaker-hyperpod-eks-install-packages-using-helm-chart.md) 섹션을 참조하세요. 다음 명령을 실행하여 Kubeflow 훈련 운영자 제어 영역이 제대로 설정되었는지 확인합니다.

```
kubectl get pods -n kubeflow
```

이는 다음과 비슷한 출력을 반환합니다.

```
NAME                                             READY   STATUS    RESTARTS   AGE
training-operator-658c68d697-46zmn               1/1     Running   0          90s
```

**훈련 작업을 제출하려면**

훈련 작업을 실행하려면 다음과 같이 작업 구성 파일을 준비하고 [https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#apply](https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#apply) 명령을 실행합니다.

```
kubectl apply -f /path/to/training_job.yaml
```

**교육 작업을 설명하려면**

EKS 클러스터에 제출된 작업의 세부 정보를 검색하려면 다음 명령을 사용합니다. 작업 제출 시간, 완료 시간, 작업 상태, 구성 세부 정보와 같은 작업 정보를 반환합니다.

```
kubectl get -o yaml training-job -n kubeflow
```

**훈련 작업을 중지하고 EKS 리소스를 삭제하려면**

훈련 작업을 중지하려면 kubectl 삭제를 사용합니다. 다음은 구성 파일 `pytorch_job_simple.yaml`에서 생성된 훈련 작업을 중지하는 예입니다.

```
kubectl delete -f /path/to/training_job.yaml 
```

이는 다음 출력을 반환해야 합니다.

```
pytorchjob.kubeflow.org "training-job" deleted
```

**작업 자동 재개를 활성화하려면**

SageMaker HyperPod는 Kubernetes 작업에 대한 작업 자동 재개 기능을 지원하며 Kubeflow 훈련 운영자 제어 영역과 통합됩니다.

클러스터에 SageMaker HyperPod 상태 확인을 통과한 노드가 충분한지 확인합니다. 노드에는 테인트 `sagemaker.amazonaws.com/node-health-status`이 `Schedulable`로 설정되어 있어야 합니다. 작업 YAML 파일에 노드 선택기를 포함하여 다음과 같이 적절한 구성을 가진 노드를 선택하는 것이 좋습니다.

```
sagemaker.amazonaws.com/node-health-status: Schedulable
```

다음 코드 조각은 Kubeflow PyTorch 작업 YAML 구성을 수정하여 작업 자동 재개 기능을 활성화하는 방법의 예입니다. 두 개의 주석을 추가하고 다음과 같이 `OnFailure`를 `restartPolicy`로 설정해야 합니다.

```
apiVersion: "kubeflow.org/v1"
kind: PyTorchJob 
metadata:
    name: pytorch-simple
    namespace: kubeflow
    annotations: { // config for job auto resume
      sagemaker.amazonaws.com/enable-job-auto-resume: "true"
      sagemaker.amazonaws.com/job-max-retry-count: "2"
    }
spec:
  pytorchReplicaSpecs:
  ......
  Worker:
      replicas: 10
      restartPolicy: OnFailure
      template:
          spec:
              nodeSelector:
                  sagemaker.amazonaws.com/node-health-status: Schedulable
```

**작업 자동 재개 상태를 확인하려면**

다음 명령을 실행하여 작업 자동 재개의 상태를 검색합니다.

```
kubectl describe pytorchjob -n kubeflow <job-name>
```

실패 패턴에 따라 다음과 같이 Kubeflow 훈련 작업 재시작의 두 가지 패턴이 표시될 수 있습니다.

**패턴 1**:

```
Start Time:    2024-07-11T05:53:10Z
Events:
  Type     Reason                   Age                    From                   Message
  ----     ------                   ----                   ----                   -------
  Normal   SuccessfulCreateService  9m45s                  pytorchjob-controller  Created service: pt-job-1-worker-0
  Normal   SuccessfulCreateService  9m45s                  pytorchjob-controller  Created service: pt-job-1-worker-1
  Normal   SuccessfulCreateService  9m45s                  pytorchjob-controller  Created service: pt-job-1-master-0
  Warning  PyTorchJobRestarting     7m59s                  pytorchjob-controller  PyTorchJob pt-job-1 is restarting because 1 Master replica(s) failed.
  Normal   SuccessfulCreatePod      7m58s (x2 over 9m45s)  pytorchjob-controller  Created pod: pt-job-1-worker-0
  Normal   SuccessfulCreatePod      7m58s (x2 over 9m45s)  pytorchjob-controller  Created pod: pt-job-1-worker-1
  Normal   SuccessfulCreatePod      7m58s (x2 over 9m45s)  pytorchjob-controller  Created pod: pt-job-1-master-0
  Warning  PyTorchJobRestarting     7m58s                  pytorchjob-controller  PyTorchJob pt-job-1 is restarting because 1 Worker replica(s) failed.
```

**패턴 2**: 

```
Events:
  Type    Reason                   Age    From                   Message
  ----    ------                   ----   ----                   -------
  Normal  SuccessfulCreatePod      19m    pytorchjob-controller  Created pod: pt-job-2-worker-0
  Normal  SuccessfulCreateService  19m    pytorchjob-controller  Created service: pt-job-2-worker-0
  Normal  SuccessfulCreatePod      19m    pytorchjob-controller  Created pod: pt-job-2-master-0
  Normal  SuccessfulCreateService  19m    pytorchjob-controller  Created service: pt-job-2-master-0
  Normal  SuccessfulCreatePod      4m48s  pytorchjob-controller  Created pod: pt-job-2-worker-0
  Normal  SuccessfulCreatePod      4m48s  pytorchjob-controller  Created pod: pt-job-2-master-0
```