

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

# 를 사용하여 SageMaker HyperPod 시작하기 AWS CLI
<a name="smcluster-getting-started-slurm-cli"></a>

HyperPod용 AWS CLI 명령을 사용하여 첫 번째 SageMaker HyperPod 클러스터를 생성합니다.

## Slurm을 사용하여 첫 번째 SageMaker HyperPod 클러스터 생성
<a name="smcluster-getting-started-slurm-cli-create-cluster"></a>

다음 자습서에서는 [SageMaker HyperPod 에 대한AWS CLI 명령](sagemaker-hyperpod-ref.md#sagemaker-hyperpod-ref-cli)을 통해 새 SageMaker HyperPod 클러스터를 생성하고 Slurm으로 설정하는 방법을 보여줍니다. 자습서에서는 , `my-login-group`및 라는 세 개의 Slurm 노드가 있는 HyperPod 클러스터`my-controller-group`를 생성합니다`worker-group-1`.

API 기반 구성 접근 방식을 사용하면를 사용하여 CreateCluster API 요청에서 Slurm 노드 유형 및 파티션 할당을 직접 정의할 수 있습니다`SlurmConfig`. 따라서 별도의 `provisioning_parameters.json` 파일이 필요하지 않으며 기본 제공 검증, 드리프트 감지 및 per-instance-group FSx 구성을 제공합니다.

1. 먼저 수명 주기 스크립트를 준비하고 Amazon S3 버킷에 업로드합니다. 클러스터를 생성하는 동안 HyperPod는 각 인스턴스 그룹에서 실행됩니다. 다음 명령을 사용하여 수명 주기 스크립트를 Amazon S3에 업로드합니다.

   ```
   aws s3 sync \
       ~/local-dir-to-lifecycle-scripts/* \
       s3://sagemaker-<unique-s3-bucket-name>/<lifecycle-script-directory>/src
   ```
**참고**  
를 사용하는 S3[SageMaker HyperPod의 IAM 역할은](sagemaker-hyperpod-prerequisites-iam.md#sagemaker-hyperpod-prerequisites-iam-role-for-hyperpod) 특정 접두사로 시작하는 Amazon S3 버킷에 대한 액세스`AmazonSageMakerClusterInstanceRolePolicy`만 허용`sagemaker-`하므로 S3 버킷 경로는 접두사 로 시작해야 합니다. Amazon S3 

   처음부터 시작하는 경우 [Awsome Distributed Training GitHub 리포지토리](https://github.com/aws-samples/awsome-distributed-training/) 에 제공된 샘플 수명 주기 스크립트를 사용합니다. 다음 하위 단계에서는 샘플 수명 주기 스크립트를 다운로드하여 Amazon S3 버킷에 업로드하는 방법을 보여줍니다.

   1. 수명 주기 스크립트 샘플 사본을 로컬 컴퓨터의 디렉터리에 다운로드합니다.

      ```
      git clone https://github.com/aws-samples/awsome-distributed-training/
      ```

   1. [https://github.com/aws-samples/awsome-distributed-training/tree/main/1.architectures/5.sagemaker-hyperpod/LifecycleScripts/base-config](https://github.com/aws-samples/awsome-distributed-training/tree/main/1.architectures/5.sagemaker-hyperpod/LifecycleScripts/base-config) 디렉터리로 이동하여 수명 주기 스크립트 세트를 찾을 수 있습니다.

      ```
      cd awsome-distributed-training/1.architectures/5.sagemaker_hyperpods/LifecycleScripts/base-config
      ```

      수명 주기 스크립트 샘플에 대한 자세한 내용은 [수명 주기 스크립트를 사용하여 SageMaker HyperPod 클러스터 사용자 지정](sagemaker-hyperpod-lifecycle-best-practices-slurm.md) 섹션을 참조하세요.

   1. `s3://sagemaker-<unique-s3-bucket-name>/<lifecycle-script-directory>/src`에 스크립트를 업로드하세요. 이렇게 하려면 Amazon EC2 콘솔에을 사용하거나 AWS CLI Amazon S3 명령을 실행합니다.

      ```
      aws s3 sync \
          ~/local-dir-to-lifecycle-scripts/* \
          s3://sagemaker-<unique-s3-bucket-name>/<lifecycle-script-directory>/src
      ```
**참고**  
API 기반 구성을 사용하면 `provisioning_parameters.json` 파일을 생성하거나 업로드할 필요가 없습니다. Slurm 구성은 다음 단계의 CreateCluster API 요청에 직접 정의됩니다.

1. [CreateCluster](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateCluster.html) 요청 파일을 JSON 형식으로 준비하고 `create_cluster.json`으로 저장합니다.

   API 기반 구성을 사용하면 `SlurmConfig` 필드를 사용하여 각 인스턴스 그룹에 대한 Slurm 노드 유형 및 파티션 할당을 지정합니다. 또한를 사용하여 클러스터 수준 Slurm 설정을 구성합니다`Orchestrator.Slurm`.

   `ExecutionRole`의 경우 [SageMaker HyperPod 사용을 위한 사전 조건](sagemaker-hyperpod-prerequisites.md)에서 관리형 `AmazonSageMakerClusterInstanceRolePolicy`로 생성한 IAM 역할의 ARN을 제공합니다.

   ```
   {
       "ClusterName": "my-hyperpod-cluster",
       "InstanceGroups": [
           {
               "InstanceGroupName": "my-controller-group",
               "InstanceType": "ml.c5.xlarge",
               "InstanceCount": 1,
               "SlurmConfig": {
                   "NodeType": "Controller"
               },
               "LifeCycleConfig": {
                   "SourceS3Uri": "s3://sagemaker-<unique-s3-bucket-name>/<lifecycle-script-directory>/src",
                   "OnCreate": "on_create.sh"
               },
               "ExecutionRole": "arn:aws:iam::<account-id>:role/HyperPodExecutionRole",
               "InstanceStorageConfigs": [
                   {
                       "EbsVolumeConfig": {
                           "VolumeSizeInGB": 500
                       }
                   }
               ]
           },
           {
               "InstanceGroupName": "my-login-group",
               "InstanceType": "ml.m5.4xlarge",
               "InstanceCount": 1,
               "SlurmConfig": {
                   "NodeType": "Login"
               },
               "LifeCycleConfig": {
                   "SourceS3Uri": "s3://sagemaker-<unique-s3-bucket-name>/<lifecycle-script-directory>/src",
                   "OnCreate": "on_create.sh"
               },
               "ExecutionRole": "arn:aws:iam::<account-id>:role/HyperPodExecutionRole"
           },
           {
               "InstanceGroupName": "worker-group-1",
               "InstanceType": "ml.trn1.32xlarge",
               "InstanceCount": 1,
               "SlurmConfig": {
                   "NodeType": "Compute",
                   "PartitionNames": ["partition-1"]
               },
               "LifeCycleConfig": {
                   "SourceS3Uri": "s3://sagemaker-<unique-s3-bucket-name>/<lifecycle-script-directory>/src",
                   "OnCreate": "on_create.sh"
               },
               "ExecutionRole": "arn:aws:iam::<account-id>:role/HyperPodExecutionRole"
           }
       ],
       "Orchestrator": {
           "Slurm": {
               "SlurmConfigStrategy": "Managed"
           }
       }
   }
   ```

   **SlurmConfig 필드:**    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/smcluster-getting-started-slurm-cli.html)

   **Orchestrator.Slurm 필드:**    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/smcluster-getting-started-slurm-cli.html)

   **SlurmConfigStrategy 옵션:**
   + `Managed` (권장): HyperPod는 무단 변경(드리프트 `slurm.conf` 감지)을 완전히 관리하고 감지합니다. 드리프트가 감지되면 업데이트가 실패합니다.
   + `Overwrite`: HyperPod는 업데이트 `slurm.conf` 시 덮어쓰고 수동 변경 사항은 무시합니다.
   + `Merge`: HyperPod는 수동 변경 사항을 보존하고 API 구성과 병합합니다.

   **FSx for Lustre 추가(선택 사항):**

   FSx for Lustre 파일 시스템을 컴퓨팅 노드에 탑재하려면 인스턴스 그룹의 `FsxLustreConfig` `InstanceStorageConfigs`에를 추가합니다. 이를 위해서는 사용자 지정 VPC 구성이 필요합니다.

   ```
   {
       "InstanceGroupName": "worker-group-1",
       "InstanceType": "ml.trn1.32xlarge",
       "InstanceCount": 1,
       "SlurmConfig": {
           "NodeType": "Compute",
           "PartitionNames": ["partition-1"]
       },
       "InstanceStorageConfigs": [
           {
               "FsxLustreConfig": {
                   "DnsName": "fs-0abc123def456789.fsx.us-west-2.amazonaws.com",
                   "MountPath": "/fsx",
                   "MountName": "abcdefgh"
               }
           }
       ],
       "LifeCycleConfig": {
           "SourceS3Uri": "s3://sagemaker-<unique-s3-bucket-name>/<lifecycle-script-directory>/src",
           "OnCreate": "on_create.sh"
       },
       "ExecutionRole": "arn:aws:iam::<account-id>:role/HyperPodExecutionRole"
   }
   ```

   **FSx for OpenZFS 추가(선택 사항):**

   FSx for OpenZFS 파일 시스템을 탑재할 수도 있습니다.

   ```
   "InstanceStorageConfigs": [
       {
           "FsxOpenZfsConfig": {
               "DnsName": "fs-0xyz789abc123456.fsx.us-west-2.amazonaws.com",
               "MountPath": "/shared"
           }
       }
   ]
   ```
**참고**  
각 인스턴스 그룹은 최대 하나의 FSx for Lustre 및 하나의 FSx for OpenZFS 구성을 가질 수 있습니다. 인스턴스 그룹마다 다른 파일 시스템을 탑재할 수 있습니다.

   **VPC 구성 추가(FSx에 필요):**

   FSx를 사용하는 경우 사용자 지정 VPC 구성을 지정해야 합니다.

   ```
   {
       "ClusterName": "my-hyperpod-cluster",
       "InstanceGroups": [
           {
               "InstanceGroupName": "my-controller-group",
               "InstanceType": "ml.c5.xlarge",
               "InstanceCount": 1,
               "SlurmConfig": {
                   "NodeType": "Controller"
               },
               "LifeCycleConfig": {
                   "SourceS3Uri": "s3://sagemaker-<unique-s3-bucket-name>/<lifecycle-script-directory>/src",
                   "OnCreate": "on_create.sh"
               },
               "ExecutionRole": "arn:aws:iam::<account-id>:role/HyperPodExecutionRole"
           },
       ],
       "Orchestrator": {
           "Slurm": {
               "SlurmConfigStrategy": "Managed"
           }
       },
       "VpcConfig": {
           "SecurityGroupIds": ["sg-0abc123def456789a"],
           "Subnets": ["subnet-0abc123def456789a"]
       }
   }
   ```

1. 다음 명령을 실행하여 클러스터를 생성합니다.

   ```
   aws sagemaker create-cluster --cli-input-json file://complete/path/to/create_cluster.json
   ```

   이렇게 하면 생성된 클러스터의 ARN이 반환됩니다.

   ```
   {
       "ClusterArn": "arn:aws:sagemaker:us-west-2:111122223333:cluster/my-hyperpod-cluster"
   }
   ```

   리소스 제한으로 인해 오류가 발생하는 경우 계정의 할당량이 충분한 인스턴스 유형으로 변경하거나 [SageMaker HyperPod 할당량](sagemaker-hyperpod-prerequisites.md#sagemaker-hyperpod-prerequisites-quotas)에 따라 추가 할당량을 요청해야 합니다.

   **일반적인 검증 오류:**    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/smcluster-getting-started-slurm-cli.html)

1. `describe-cluster`를 실행하여 클러스터의 상태를 확인합니다.

   ```
   aws sagemaker describe-cluster --cluster-name my-hyperpod-cluster
   ```

   응답 예제:

   ```
   {
       "ClusterArn": "arn:aws:sagemaker:us-west-2:111122223333:cluster/my-hyperpod-cluster",
       "ClusterName": "my-hyperpod-cluster",
       "ClusterStatus": "Creating",
       "InstanceGroups": [
           {
               "InstanceGroupName": "my-controller-group",
               "InstanceType": "ml.c5.xlarge",
               "InstanceCount": 1,
               "CurrentCount": 0,
               "TargetCount": 1,
               "SlurmConfig": {
                   "NodeType": "Controller"
               },
               "LifeCycleConfig": {
                   "SourceS3Uri": "s3://sagemaker-<bucket>/src",
                   "OnCreate": "on_create.sh"
               },
               "ExecutionRole": "arn:aws:iam::111122223333:role/HyperPodExecutionRole"
           },
           {
               "InstanceGroupName": "my-login-group",
               "InstanceType": "ml.m5.4xlarge",
               "InstanceCount": 1,
               "CurrentCount": 0,
               "TargetCount": 1,
               "SlurmConfig": {
                   "NodeType": "Login"
               },
               "LifeCycleConfig": {
                   "SourceS3Uri": "s3://sagemaker-<bucket>/src",
                   "OnCreate": "on_create.sh"
               },
               "ExecutionRole": "arn:aws:iam::111122223333:role/HyperPodExecutionRole"
           },
           {
               "InstanceGroupName": "worker-group-1",
               "InstanceType": "ml.trn1.32xlarge",
               "InstanceCount": 1,
               "CurrentCount": 0,
               "TargetCount": 1,
               "SlurmConfig": {
                   "NodeType": "Compute",
                   "PartitionNames": ["partition-1"]
               },
               "LifeCycleConfig": {
                   "SourceS3Uri": "s3://sagemaker-<bucket>/src",
                   "OnCreate": "on_create.sh"
               },
               "ExecutionRole": "arn:aws:iam::111122223333:role/HyperPodExecutionRole"
           }
       ],
       "Orchestrator": {
           "Slurm": {
               "SlurmConfigStrategy": "Managed"
           }
       },
       "CreationTime": "2024-01-15T10:30:00Z"
   }
   ```

   클러스터 상태가 **InService**로 전환되면 다음 단계로 진행합니다. 클러스터 생성에는 일반적으로 10\$115분이 소요됩니다.

1. `list-cluster-nodes`를 실행하여 클러스터 노드의 세부 정보를 확인합니다.

   ```
   aws sagemaker list-cluster-nodes --cluster-name my-hyperpod-cluster
   ```

   응답 예제:

   ```
   {
       "ClusterNodeSummaries": [
           {
               "InstanceGroupName": "my-controller-group",
               "InstanceId": "i-0abc123def456789a",
               "InstanceType": "ml.c5.xlarge",
               "InstanceStatus": {
                   "Status": "Running",
                   "Message": ""
               },
               "LaunchTime": "2024-01-15T10:35:00Z"
           },
           {
               "InstanceGroupName": "my-login-group",
               "InstanceId": "i-0abc123def456789b",
               "InstanceType": "ml.m5.4xlarge",
               "InstanceStatus": {
                   "Status": "Running",
                   "Message": ""
               },
               "LaunchTime": "2024-01-15T10:35:00Z"
           },
           {
               "InstanceGroupName": "worker-group-1",
               "InstanceId": "i-0abc123def456789c",
               "InstanceType": "ml.trn1.32xlarge",
               "InstanceStatus": {
                   "Status": "Running",
                   "Message": ""
               },
               "LaunchTime": "2024-01-15T10:36:00Z"
           }
       ]
   }
   ```

   `InstanceId`는 클러스터 사용자가 로그인(`aws ssm`)하는 데 필요한 것입니다. 클러스터 노드에 로그인하고 ML 워크로드를 실행하는 방법에 대한 자세한 내용은 [SageMaker HyperPod 클러스터의 작업](sagemaker-hyperpod-run-jobs-slurm.md) 섹션을 참조하세요.

1.  AWS Systems Manager 세션 관리자를 사용하여 클러스터에 연결합니다.

   ```
   aws ssm start-session \
       --target sagemaker-cluster:my-hyperpod-cluster_my-login-group-i-0abc123def456789b \
       --region us-west-2
   ```

   연결되면 Slurm이 올바르게 구성되었는지 확인합니다.

   ```
   # Check Slurm nodes
   sinfo
   
   # Check Slurm partitions
   sinfo -p partition-1
   
   # Submit a test job
   srun -p partition-1 --nodes=1 hostname
   ```

## 클러스터를 삭제하고 리소스를 정리합니다.
<a name="smcluster-getting-started-slurm-cli-delete-cluster-and-clean"></a>

SageMaker HyperPod 클러스터 생성을 성공적으로 테스트한 후 클러스터를 삭제할 때까지 `InService` 상태에서 계속 실행됩니다. 온디맨드 요금을 기준으로 지속적인 서비스 요금이 발생하지 않도록 온디맨드 SageMaker AI 용량을 사용하여 생성된 클러스터를 사용하지 않을 때는 삭제하는 것이 좋습니다. 이 자습서에서는 세 개의 인스턴스 그룹으로 구성된 클러스터를 생성했습니다. 다음 명령을 실행하여 클러스터를 삭제해야 합니다.

```
aws sagemaker delete-cluster --cluster-name my-hyperpod-cluster
```

이 자습서에 사용되는 Amazon S3 버킷에서 수명 주기 스크립트를 정리하려면 클러스터 생성 중에 사용한 Amazon S3 버킷으로 이동하여 파일을 완전히 제거합니다.

```
aws s3 rm s3://sagemaker-<unique-s3-bucket-name>/<lifecycle-script-directory>/src --recursive
```

클러스터에서 모델 훈련 워크로드 실행을 테스트한 경우 데이터를 업로드했는지 또는 Amazon FSx for Lustre 및 Amazon Elastic File System과 같은 다른 Amazon S3 버킷 또는 파일 시스템 서비스에 아티팩트를 저장했는지도 확인합니다. 요금이 발생하지 않도록 하려면 스토리지 또는 파일 시스템에서 모든 아티팩트와 데이터를 삭제합니다.

## 관련 주제
<a name="smcluster-getting-started-slurm-cli-related-topics"></a>
+ [SageMaker HyperPod Slurm 구성](sagemaker-hyperpod-ref.md#sagemaker-hyperpod-ref-slurm-configuration)
+ [수명 주기 스크립트를 사용하여 SageMaker HyperPod 클러스터 사용자 지정](sagemaker-hyperpod-lifecycle-best-practices-slurm.md)
+ [InstanceStorageConfigs 통한 FSx 구성](sagemaker-hyperpod-ref.md#sagemaker-hyperpod-ref-slurm-fsx-config)
+ [SageMaker HyperPod Slurm 클러스터 작업](sagemaker-hyperpod-operate-slurm.md)