使用 Amazon CLI - Amazon SageMaker
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

使用 Amazon CLI

以下主题提供了如何以 JSON 格式编写 SageMaker HyperPod API 请求文件并使用 Amazon CLI 命令运行这些文件的指导。

创建新集群

  1. 准备生命周期配置脚本并将其上传到 S3 存储桶,例如s3://sagemaker-<your-s3-bucket>/<lifecycle-script-directory>/src/。以下步骤 2 假设在指定的 S3 存储桶on_create.sh中有一个名为的入口点脚本。

    重要

    请务必将 S3 路径设置为开头s3://sagemaker-IAM 角色适用于 SageMaker HyperPodAmazonSageMakerClusterInstanceRolePolicy连接托管,允许访问带有特定前缀sagemaker-的 S3 存储桶。

  2. 准备一个 JSON 格式的 CreateClusterAPI 请求文件。以下请求示例基于步骤 1.2 中定义的组所需的节点。provisioning_params.jsonSlurm 的最低要求是一个控制器和一个工作组。对于ExecutionRole,请提供您使用部分中的托管AmazonSageMakerClusterInstanceRolePolicy创建的 IAM 角色的 ARN。IAM 角色适用于 SageMaker HyperPod

    // create_cluster.json { // Required "ClusterName": "your-hyperpod-cluster", // Required "InstanceGroups": [ { "InstanceGroupName": "controller-group", "InstanceType": "ml.m5.xlarge", "InstanceCount": 1, "LifeCycleConfig": { "SourceS3Uri": "s3://sagemaker-<your-s3-bucket>/<lifecycle-script-directory>/src/", "OnCreate": "on_create.sh" }, "ExecutionRole": "arn:aws:iam::111122223333:role/iam-role-for-cluster", "ThreadsPerCore": 1 }, { "InstanceGroupName": "worker-group-1", "InstanceType": "ml.p4d.xlarge", "InstanceCount": 1, "LifeCycleConfig": { "SourceS3Uri": "s3://sagemaker-<your-s3-bucket>/<lifecycle-script-directory>/src/", "OnCreate": "on_create.sh" }, "ExecutionRole": "arn:aws:iam::111122223333:role/iam-role-for-cluster", "ThreadsPerCore": 1 } ], // Optional "Tags": [ { "Key": "string", "Value": "string" } ], // Optional "VpcConfig": { "SecurityGroupIds": [ "string" ], "Subnets": [ "string" ] } }

    根据您通过生命周期脚本设计集群结构的方式,您可以在InstanceGroups请求参数下添加和配置多个实例组。

    对于Tags请求参数,您可以添加用于将 SageMaker HyperPod 集群作为 Amazon 资源进行管理的自定义标签。您可以像在其他支持标记的 Amazon 服务中添加标签一样向集群添加标签。要了解有关为 Amazon 资源添加标签的更多信息,请参阅《标记 Amazon 资源用户指南》。

    VpcConfig请求参数中,指定要使用的 VPC 的信息。有关更多信息,请参阅 (可选) SageMaker HyperPod 使用您的亚马逊 VPC 进行设置

  3. 运行以下命令提交 CreateCluster API 请求。

    aws sagemaker create-cluster \ --cli-input-json file://complete/path/to/create_cluster.json

    这应该会返回新集群的 ARN。

描述集群

运行describe-cluster以检查集群的状态。您可以指定集群的名称或 ARN。

aws sagemaker describe-cluster --cluster-name your-hyperpod-cluster

集群的状态变为后InService,继续下一步。使用此 API,您还可以从运行其他 HyperPod API 操作中检索失败消息。

列出集群节点的详细信息

运行list-cluster-nodes以检查群集节点的密钥信息。

aws sagemaker list-cluster-nodes --cluster-name your-hyperpod-cluster

这将返回一个响应,InstanceId这是你需要用来登录(使用aws ssm)响应的内容。

描述群集节点的详细信息

运行describe-cluster-node以检索群集节点的详细信息。您可以从 list-cluster-nodes 输出中获取群集节点 ID。您可以指定集群的名称或 ARN。

aws sagemaker describe-cluster-node \ --cluster-name your-hyperpod-cluster \ --node-id i-111222333444555aa

列出集群

运行列list-clusters出您账户中的所有集群。

aws sagemaker list-clusters

您还可以添加其他标志来向下筛选集群列表。要详细了解此命令在低级别运行的内容以及用于过滤的其他标志,请参阅 ListClustersAPI 参考。

更新集群配置

