

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

# SageMaker HyperPod 다중 헤드 노드 지원
다중 헤드 노드 지원

단일 SageMaker HyperPod Slurm 클러스터에 여러 컨트롤러(헤드) 노드를 생성할 수 있으며, 하나는 기본 컨트롤러 노드 역할을 하고 다른 하나는 백업 컨트롤러 노드 역할을 합니다. 기본 컨트롤러 노드는 컴퓨팅(워커) 노드를 제어하고 Slurm 작업을 처리하는 역할을 합니다. 백업 컨트롤러 노드는 기본 컨트롤러 노드를 지속적으로 모니터링합니다. 기본 컨트롤러 노드에 장애가 있거나 응답하지 않는 경우 백업 컨트롤러 노드 중 하나가 자동으로 새 기본 컨트롤러 노드로 역할을 맡습니다.

SageMaker HyperPod Slurm 클러스터에서 다중 컨트롤러 노드를 구성하면 몇 가지 주요 이점이 있습니다. 컨트롤러 헤드 노드를 제공하여 단일 컨트롤러 노드 장애 위험을 제거하고, 더 빠른 복구로 백업 컨트롤러 노드에 대한 자동 장애 조치를 활성화하며, 자체 회계 데이터베이스와 Slurm 구성을 독립적으로 관리할 수 있습니다.

## 주요 개념


다음은 Slurm 클러스터에 대한 SageMaker HyperPod 다중 컨트롤러(헤드) 노드 지원과 관련된 개념에 대한 세부 정보를 제공합니다.

**컨트롤러 노드**

