

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

# CloudFormation 스택을 사용하여 리소스 프로비저닝
<a name="sagemaker-hyperpod-multihead-slurm-cfn"></a>

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

## 기본 리소스 프로비저닝
<a name="sagemaker-hyperpod-multihead-slurm-cfn-basic"></a>

다음 단계에 따라 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
   ```

## 다중 컨트롤러 노드를 지원하는 추가 리소스 프로비저닝
<a name="sagemaker-hyperpod-multihead-slurm-cfn-multihead"></a>

다음 단계에 따라 여러 컨트롤러 노드가 있는 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)
   ```