

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# CloudFormation スタックを使用したリソースのプロビジョニング
<a name="sagemaker-hyperpod-multihead-slurm-cfn"></a>

HyperPod Slurm クラスターに複数のコントローラーノードを設定するには、 [リソースをプロビジョンする](#sagemaker-hyperpod-multihead-slurm-cfn-basic)と の 2 つの 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 ゲートウェイ
   + 2 つの Amazon EC2 セキュリティグループ
   + 設定ファイルを保存する Amazon FSx ボリューム

1. 次の CLI コマンドを実行して、 という名前の CloudFormation スタックを作成します`sagemaker-hyperpod`。`PrimarySubnetAZ` および `BackupSubnetAZ` でクラスターのアベイラビリティーゾーン (AZ) ID を定義します。たとえば、*use1-az4* は、`us-east-1` リージョンのアベイラビリティーゾーンの AZ ID です。詳細については、「[アベイラビリティーゾーン ID](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)
   ```

   E メールアドレスとデータベースユーザー名の入力を求めるプロンプトが表示されたら、以下のとおり値を入力します。

   ```
   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) テンプレートファイルをマシンにダウンロードします。この 2 番目の YAML ファイルは、Slurm クラスターで複数のコントローラーノードをサポートするために作成する追加のリソースを定義する CloudFormation テンプレートです。
   + コンピューティングノードインスタンスグループの実行 IAM ロール
   + Amazon RDS for MariaDB インスタンス
   + Amazon SNS トピックとサブスクリプション
   + AWS Secrets Manager Amazon RDS for MariaDB の 認証情報

1. 次の CLI コマンドを実行して、 という名前の CloudFormation スタックを作成します`sagemaker-hyperpod-mh`。この 2 番目のスタックは、 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)
   ```