View a markdown version of this page

使用生命周期脚本自定义 SageMaker HyperPod 集群 - 亚马逊 SageMaker AI

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

使用生命周期脚本自定义 SageMaker HyperPod 集群

SageMaker HyperPod 提供始终处于启动和运行状态的计算集群,这些集群是高度可定制的,因为您可以编写生命周期脚本来告诉您 SageMaker HyperPod 如何设置集群资源。以下主题是准备生命周期脚本以使用开源工作负载管理器工具设置 SageMaker HyperPod 集群的最佳实践。

以下主题深入探讨了准备用于设置 Slurm 配置的生命周期脚本的最佳实践。 SageMaker HyperPod

High-level 概览

以下过程是配置 HyperPod 集群并使用 Slurm 对其进行设置的主要流程。这些步骤按照自下而上的顺序进行。

  1. 规划如何在集群上创建 Slurm 节点。 HyperPod 例如,如果您要配置两个 Slurm 节点,则需要在集群中设置两个实例组。 HyperPod

  2. 准备 Slurm 配置。选择以下方法之一:

    • 选项 A: API-driven 配置(推荐)— 在每个实例组中使用SlurmConfig直接在 CreateCluster API 负载中定义 Slurm 节点类型和分区。使用这种方法:

      • 不需要任何provisioning_parameters.json文件

      • Slurm 拓扑在 API 负载中与实例组定义一起定义

      • FSx 文件系统是通过以下方式按实例组配置的 InstanceStorageConfigs

      • 配置策略通过以下方式控制 Orchestrator.Slurm.SlurmConfigStrategy

      实例组SlurmConfig中的示例:

      { "InstanceGroupName": "gpu-compute", "InstanceType": "ml.p4d.24xlarge", "InstanceCount": 8, "SlurmConfig": { "NodeType": "Compute", "PartitionNames": ["gpu-training"] } }
    • 选项 B:旧版配置-准备一个provisioning_parameters.json文件,即 a用于配置_parameters.json 的配置表单. provisioning_parameters.json应包含要在集群上配置的 Slurm 节点配置信息。 HyperPod这应反映步骤 1 中 Slurm 节点的设计。

  3. 准备一组生命周期脚本来设置 Slurm HyperPod 以安装软件包并在集群中为您的用例设置环境。您应构建生命周期脚本,以便在一个中心 Python 脚本 (lifecycle_script.py) 中按顺序集体运行,并编写一个入口点 shell 脚本 (on_create.sh) 来运行 Python 脚本。稍后在步骤 5 中,您需要向 HyperPod集群创建请求提供入口点 shell 脚本。

    另外,请注意,您应该编写预期的脚本resource_config.json,这些脚本将在集群创建 HyperPod 期间生成。 resource_config.json包含 HyperPod 群集资源信息,例如 IP 地址、实例类型和 ARN,是配置 Slurm 时需要使用的信息。

  4. 将前面步骤中的所有文件收集到一个文件夹中。文件夹结构取决于您在步骤 2 中选择的配置方法。

    如果您选择了选项 A(API-driven 配置):

    您的文件夹只需要生命周期脚本来执行自定义安装任务。Slurm 配置和 FSx 挂载由 HyperPod根据 API 有效负载自动处理。

    └── lifecycle_files // your local folder ├── on_create.sh ├── lifecycle_script.py └── ... // more setup scripts to be fed into lifecycle_script.py
    注意

    使用 API-driven 配置时不需要该provisioning_parameters.json文件。

    如果您选择了选项 B(旧配置):

    您的文件夹必须包含provisioning_parameters.json全套生命周期脚本。

    └── lifecycle_files // your local folder ├── provisioning_parameters.json ├── on_create.sh ├── lifecycle_script.py └── ... // more setup scrips to be fed into lifecycle_script.py
  5. 将所有文件上传到 S3 存储桶。复制并保留 S3 存储桶路径。请注意,您应该创建以 sagemaker- 开头的 S3 存储桶路径,因为您需要选择附加的 AmazonSageMakerClusterInstanceRolePolicy的 IAM 角色适用于 SageMaker HyperPod,而这只允许以 sagemaker- 前缀开头的 S3 存储桶路径。以下命令是将所有文件上传到 S3 存储桶的示例命令。

    aws s3 cp --recursive ./lifecycle_files s3://sagemaker-hyperpod-lifecycle/src
  6. 准备集 HyperPod 群创建请求。

    • 选项 1:如果您使用 AWS CLI,请按照中的说明以 JSON 格式 (create_cluster.json) 编写集群创建请求创建新集群

    • 选项 2:如果您使用 SageMaker AI 控制台用户界面,请按照中的说明在 HyperPod 控制台 UI 中填写创建集群申请表创建集 SageMaker HyperPod 群

    在此阶段,请确保按照步骤 1 和 2 中的计划结构创建实例组。此外,请确保在请求表单中指定步骤 5 中的 S3 存储桶。

  7. 提交集群创建请求。 HyperPod 根据请求配置集群,然后在集 HyperPod 群实例中创建resource_config.json文件,并在运行生命周期脚本的集群上设置 Slurm。

以下主题将引导您完成并深入探讨如何组织配置文件和生命周期脚本以在创建 HyperPod集群期间正常运行的详细信息。