컨트롤러 노드는 클러스터의 작업을 관리하고 조정하기 위해 중요한 Slurm 서비스를 실행하는 클러스터 내의 Amazon EC2 인스턴스입니다. 특히 [Slurm 컨트롤러 대몬(slurmctld)](https://slurm.schedmd.com/slurmctld.html)과 [Slurm 데이터베이스 대몬(slurmdbd)](https://slurm.schedmd.com/slurmdbd.html)을 호스팅합니다. 컨트롤러 노드를 헤드 노드라고도 합니다.

**기본 컨트롤러 노드**

기본 컨트롤러 노드는 Slurm 클러스터에서 활성 상태이고 현재 제어 중인 컨트롤러 노드입니다. Slurm에서 클러스터 관리를 담당하는 기본 컨트롤러 노드로 식별됩니다. 기본 컨트롤러 노드는 사용자로부터 명령을 수신하고 실행하여 작업을 실행하기 위해 컴퓨팅 노드의 리소스를 제어하고 할당합니다.

**백업 컨트롤러 노드**

백업 컨트롤러 노드는 Slurm 클러스터의 비활성 및 대기 컨트롤러 노드입니다. Slurm에 의해 현재 클러스터를 관리하지 않는 백업 컨트롤러 노드로 식별됩니다. 백업 컨트롤러 노드는 대기 모드에서 [Slurm 컨트롤러 대몬(slurmctld)](https://slurm.schedmd.com/slurmctld.html)을 실행합니다. 백업 컨트롤러 노드에서 실행되는 모든 컨트롤러 명령은 실행을 위해 기본 컨트롤러 노드로 전파됩니다. 기본 컨트롤러 노드를 지속적으로 모니터링하고 기본 컨트롤러 노드에 장애가 있거나 응답하지 않는 경우 기본 컨트롤러 노드의 책임을 맡는 것이 주요 목적입니다.

**컴퓨팅 노드**

컴퓨팅 노드는 [Slurm 워커 대몬(slurmd)](https://slurm.schedmd.com/slurmd.html)을 호스팅하는 클러스터 내의 Amazon EC2 인스턴스입니다. 컴퓨팅 노드의 기본 기능은 기본 컨트롤러 노드에서 실행되는 [Slurm 컨트롤러 대몬(slurmctld)](https://slurm.schedmd.com/slurmctld.html)에 의해 할당된 작업을 실행하는 것입니다. 작업이 예약되면 컴퓨팅 노드는 [Slurm 컨트롤러 대몬(slurmctld)](https://slurm.schedmd.com/slurmctld.html)으로부터 노드 자체 내에서 해당 작업에 필요한 작업 및 계산을 수행하라는 지침을 받습니다. 컴퓨팅을 워커 노드라고도 합니다.

## 작동 방식


다음 다이어그램은 다양한 AWS 서비스가 함께 작동하여 SageMaker HyperPod Slurm 클러스터에 대한 여러 컨트롤러(헤드) 노드 아키텍처를 지원하는 방법을 보여줍니다.

![\[SageMaker HyperPod 다중 헤드 노드 아키텍처 다이어그램\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/hyperpod/hyperpod-multihead-architecture.png)


SageMaker HyperPod 다중 컨트롤러(헤드) 노드 아키텍처를 지원하기 위해 함께 작동하는 AWS 서비스에는 다음이 포함됩니다.


**AWS SageMaker HyperPod 다중 컨트롤러 노드 아키텍처를 지원하기 위해 함께 작동하는 서비스**  

| 서비스 | 설명 | 
| --- | --- | 
| IAM(AWS Identity and Access Management) | 액세스 권한을 제어할 두 개의 IAM 역할을 정의합니다. 하나는 컴퓨팅 노드 인스턴스 그룹에 대한 역할이고 다른 하나는 컨트롤러 노드 인스턴스 그룹에 대한 역할입니다. | 
| Amazon RDS for MariaDB | 작업 레코드와 측정 데이터를 보관하는 Slurm의 회계 데이터를 저장합니다. | 
| AWS Secrets Manager | Amazon FSx for Lustre에서 액세스할 수 있는 자격 증명을 저장하고 관리합니다. | 
| Amazon FSx for Lustre  | Slurm 구성 및 런타임 상태를 저장합니다. | 
| Amazon VPC | HyperPod 클러스터와 해당 리소스가 배포되는 격리된 네트워크 환경을 제공합니다. | 
| Amazon SNS  | 기본 컨트롤러(헤드) 노드와 관련된 상태 변경(Slurm 컨트롤러가 ON 또는 OFF 상태임)이 있는 경우 관리자에게 알림을 보냅니다. | 

HyperPod 클러스터 자체는 컨트롤러 노드(기본 및 백업)와 컴퓨팅 노드로 구성됩니다. 컨트롤러 노드는 컴퓨팅 노드 전반의 워크로드를 관리하고 모니터링하는 Slurm 컨트롤러(SlurmCtld) 및 데이터베이스(SlurmDBd) 구성 요소를 실행합니다.

컨트롤러 노드는 Amazon FSx for Lustre 파일 시스템에 저장된 Slurm 구성 및 런타임 상태에 액세스합니다. Slurm 회계 데이터는 Amazon RDS for MariaDB 데이터베이스에 저장됩니다.는 컨트롤러 노드의 데이터베이스 자격 증명에 대한 보안 액세스를 AWS Secrets Manager 제공합니다.

Slurm 컨트롤러 노드에 상태 변경(Slurm 컨트롤러가 `ON` 또는 `OFF` 상태임)이 있는 경우 Amazon SNS는 추가 작업을 위해 관리자에게 알림을 보냅니다.

이 다중 컨트롤러 노드 아키텍처는 단일 컨트롤러(헤드) 노드의 단일 장애 지점을 제거하고, 빠른 자동 장애 조치 복구를 지원하며, Slurm 회계 데이터베이스 및 구성에 대한 제어 기능을 제공합니다.

# SageMaker HyperPod Slurm 클러스터에 대해 다중 컨트롤러 노드 설정
다중 컨트롤러 노드 설정

이 주제에서는 수명 주기 스크립트를 사용하여 SageMaker HyperPod Slurm 클러스터에 다중 컨트롤러(헤드) 노드를 구성하는 방법을 설명합니다. 시작하기 전에 [SageMaker HyperPod 사용을 위한 사전 조건](sagemaker-hyperpod-prerequisites.md)에 나열된 사전 조건을 검토하고 [수명 주기 스크립트를 사용하여 SageMaker HyperPod 클러스터 사용자 지정](sagemaker-hyperpod-lifecycle-best-practices-slurm.md)의 수명 주기 스크립트를 숙지하세요. 이 주제의 지침은 Amazon Linux 환경에서 AWS CLI 명령을 사용합니다. 이러한 명령에 사용되는 환경 변수는 명시적으로 보존되지 않는 한 현재 세션에서 사용할 수 있습니다.

**Topics**
+ [

# CloudFormation 스택을 사용하여 리소스 프로비저닝
](sagemaker-hyperpod-multihead-slurm-cfn.md)
+ [

# IAM 정책 생성 및 연결
](sagemaker-hyperpod-multihead-slurm-iam.md)
+ [

# 수명 주기 스크립트 준비 및 업로드
](sagemaker-hyperpod-multihead-slurm-scripts.md)
+ [

# SageMaker HyperPod 클러스터 생성
](sagemaker-hyperpod-multihead-slurm-create.md)
+ [

# 중요 참고 사항 고려
](sagemaker-hyperpod-multihead-slurm-notes.md)
+ [

# 환경 변수 참조 검토
](sagemaker-hyperpod-multihead-slurm-variables-reference.md)

# CloudFormation 스택을 사용하여 리소스 프로비저닝
리소스 프로비저닝

HyperPod Slurm 클러스터에 여러 컨트롤러 노드를 설정하려면 [기본 리소스 프로비저닝](#sagemaker-hyperpod-multihead-slurm-cfn-basic) 및의 두 CloudFormation 스택을 통해 리소스를 프로비저닝 AWS 합니다[다중 컨트롤러 노드를 지원하는 추가 리소스 프로비저닝](#sagemaker-hyperpod-multihead-slurm-cfn-multihead).

## 기본 리소스 프로비저닝


다음 단계에 따라 Amazon SageMaker HyperPod Slurm 클러스터에 대한 기본 리소스를 프로비저닝합니다.

1. [sagemaker-hyperpod.yaml](https://github.com/aws-samples/awsome-distributed-training/blob/main/1.architectures/5.sagemaker-hyperpod/sagemaker-hyperpod.yaml) 템플릿 파일을 머신에 다운로드합니다. 이 YAML 파일은 Slurm 클러스터에 대해 생성할 다음 리소스를 정의하는 CloudFormation 템플릿입니다.
   + 컴퓨팅 노드 인스턴스 그룹에 대한 실행 IAM 역할
   + 수명 주기 스크립트를 저장할 Amazon S3 버킷
   + 퍼블릭 및 프라이빗 서브넷(프라이빗 서브넷은 NAT 게이트웨이를 통해 인터넷에 액세스할 수 있음)
   + 인터넷 게이트웨이/NAT 게이트웨이
   + Amazon EC2 보안 그룹 두 개
   + 구성 파일을 저장할 Amazon FSx 볼륨

1. 다음 CLI 명령을 실행하여 라는 CloudFormation 스택을 생성합니다`sagemaker-hyperpod`. `PrimarySubnetAZ` 및 `BackupSubnetAZ`에서 클러스터의 가용 영역(AZ) ID를 정의합니다. 예를 들어, *use1-az4*는 `us-east-1` 리전의 가용 영역에 대한 AZ ID입니다. 자세한 내용은 [Availability Zone IDs](https://docs.aws.amazon.com//ram/latest/userguide/working-with-az-ids.html) 및 [여러 AZ에서 SageMaker HyperPod 클러스터 설정](sagemaker-hyperpod-prerequisites.md#sagemaker-hyperpod-prerequisites-multiple-availability-zones) 섹션을 참조하세요.

   ```
   aws cloudformation deploy \
   --template-file /path_to_template/sagemaker-hyperpod.yaml \
   --stack-name sagemaker-hyperpod \
   --parameter-overrides PrimarySubnetAZ=use1-az4 BackupSubnetAZ=use1-az1 \
   --capabilities CAPABILITY_IAM
   ```

   자세한 내용은 AWS Command Line Interface 참조의 [배포](https://docs.aws.amazon.com//cli/latest/reference/cloudformation/deploy/)를 참조하세요. 스택 생성을 완료하는 데 몇 분이 걸릴 수 있습니다. 완료되면 명령줄 인터페이스에 다음이 표시됩니다.

   ```
   Waiting for changeset to be created..
   Waiting for stack create/update to complete
   Successfully created/updated stack - sagemaker-hyperpod
   ```

1. (선택 사항) [CloudFormation 콘솔](https://console.aws.amazon.com/cloudformation/home)에서 스택을 확인합니다.
   + 왼쪽 탐색에서 **스택**을 선택합니다.
   + **스택** 페이지에서 **sagemaker-hyperpod**를 찾아 선택합니다.
   + **리소스** 및 **출력**과 같은 탭을 선택하여 리소스 및 출력을 검토합니다.

1. 스택(`sagemaker-hyperpod`) 출력에서 환경 변수를 생성합니다. 이러한 변수의 값을 [다중 컨트롤러 노드를 지원하는 추가 리소스 프로비저닝](#sagemaker-hyperpod-multihead-slurm-cfn-multihead)에 사용합니다.

   ```
   source .env
   PRIMARY_SUBNET=$(aws --region $REGION cloudformation describe-stacks --stack-name $SAGEMAKER_STACK_NAME --query 'Stacks[0].Outputs[?OutputKey==`PrimaryPrivateSubnet`].OutputValue' --output text)
   BACKUP_SUBNET=$(aws --region $REGION cloudformation describe-stacks --stack-name $SAGEMAKER_STACK_NAME --query 'Stacks[0].Outputs[?OutputKey==`BackupPrivateSubnet`].OutputValue' --output text)
   EMAIL=$(bash -c 'read -p "INPUT YOUR SNSSubEmailAddress HERE: " && echo $REPLY')
   DB_USER_NAME=$(bash -c 'read -p "INPUT YOUR DB_USER_NAME HERE: " && echo $REPLY')
   SECURITY_GROUP=$(aws --region $REGION cloudformation describe-stacks --stack-name $SAGEMAKER_STACK_NAME --query 'Stacks[0].Outputs[?OutputKey==`SecurityGroup`].OutputValue' --output text)
   ROOT_BUCKET_NAME=$(aws --region $REGION cloudformation describe-stacks --stack-name $SAGEMAKER_STACK_NAME --query 'Stacks[0].Outputs[?OutputKey==`AmazonS3BucketName`].OutputValue' --output text)
   SLURM_FSX_DNS_NAME=$(aws --region $REGION cloudformation describe-stacks --stack-name $SAGEMAKER_STACK_NAME --query 'Stacks[0].Outputs[?OutputKey==`FSxLustreFilesystemDNSname`].OutputValue' --output text)
   SLURM_FSX_MOUNT_NAME=$(aws --region $REGION cloudformation describe-stacks --stack-name $SAGEMAKER_STACK_NAME --query 'Stacks[0].Outputs[?OutputKey==`FSxLustreFilesystemMountname`].OutputValue' --output text)
   COMPUTE_NODE_ROLE=$(aws --region $REGION cloudformation describe-stacks --stack-name $SAGEMAKER_STACK_NAME --query 'Stacks[0].Outputs[?OutputKey==`AmazonSagemakerClusterExecutionRoleArn`].OutputValue' --output text)
   ```

   이메일 주소와 데이터베이스 사용자 이름을 묻는 메시지가 표시되면 다음과 같은 값을 입력합니다.

   ```
   INPUT YOUR SNSSubEmailAddress HERE: Email_address_to_receive_SNS_notifications
   INPUT YOUR DB_USER_NAME HERE: Database_user_name_you_define
   ```

   변수 값을 확인하려면 `print $variable` 명령을 사용합니다.

   ```
   print $REGION
   us-east-1
   ```

## 다중 컨트롤러 노드를 지원하는 추가 리소스 프로비저닝


다음 단계에 따라 여러 컨트롤러 노드가 있는 Amazon SageMaker HyperPod Slurm 클러스터에 대한 추가 리소스를 프로비저닝합니다.

1. [sagemaker-hyperpod-slurm-multi-headnode.yaml](https://github.com/aws-samples/awsome-distributed-training/blob/main/1.architectures/5.sagemaker-hyperpod/sagemaker-hyperpod-slurm-multi-headnode.yaml) 템플릿 파일을 머신에 다운로드합니다. 이 두 번째 YAML 파일은 Slurm 클러스터에서 여러 컨트롤러 노드 지원을 위해 생성할 추가 리소스를 정의하는 CloudFormation 템플릿입니다.
   + 컨트롤러 노드 인스턴스 그룹에 대한 실행 IAM 역할
   + Amazon RDS for MariaDB 인스턴스
   + Amazon SNS 주제 및 구독
   + AWS Secrets Manager Amazon RDS for MariaDB에 대한 자격 증명

1. 다음 CLI 명령을 실행하여 라는 CloudFormation 스택을 생성합니다`sagemaker-hyperpod-mh`. 이 두 번째 스택은 CloudFormation 템플릿을 사용하여 여러 컨트롤러 노드 아키텍처를 지원하는 추가 AWS 리소스를 생성합니다.

   ```
   aws cloudformation deploy \
   --template-file /path_to_template/slurm-multi-headnode.yaml \
   --stack-name sagemaker-hyperpod-mh \
   --parameter-overrides \
   SlurmDBSecurityGroupId=$SECURITY_GROUP \
   SlurmDBSubnetGroupId1=$PRIMARY_SUBNET \
   SlurmDBSubnetGroupId2=$BACKUP_SUBNET \
   SNSSubEmailAddress=$EMAIL \
   SlurmDBUsername=$DB_USER_NAME \
   --capabilities CAPABILITY_NAMED_IAM
   ```

   자세한 내용은 AWS Command Line Interface 참조의 [배포](https://docs.aws.amazon.com//cli/latest/reference/cloudformation/deploy/)를 참조하세요. 스택 생성을 완료하는 데 몇 분이 걸릴 수 있습니다. 완료되면 명령줄 인터페이스에 다음이 표시됩니다.

   ```
   Waiting for changeset to be created..
   Waiting for stack create/update to complete
   Successfully created/updated stack - sagemaker-hyperpod-mh
   ```

1. (선택 사항) [AWS Cloud Formation 콘솔](https://console.aws.amazon.com/cloudformation/home)에서 스택을 확인합니다.
   + 왼쪽 탐색에서 **스택**을 선택합니다.
   + **스택** 페이지에서 **sagemaker-hyperpod-mh**를 찾아 선택합니다.
   + **리소스** 및 **출력**과 같은 탭을 선택하여 리소스 및 출력을 검토합니다.

1. 스택(`sagemaker-hyperpod-mh`) 출력에서 환경 변수를 생성합니다. 이러한 변수의 값을 사용하여 [수명 주기 스크립트 준비 및 업로드](sagemaker-hyperpod-multihead-slurm-scripts.md)에서 구성 파일(`provisioning_parameters.json`)을 업데이트합니다.

   ```
   source .env
   SLURM_DB_ENDPOINT_ADDRESS=$(aws --region us-east-1 cloudformation describe-stacks --stack-name $MULTI_HEAD_SLURM_STACK --query 'Stacks[0].Outputs[?OutputKey==`SlurmDBEndpointAddress`].OutputValue' --output text)
   SLURM_DB_SECRET_ARN=$(aws --region us-east-1 cloudformation describe-stacks --stack-name $MULTI_HEAD_SLURM_STACK --query 'Stacks[0].Outputs[?OutputKey==`SlurmDBSecretArn`].OutputValue' --output text)
   SLURM_EXECUTION_ROLE_ARN=$(aws --region us-east-1 cloudformation describe-stacks --stack-name $MULTI_HEAD_SLURM_STACK --query 'Stacks[0].Outputs[?OutputKey==`SlurmExecutionRoleArn`].OutputValue' --output text)
   SLURM_SNS_FAILOVER_TOPIC_ARN=$(aws --region us-east-1 cloudformation describe-stacks --stack-name $MULTI_HEAD_SLURM_STACK --query 'Stacks[0].Outputs[?OutputKey==`SlurmFailOverSNSTopicArn`].OutputValue' --output text)
   ```

# IAM 정책 생성 및 연결
IAM 정책 생성 및 연결

이 섹션에서는 IAM 정책을 생성하고 [다중 컨트롤러 노드를 지원하는 추가 리소스 프로비저닝](sagemaker-hyperpod-multihead-slurm-cfn.md#sagemaker-hyperpod-multihead-slurm-cfn-multihead)에서 생성한 실행 역할에 연결하는 방법을 설명합니다.

1. GitHub 리포지토리에서 [IAM policy example](https://github.com/aws-samples/awsome-distributed-training/blob/main/1.architectures/5.sagemaker-hyperpod/1.AmazonSageMakerClustersExecutionRolePolicy.json)을 머신에 다운로드합니다.

1. [create-policy](https://docs.aws.amazon.com//cli/latest/reference/iam/create-policy.html) CLI 명령을 사용하여 다운로드한 예시로 IAM 정책을 생성합니다.

   ```
   aws --region us-east-1 iam create-policy \
       --policy-name AmazonSagemakerExecutionPolicy \
       --policy-document file://1.AmazonSageMakerClustersExecutionRolePolicy.json
   ```

   명령의 예시 출력입니다.

   ```
   {
       "Policy": {
           "PolicyName": "AmazonSagemakerExecutionPolicy",
           "PolicyId": "ANPAXISIWY5UYZM7WJR4W",
           "Arn": "arn:aws:iam::111122223333:policy/AmazonSagemakerExecutionPolicy",
           "Path": "/",
           "DefaultVersionId": "v1",
           "AttachmentCount": 0,
           "PermissionsBoundaryUsageCount": 0,
           "IsAttachable": true,
           "CreateDate": "2025-01-22T20:01:21+00:00",
           "UpdateDate": "2025-01-22T20:01:21+00:00"
       }
   }
   ```

1. [attach-role-policy](https://docs.aws.amazon.com//cli/latest/reference/iam/attach-role-policy.html) CLI 명령을 사용하여 [다중 컨트롤러 노드를 지원하는 추가 리소스 프로비저닝](sagemaker-hyperpod-multihead-slurm-cfn.md#sagemaker-hyperpod-multihead-slurm-cfn-multihead)에서 생성한 Slurm 실행 역할에 `AmazonSagemakerExecutionPolicy` 정책을 연결합니다.

   ```
   aws --region us-east-1 iam attach-role-policy \
       --role-name AmazonSagemakerExecutionRole \
       --policy-arn arn:aws:iam::111122223333:policy/AmazonSagemakerExecutionPolicy
   ```

   이 명령은 출력을 생성하지 않습니다.

   (선택 사항) 환경 변수를 사용하는 경우 다음은 예시 명령입니다.
   + 역할 이름 및 정책 이름을 가져오는 방법 

     ```
     POLICY=$(aws --region $REGION iam list-policies --query 'Policies[?PolicyName==AmazonSagemakerExecutionPolicy].Arn' --output text)
     ROLENAME=$(aws --region $REGION iam list-roles --query "Roles[?Arn=='${SLURM_EXECUTION_ROLE_ARN}'].RoleName" —output text)
     ```
   +  정책 연결

     ```
     aws  --region us-east-1 iam attach-role-policy \
          --role-name $ROLENAME --policy-arn $POLICY
     ```

자세한 내용은 [SageMaker HyperPod의 IAM 역할](sagemaker-hyperpod-prerequisites-iam.md#sagemaker-hyperpod-prerequisites-iam-role-for-hyperpod) 단원을 참조하십시오.

# 수명 주기 스크립트 준비 및 업로드
수명 주기 스크립트 준비 및 업로드

필요한 리소스를 모두 생성한 후에는 SageMaker HyperPod 클러스터에 대한 [수명 주기 스크립트](https://github.com/aws-samples/awsome-distributed-training/tree/main/1.architectures/5.sagemaker-hyperpod/LifecycleScripts)를 설정해야 합니다. 이러한 [수명 주기 스크립트](https://github.com/aws-samples/awsome-distributed-training/tree/main/1.architectures/5.sagemaker-hyperpod/LifecycleScripts)는 기본 HyperPod Slurm 클러스터를 생성하는 데 사용할 수 있는 [기본 구성](https://github.com/aws-samples/awsome-distributed-training/tree/main/1.architectures/5.sagemaker-hyperpod/LifecycleScripts/base-config)을 제공합니다.

## 수명 주기 스크립트 준비


다음 단계를 따라 수명 주기 스크립트를 가져오세요.

1. GitHub 리포지토리에서 [lifecycle scripts](https://github.com/aws-samples/awsome-distributed-training/tree/main/1.architectures/5.sagemaker-hyperpod/LifecycleScripts)를 머신으로 다운로드합니다.

1. [cp](https://docs.aws.amazon.com//cli/latest/reference/s3/cp.html) CLI 명령을 사용하여 [기본 리소스 프로비저닝](sagemaker-hyperpod-multihead-slurm-cfn.md#sagemaker-hyperpod-multihead-slurm-cfn-basic)에서 생성한 Amazon S3 버킷에 [수명 주기 스크립트](https://github.com/aws-samples/awsome-distributed-training/tree/main/1.architectures/5.sagemaker-hyperpod/LifecycleScripts)를 업로드합니다.

   ```
   aws s3 cp --recursive LifeCycleScripts/base-config s3://${ROOT_BUCKET_NAME}/LifeCycleScripts/base-config
   ```

## 구성 파일 생성


다음 단계에 따라 구성 파일을 생성하고 수명 주기 스크립트를 저장하는 곳과 동일한 Amazon S3 버킷에 업로드합니다.

1. 다음 구성이 포함된 `provisioning_parameters.json`이라는 구성 파일을 생성합니다. `slurm_sns_arn`은 선택 사항입니다. 제공되지 않으면 HyperPod는 Amazon SNS 알림을 설정하지 않습니다.

   ```
   cat <<EOF > /tmp/provisioning_parameters.json
   {
     "version": "1.0.0",
     "workload_manager": "slurm",
     "controller_group": "$CONTOLLER_IG_NAME",
     "login_group": "my-login-group",
     "worker_groups": [
       {
         "instance_group_name": "$COMPUTE_IG_NAME",
         "partition_name": "dev"
       }
     ],
     "fsx_dns_name": "$SLURM_FSX_DNS_NAME",
     "fsx_mountname": "$SLURM_FSX_MOUNT_NAME",
     "slurm_configurations": {
       "slurm_database_secret_arn": "$SLURM_DB_SECRET_ARN",
       "slurm_database_endpoint": "$SLURM_DB_ENDPOINT_ADDRESS",
       "slurm_shared_directory": "/fsx",
       "slurm_database_user": "$DB_USER_NAME",
       "slurm_sns_arn": "$SLURM_SNS_FAILOVER_TOPIC_ARN"
     }
   }
   EOF
   ```

1. 수명 주기 스크립트를 저장하는 곳과 동일한 Amazon S3 버킷에 `provisioning_parameters.json` 파일을 업로드합니다.

   ```
   aws s3 cp /tmp/provisioning_parameters.json s3://${ROOT_BUCKET_NAME}/LifeCycleScripts/base-config/provisioning_parameters.json
   ```
**참고**  
API 기반 구성을 사용하는 경우 `provisioning_parameters.json` 파일이 필요하지 않습니다. API 기반 구성을 사용하면 CreateCluster API 페이로드에서 직접 Slurm 노드 유형, 파티션 및 FSx 탑재를 정의할 수 있습니다. 자세한 내용은 [를 사용하여 SageMaker HyperPod 시작하기를 참조하세요 AWS CLI](smcluster-getting-started-slurm-cli.md).

## Amazon S3 버킷의 파일 확인


모든 수명 주기 스크립트와 `provisioning_parameters.json` 파일을 업로드하고 나면 Amazon S3 버킷은 다음과 유사해집니다.

![\[Amazon Simple Storage Service 콘솔에서 Amazon S3 버킷에 업로드된 모든 수명 주기 스크립트를 보여주는 이미지입니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/hyperpod/hyperpod-lifecycle-scripts-s3.png)


자세한 내용은 [Start with base lifecycle scripts provided by HyperPod](https://docs.aws.amazon.com//sagemaker/latest/dg/sagemaker-hyperpod-lifecycle-best-practices-slurm-slurm-base-config.html)를 참조하세요.

# SageMaker HyperPod 클러스터 생성
클러스터 생성

필요한 모든 리소스를 설정하고 스크립트를 Amazon S3 버킷에 업로드한 후 클러스터를 생성할 수 있습니다.

1. 클러스터를 생성하려면 [https://docs.aws.amazon.com//cli/latest/reference/sagemaker/create-cluster.html](https://docs.aws.amazon.com//cli/latest/reference/sagemaker/create-cluster.html) AWS CLI 명령을 실행합니다. 이 생성 프로세스가 완료되는 데 최대 15분이 걸릴 수 있습니다.

   ```
   aws --region $REGION sagemaker create-cluster \
       --cluster-name $HP_CLUSTER_NAME \
       --vpc-config '{
           "SecurityGroupIds":["'$SECURITY_GROUP'"],
           "Subnets":["'$PRIMARY_SUBNET'", "'$BACKUP_SUBNET'"]
       }' \
       --instance-groups '[{                  
       "InstanceGroupName": "'$CONTOLLER_IG_NAME'",
       "InstanceType": "ml.t3.medium",
       "InstanceCount": 2,
       "LifeCycleConfig": {
           "SourceS3Uri": "s3://'$BUCKET_NAME'",
           "OnCreate": "on_create.sh"
       },
       "ExecutionRole": "'$SLURM_EXECUTION_ROLE_ARN'",
       "ThreadsPerCore": 1
   },
   {
       "InstanceGroupName": "'$COMPUTE_IG_NAME'",          
       "InstanceType": "ml.c5.xlarge",
       "InstanceCount": 2,
       "LifeCycleConfig": {
           "SourceS3Uri": "s3://'$BUCKET_NAME'",
           "OnCreate": "on_create.sh"
       },
       "ExecutionRole": "'$COMPUTE_NODE_ROLE'",
       "ThreadsPerCore": 1
   }]'
   ```

   실행에 성공하면 명령은 다음과 같이 클러스터 ARN을 반환합니다.

   ```
   {
       "ClusterArn": "arn:aws:sagemaker:us-east-1:111122223333:cluster/cluster_id"
   }
   ```

1. (선택 사항) 클러스터의 상태를 확인하려면 SageMaker AI 콘솔([https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/))을 사용할 수 있습니다. 왼쪽 탐색 창에서 **HyperPod 클러스터**를 선택한 다음 **클러스터 관리**를 선택합니다. 클러스터 이름을 선택하여 클러스터 세부 정보 페이지를 엽니다. 클러스터가 성공적으로 생성되면 클러스터 상태가 **InService**로 표시됩니다.  
![\[Amazon SageMaker AI 콘솔에 여러 컨트롤러 노드가 있는 HyperPod Slurm 클러스터를 보여주는 이미지입니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/hyperpod/hyperpod-lifecycle-multihead-cluster.png)

# 중요 참고 사항 고려
고려 사항

이 섹션에서는 도움이 될 수 있는 몇 가지 중요한 정보를 제공합니다.

1. 다중 컨트롤러 Slurm 클러스터로 마이그레이션하려면 다음 단계를 완료하세요.

   1. [CloudFormation 스택을 사용하여 리소스 프로비저닝](sagemaker-hyperpod-multihead-slurm-cfn.md)의 지침에 따라 필요한 모든 리소스를 프로비저닝합니다.

   1. [수명 주기 스크립트 준비 및 업로드](sagemaker-hyperpod-multihead-slurm-scripts.md)의 지침에 따라 업데이트된 수명 주기 스크립트를 업로드합니다. `provisioning_parameters.json` 파일을 업데이트할 때 기존 컨트롤러 그룹을 `worker_groups` 섹션으로 이동하고 `controller_group` 섹션에 새 컨트롤러 그룹 이름을 추가합니다.

   1. [update-cluster](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/update-cluster.html) API 직접 호출을 실행하여 새 컨트롤러 그룹을 생성하고 원래 컴퓨팅 인스턴스 그룹과 컨트롤러 그룹을 유지합니다.

1. 컨트롤러 노드 수를 스케일 다운하려면 [update-cluster](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/update-cluster.html) CLI 명령을 사용합니다. 각 컨트롤러 인스턴스 그룹에 대해 최소 1개의 컨트롤러 노드까지 스케일 다운할 수 있습니다. 즉, 컨트롤러 노드 수를 0으로 스케일 다운할 수 없습니다.
**중요**  
2025년 1월 24일 이전에 생성된 클러스터의 경우 [update-cluster](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/update-cluster.html) CLI 명령을 실행하기 전에 먼저 [UpdateClusterSoftware](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateClusterSoftware.html) API를 사용하여 클러스터 소프트웨어를 업데이트해야 합니다.

   다음은 컨트롤러 노드 수를 스케일 다운하는 CLI 명령의 예입니다.

   ```
   aws sagemaker update-cluster \
       --cluster-name my_cluster \
       --instance-groups '[{                  
       "InstanceGroupName": "controller_ig_name",
       "InstanceType": "ml.t3.medium",
       "InstanceCount": 3,
       "LifeCycleConfig": {
           "SourceS3Uri": "s3://amzn-s3-demo-bucket1",
           "OnCreate": "on_create.sh"
       },
       "ExecutionRole": "slurm_execution_role_arn",
       "ThreadsPerCore": 1
   },
   {
       "InstanceGroupName": "compute-ig_name",       
       "InstanceType": "ml.c5.xlarge",
       "InstanceCount": 2,
       "LifeCycleConfig": {
           "SourceS3Uri": "s3://amzn-s3-demo-bucket1",
           "OnCreate": "on_create.sh"
       },
       "ExecutionRole": "compute_node_role_arn",
       "ThreadsPerCore": 1
   }]'
   ```

1. 컨트롤러 노드를 일괄 삭제하려면 [batch-delete-cluster-nodes](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/batch-delete-cluster-nodes.html) CLI 명령을 사용합니다. 각 컨트롤러 인스턴스 그룹에 대해 하나 이상의 컨트롤러 노드를 유지해야 합니다. 모든 컨트롤러 노드를 일괄 삭제하려는 경우 API 작업이 작동하지 않습니다.
**중요**  
2025년 1월 24일 이전에 생성된 클러스터의 경우 [batch-delete-cluster-nodes](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/batch-delete-cluster-nodes.html) CLI 명령을 실행하기 전에 먼저 [UpdateClusterSoftware](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateClusterSoftware.html) API를 사용하여 클러스터 소프트웨어를 업데이트해야 합니다.

   다음은 컨트롤러 노드를 일괄 삭제하는 CLI 명령의 예입니다.

   ```
   aws sagemaker batch-delete-cluster-nodes --cluster-name my_cluster --node-ids instance_ids_to_delete
   ```

1. 클러스터 생성 문제를 해결하려면 SageMaker AI 콘솔의 클러스터 세부 정보 페이지에서 실패 메시지를 확인하세요. CloudWatch 로그를 사용하여 클러스터 생성 문제를 해결할 수도 있습니다. CloudWatch 콘솔에서 **로그 그룹**을 선택합니다. 그런 다음, `clusters`를 검색하여 클러스터 생성과 관련된 로그 그룹 목록을 확인합니다.  
![\[CloudWatch 콘솔의 Amazon SageMaker HyperPod 클러스터 로그 그룹을 보여주는 이미지입니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/hyperpod/hyperpod-lifecycle-multihead-logs.png)

# 환경 변수 참조 검토
환경 변수 참조

다음 환경 변수는 [SageMaker HyperPod Slurm 클러스터에 대해 다중 컨트롤러 노드 설정](sagemaker-hyperpod-multihead-slurm-setup.md)의 자습서에서 정의되고 사용됩니다. 이러한 환경 변수는 명시적으로 보존되지 않는 한 현재 세션에서만 사용할 수 있습니다. `$variable_name` 구문을 사용하여 정의됩니다. 키/값 페어가 있는 변수는 AWS생성된 리소스를 나타내고 키가 없는 변수는 사용자 정의입니다.


**환경 변수 참조**  

| 변수 | 설명 | 
| --- | --- | 
| \$1BACKUP\$1SUBNET |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/sagemaker-hyperpod-multihead-slurm-variables-reference.html)  | 
| \$1COMPUTE\$1IG\$1NAME |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/sagemaker-hyperpod-multihead-slurm-variables-reference.html)  | 
| \$1COMPUTE\$1NODE\$1ROLE |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/sagemaker-hyperpod-multihead-slurm-variables-reference.html)  | 
| \$1CONTOLLER\$1IG\$1NAME |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/sagemaker-hyperpod-multihead-slurm-variables-reference.html)  | 
| \$1DB\$1USER\$1NAME |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/sagemaker-hyperpod-multihead-slurm-variables-reference.html)  | 
| \$1EMAIL |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/sagemaker-hyperpod-multihead-slurm-variables-reference.html)  | 
| \$1PRIMARY\$1SUBNET |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/sagemaker-hyperpod-multihead-slurm-variables-reference.html)  | 
| \$1POLICY |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/sagemaker-hyperpod-multihead-slurm-variables-reference.html)  | 
| \$1REGION |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/sagemaker-hyperpod-multihead-slurm-variables-reference.html)  | 
| \$1ROOT\$1BUCKET\$1NAME |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/sagemaker-hyperpod-multihead-slurm-variables-reference.html)  | 
| \$1SECURITY\$1GROUP |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/sagemaker-hyperpod-multihead-slurm-variables-reference.html)  | 
| \$1SLURM\$1DB\$1ENDPOINT\$1ADDRESS |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/sagemaker-hyperpod-multihead-slurm-variables-reference.html)  | 
| \$1SLURM\$1DB\$1SECRET\$1ARN |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/sagemaker-hyperpod-multihead-slurm-variables-reference.html)  | 
| \$1SLURM\$1EXECUTION\$1ROLE\$1ARN |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/sagemaker-hyperpod-multihead-slurm-variables-reference.html)  | 
| \$1SLURM\$1FSX\$1DNS\$1NAME |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/sagemaker-hyperpod-multihead-slurm-variables-reference.html)  | 
| \$1SLURM\$1FSX\$1MOUNT\$1NAME |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/sagemaker-hyperpod-multihead-slurm-variables-reference.html)  | 
| \$1SLURM\$1SNS\$1FAILOVER\$1TOPIC\$1ARN |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/sagemaker-hyperpod-multihead-slurm-variables-reference.html)  | 