View a markdown version of this page

使用 CloudFormation 堆栈配置资源 - 亚马逊 SageMaker AI

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 CloudFormation 堆栈配置资源

要在 HyperPod Slurm 集群中设置多个控制器节点,请通过两个 CloudFormation 堆栈配置 AWS 资源:和。预调配基本资源 预调配其他资源以支持多个控制器节点

预调配基本资源

按照以下步骤为您的 Amazon SageMaker HyperPod Slurm 集群配置基本资源。

  1. sagemaker-hyperpod.yaml 模板文件下载到您的计算机上。此 YAML 文件是一个 CloudFormation 模板,用于定义要为 Slurm 集群创建的以下资源。

    • 计算节点实例组的执行 IAM 角色

    • 用于存储生命周期脚本的 Amazon S3 存储桶

    • 公有子网和私有子网(私有子网可通过 NAT 网关访问互联网)

    • 互联网 Gateway/NAT 网关

    • 两个 Amazon EC2 安全组

    • 用于存储配置文件的 Amazon FSx 卷

  2. 运行以下 CLI 命令创建名为的 CloudFormation 堆栈sagemaker-hyperpod。在和中 IDs 为您的集群定义可用区 (AZ) BackupSubnetAZPrimarySubnetAZ例如,use1-az4是该us-east-1区域中可用区的可用区 ID。有关更多信息,请参阅可用区 IDs跨多个 SageMaker HyperPod 集群设置 AZs

    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 参考进行部署。堆栈创建可能需要几分钟才能完成。堆栈创建完成后,您将在命令行界面中看到以下内容。

    Waiting for changeset to be created.. Waiting for stack create/update to complete Successfully created/updated stack - sagemaker-hyperpod
  3. (可选)在 CloudFormation 控制台中验证堆栈。

    • 从左侧导航栏中,选择堆栈

    • 堆栈页面上,找到并选择 sagemaker-hyperpod

    • 选择资源输出等标签页以查看资源和输出。

  4. 从堆栈(sagemaker-hyperpod)输出中创建环境变量。您将使用这些变量的值来预调配其他资源以支持多个控制器节点

    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 模板文件下载到您的计算机上。第二个 YAML 文件是一个 CloudFormation 模板,用于定义要为 Slurm 集群中的多个控制器节点支持创建的额外资源。

    • 控制器节点实例组的执行 IAM 角色

    • Amazon RDS for MariaDB 实例

    • Amazon SNS 主题和订阅

    • AWS Secrets Manager 适用于 MariaDB 的 Amazon RDS 的凭证

  2. 运行以下 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 参考进行部署。堆栈创建可能需要几分钟才能完成。堆栈创建完成后,您将在命令行界面中看到以下内容。

    Waiting for changeset to be created.. Waiting for stack create/update to complete Successfully created/updated stack - sagemaker-hyperpod-mh
  3. (可选)在 AWS Cloud Formation 控制台中验证堆栈。

    • 从左侧导航栏中,选择堆栈

    • 堆栈页面上,找到并选择sagemaker-hyperpod-mh

    • 选择资源输出等标签页以查看资源和输出。

  4. 从堆栈(sagemaker-hyperpod-mh)输出中创建环境变量。您将使用这些变量的值来更新准备并上传生命周期脚本中的配置文件(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)