

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

# 使用生命周期脚本自定义 SageMaker HyperPod 集群
<a name="sagemaker-hyperpod-lifecycle-best-practices-slurm"></a>

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

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

## 高级概述
<a name="sagemaker-hyperpod-lifecycle-best-practices-slurm-slurm-highlevel-overview"></a>

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

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

1. 准备 Slurm 配置。选择以下方法之一：
   + **选项 A：API 驱动的配置（推荐）**— 使用`SlurmConfig`每个实例组中的 `CreateCluster` API 负载直接定义 Slurm 节点类型和分区。使用这种方法：
     + 不需要任何`provisioning_parameters.json`文件
     + Slurm 拓扑在 API 负载中与实例组定义一起定义
     + FSx 文件系统是通过以下方式配置的 per-instance-group `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 的配置表单](sagemaker-hyperpod-ref.md#sagemaker-hyperpod-ref-provisioning-forms-slurm). `provisioning_parameters.json`应包含要在集群上配置的 Slurm 节点配置信息。 HyperPod这应反映步骤 1 中 Slurm 节点的设计。

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

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

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

   如果您选择了选项 A（API 驱动的配置）：

   您的文件夹只需要生命周期脚本来执行自定义安装任务。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 驱动的配置时，不需要该`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
   ```

1. 将所有文件上传到 S3 存储桶。复制并保留 S3 存储桶路径。请注意，您应该创建以 `sagemaker-` 开头的 S3 存储桶路径，因为您需要选择附加的 [`AmazonSageMakerClusterInstanceRolePolicy`](security-iam-awsmanpol-AmazonSageMakerClusterInstanceRolePolicy.md) 的 [的 IAM 角色适用于 SageMaker HyperPod](sagemaker-hyperpod-prerequisites-iam.md#sagemaker-hyperpod-prerequisites-iam-role-for-hyperpod)，而这只允许以 `sagemaker-` 前缀开头的 S3 存储桶路径。以下命令是将所有文件上传到 S3 存储桶的示例命令。

   ```
   aws s3 cp --recursive {{./lifecycle_files}} {{s3://sagemaker-hyperpod-lifecycle/src}}
   ```

1. 准备集 HyperPod 群创建请求。
   + 选项 1：如果您使用 Amazon CLI，请按照中的说明以 JSON 格式 (`create_cluster.json`) 编写集群创建请求[创建新集群](sagemaker-hyperpod-operate-slurm-cli-command.md#sagemaker-hyperpod-operate-slurm-cli-command-create-cluster)。
   + 选项 2：如果您使用 SageMaker AI 控制台用户界面，请按照中的说明在 HyperPod 控制台 UI 中填写**创建集群**申请表[创建集 SageMaker HyperPod 群](sagemaker-hyperpod-operate-slurm-console-ui.md#sagemaker-hyperpod-operate-slurm-console-ui-create-cluster)。

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

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

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

**Topics**
+ [高级概述](#sagemaker-hyperpod-lifecycle-best-practices-slurm-slurm-highlevel-overview)
+ [由提供的基本生命周期脚本 HyperPod](sagemaker-hyperpod-lifecycle-best-practices-slurm-slurm-base-config.md)
+ [Slurm 配置 HyperPod 文件中管理哪些特定的配置](sagemaker-hyperpod-lifecycle-best-practices-slurm-what-hyperpod-overrides-in-slurm-conf.md)
+ [Slurm 日志轮换](sagemaker-hyperpod-slurm-log-rotation.md)
+ [将 FSx 适用于 Lustre 的亚马逊和适用 FSx 于 OpenZFS 的亚马逊安装到集群 HyperPod](sagemaker-hyperpod-lifecycle-best-practices-slurm-slurm-setup-with-fsx.md)
+ [在上创建 Slurm 集群之前验证 JSON 配置文件 HyperPod](sagemaker-hyperpod-lifecycle-best-practices-slurm-slurm-validate-json-files.md)
+ [在 HyperPod Slurm 集群上运行生产工作负载之前验证运行时间](sagemaker-hyperpod-lifecycle-best-practices-slurm-slurm-validate-runtime.md)
+ [在 HyperPod 群集节点上以交互方式开发生命周期脚本](sagemaker-hyperpod-lifecycle-best-practices-slurm-slurm-develop-lifecycle-scripts.md)