开始 SageMaker HyperPod 使用 AWS CLI - 亚马逊 SageMaker AI

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

开始 SageMaker HyperPod 使用 AWS CLI

使用中的 AWS CLI 命令创建您的第一个 SageMaker HyperPod 集群 HyperPod。

使用 Slurm 创建你的第一个 SageMaker HyperPod 集群

以下教程演示了如何创建新 SageMaker HyperPod 集群并通过的AWS CLI 命令使用 Slurm 对其进行设置。 SageMaker HyperPod按照教程,您将创建一个包含三个 Slurm 节点的 HyperPod 集群:my-controller-groupmy-login-group、和。worker-group-1

使用 API 驱动的配置方法,您可以使用直接在 API 请求中定义 Slurm 节点类型和分区分配。 CreateCluster 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-,因为 with 的 IAM 角色AmazonSageMakerClusterInstanceRolePolicy仅允许访问以特定前缀开头的 Amazon S3 存储桶。 SageMaker HyperPod

    如果您是从头开始,请使用 Awsome 分布式训练 GitHub 存储库中提供的示例生命周期脚本。以下子步骤说明如何下载示例生命周期脚本并将其上传到 Amazon S3 存储桶。

    1. 下载生命周期脚本示例到本地计算机的一个目录中。

      git clone https://github.com/aws-samples/awsome-distributed-training/
    2. 进入目录 1.architectures/5.sagemaker_hyperpods/LifecycleScripts/base-config,可以找到一组生命周期脚本。

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

      要了解生命周期脚本示例的更多信息,请参阅 使用生命周期脚本自定义 SageMaker HyperPod 集群

    3. 将脚本上传到 s3://sagemaker-<unique-s3-bucket-name>/<lifecycle-script-directory>/src。您可以使用 Amazon S3 管理控制台或运行以下 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.jsonSlurm 配置将在下一步的 CreateCluster API 请求中直接定义。

  2. 准备一个 JSON 格式的CreateCluster请求文件并另存为create_cluster.json

    使用 API 驱动的配置,您可以使用字段为每个实例组指定 Slurm 节点类型和分区分配。SlurmConfig您还可以使用配置集群级别的 Slurm 设置。Orchestrator.Slurm

    对于 ExecutionRole,请提供在 使用的先决条件 SageMaker HyperPod 中使用托管的 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 字段

    字段 说明
    NodeType 实例组的 Slurm 角色。有效值:ControllerLoginCompute
    PartitionNames 要为其分配计算节点的 Slurm 分区。仅对Compute节点类型有效。

    Orchestrator.Slurm 字段:

    字段 说明
    SlurmConfigStrategy 控制 HyperPod 管理方式slurm.conf。有效值:Managed(默认)、OverwriteMerge

    SlurmConfigStrategy 选项:

    • Managed(推荐): HyperPod 完全slurm.conf管理和检测未经授权的更改(偏差检测)。如果检测到偏差,更新将失败。

    • Overwrite: 更新slurm.conf时 HyperPod 覆盖,忽略任何手动更改。

    • Merge: HyperPod 保留手动更改并将其与 API 配置合并。

    FSx 为光泽添加(可选):

    要将 fo FSx r 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 为 OpenZFS 添加内容(可选):

    你也可以 FSx 为 OpenZFS 文件系统进行挂载:

    "InstanceStorageConfigs": [ { "FsxOpenZfsConfig": { "DnsName": "fs-0xyz789abc123456.fsx.us-west-2.amazonaws.com", "MountPath": "/shared" } } ]
    注意

    每个实例组最多可以有一个用 FSx 于 Lustre 的实例组和一个用于 OpenZFS 配置 FSx 的实例组。不同的实例组可以挂载不同的文件系统。

    添加 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"] } }
  3. 运行以下命令创建集群。

    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 配额中的说明操作来请求额外配额。

    常见的验证错误:

    错误 解决方案
    “集群必须只有一个控制 InstanceGroup 器节点类型” 确保只有一个实例组具有SlurmConfig.NodeType"Controller"
    “只能将分区分配给计算节点类型” PartitionNamesControllerLogin实例组中移除
    “只有自定义 VPC 支持FSx 配置” 使用时VpcConfig添加到您的请求中 FSx
  4. 运行 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-15 分钟。

  5. 运行 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 集群上的作业

  6. 使用 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

删除集群并清理资源

成功测试创建 SageMaker HyperPod 集群后,它会继续以该InService状态运行,直到您删除该集群。我们建议您在不使用按需 SageMaker AI 容量时删除任何使用按需 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 S3 存储桶或文件系统服务(例如 Amazon for Lustre 和 Amazon FSx Elastic File System)中。为防止产生费用,请删除存储或文件系统中的所有构件和数据。