运行update-cluster以更新集群的配置。

  1. 创建 JSON 格式的UpdateCluster请求文件。确保指定正确的集群名称和实例组名称以进行更新。您可以更改实例类型、实例数量、生命周期配置入口点脚本和脚本路径。

    1. 对于ClusterName,请指定要更新的集群的名称。

    2. 对于 InstanceGroupName

      1. 要更新现有实例组,请指定要更新的实例组的名称。

      2. 要添加新的实例组,请指定集群中不存在的新名称。

    3. 对于 InstanceType

      1. 要更新现有实例组,您必须与最初为该组指定的实例类型相匹配。

      2. 要添加新的实例组,请指定要用来配置该组的实例类型。

    4. 对于 InstanceCount

      1. 要更新现有实例组,请指定一个大于当前实例数的整数。目前,您只能增加实例的数量。

      2. 要添加新的实例组,请指定一个大于或等于 1 的整数。

    5. 对于LifeCycleConfig,您可以根据需要更改SourceS3UriOnCreat值来更新实例组。

    6. 对于 ExecutionRole

      1. 要更新现有实例组,请继续使用您在创建集群时附加的相同 IAM 角色。

      2. 要添加新的实例组,请指定要附加的 IAM 角色。

    7. 对于 TreadsPerCore

      1. 要更新现有实例组,请继续使用您在创建集群时指定的值。

      2. 要添加新的实例组,您可以从每个实例类型的允许选项中选择任意值。有关更多信息,请搜索实例类型并查看 Amazon EC2 用户指南中参考表中每种实例类型的 CPU 核心数和每 CPU 核心线程数列。

    以下代码段是您可以使用的 JSON 请求文件模板。有关此 API 的请求语法和参数的更多信息,请参阅 UpdateClusterAPI 参考。

    // update_cluster.json { // Required "ClusterName": "name-of-cluster-to-update", // Required "InstanceGroups": [ { "InstanceGroupName": "name-of-instance-group-to-update", "InstanceType": "ml.m5.xlarge", "InstanceCount": 1, "LifeCycleConfig": { "SourceS3Uri": "s3://sagemaker-<your-s3-bucket>/<lifecycle-script-directory>/src/", "OnCreate": "on_create.sh" }, "ExecutionRole": "arn:aws:iam::111122223333:role/iam-role-for-cluster", "ThreadsPerCore": 1 }, // add more blocks of instance groups as needed { ... } ] }
  2. 运行以下update-cluster命令提交请求。

    aws sagemaker update-cluster \ --cli-input-json file://complete/path/to/update_cluster.json

更新集群的 SageMaker HyperPod 平台软件

运行update-cluster-software以使用 SageMaker HyperPod 服务提供的软件和安全补丁更新现有集群。对于--cluster-name,请指定要更新的集群的名称或 ARN。

重要

请注意,在运行此 API 之前,您必须备份您的工作。修补过程将根卷替换为更新后的 AMI,这意味着您之前存储在实例根卷中的数据将丢失。请务必将实例根卷中的数据备份到 Amazon S3 或 Amazon FSx for Lustre。有关更多信息,请参阅 使用提供的备份脚本 SageMaker HyperPod

aws sagemaker update-cluster-software --cluster-name your-hyperpod-cluster

此命令调用 UpdateClusterSoftwareAPI。API 调用后,将集群实例 SageMaker HyperPod 更新为使用最新版本,SageMaker HyperPod DLAMI并在集群创建或更新期间指定的 S3 存储桶中运行您的生命周期脚本。 SageMaker HyperPod 服务团队定期推出新SageMaker HyperPod DLAMI产品,以增强安全性和改善用户体验。我们建议您随时更新到最新的 SageMaker HyperPod DLAMI。如需了解 SageMaker HyperPod Future DLAMI 的安全补丁更新,请跟进。Amazon SageMaker HyperPod 发行说明

提示

如果安全补丁失败,您可以按照中的说明运行 DescribeClusterAPI 来检索失败消息描述集群

注意

您只能以编程方式运行此 API。 SageMaker HyperPod 控制台 UI 中未实现修补功能。

使用提供的备份脚本 SageMaker HyperPod

SageMaker HyperPod 提供了一个脚本,用于在 Awsome Distributed T 1.architectures/5.sagemaker-hyperpod/patching-backup.shraining GitHub 存储库中备份和恢复数据。该脚本提供以下两个函数。

在修补之前将数据备份到 S3 存储桶

sudo bash patching-backup.sh --create <s3-buckup-bucket-path>

运行命令后,脚本会检查是否有排队的作业,squeue如果队列中没有作业,则停止 Slurm,进行备份mariadb,并将本地项目复制到下定义的光盘上。LOCAL_ITEMS您可以向中添加更多文件和目录LOCAL_ITEMS

# Define files and directories to back up. LOCAL_ITEMS=( "/var/spool/slurmd" "/var/spool/slurmctld" "/etc/systemd/system/slurmctld.service" "/home/ubuntu/backup_slurm_acct_db.sql" # ... Add more items as needed )

此外,您还可以在提供的脚本中添加自定义代码,为您的用例备份任何应用程序。

在修补后从 S3 存储桶恢复数据

sudo bash patching-backup.sh --restore <s3-buckup-bucket-path>

删除集群

运行delete-cluster以删除集群。您可以指定集群的名称或 ARN。

aws sagemaker delete-cluster --cluster-name your-hyperpod-cluster