

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

# SageMaker HyperPod Slurm 集群操作
<a name="sagemaker-hyperpod-operate-slurm"></a>

本节提供有关 SageMaker HyperPod 通过 SageMaker AI 控制台 UI 或 AWS Command Line Interface (CLI) 进行管理的指导。无论你更喜欢可视化界面还是使用命令 SageMaker HyperPod，你都将学习如何执行与之相关的各种任务。

**Topics**
+ [使用控制 SageMaker HyperPod 台管理 Slurm 集群 SageMaker](sagemaker-hyperpod-operate-slurm-console-ui.md)
+ [使用管理 SageMaker HyperPod Slurm 集群 AWS CLI](sagemaker-hyperpod-operate-slurm-cli-command.md)

# 使用控制 SageMaker HyperPod 台管理 Slurm 集群 SageMaker
<a name="sagemaker-hyperpod-operate-slurm-console-ui"></a>

以下主题提供了有关如何 SageMaker HyperPod 通过控制台 UI 进行管理的指导。

**Topics**
+ [创建集 SageMaker HyperPod 群](#sagemaker-hyperpod-operate-slurm-console-ui-create-cluster)
+ [浏览您的 SageMaker HyperPod 集群](#sagemaker-hyperpod-operate-slurm-console-ui-browse-clusters)
+ [查看每个 SageMaker HyperPod 集群的详细信息](#sagemaker-hyperpod-operate-slurm-console-ui-view-details-of-clusters)
+ [编辑集 SageMaker HyperPod 群](#sagemaker-hyperpod-operate-slurm-console-ui-edit-clusters)
+ [删除集 SageMaker HyperPod 群](#sagemaker-hyperpod-operate-slurm-console-ui-delete-cluster)

## 创建集 SageMaker HyperPod 群
<a name="sagemaker-hyperpod-operate-slurm-console-ui-create-cluster"></a>

[开始 SageMaker HyperPod 使用 SageMaker AI 控制台](smcluster-getting-started-slurm-console.md)要通过 SageMaker HyperPod 控制台 UI 创建新 SageMaker HyperPod 集群，请参阅中的说明。

## 浏览您的 SageMaker HyperPod 集群
<a name="sagemaker-hyperpod-operate-slurm-console-ui-browse-clusters"></a>

在控制台主页面 SageMaker HyperPod 控制台主窗格的集**群**下，所有已创建的集群都应显示在 “**集群**” 部分下，该部分提供了集群及其 ARNs状态和创建时间的摘要视图。 SageMaker HyperPod 

## 查看每个 SageMaker HyperPod 集群的详细信息
<a name="sagemaker-hyperpod-operate-slurm-console-ui-view-details-of-clusters"></a>

在管理控制台主页的**集群**下，集群**名称**已作为链接激活。选择集群名称链接，查看每个集群的详细信息。

## 编辑集 SageMaker HyperPod 群
<a name="sagemaker-hyperpod-operate-slurm-console-ui-edit-clusters"></a>

1. 在 SageMaker HyperPod控制台主窗格的集**群**下，选择要更新的集群。

1. 选择您的集群，并选择**编辑**。

1. 在**编辑 <your-cluster>** 页面上，可以编辑现有实例组的配置，添加更多实例组，并更改集群的标签。更改后，选择**提交**。

   1. 在**配置实例组**部分，可以通过选择**创建实例组**来添加更多实例组。

   1. 在**配置实例组**部分，可以选择**编辑**以更改其配置，或选择**删除**以永久性移除实例组。
**重要**  
在删除实例组时，请注意以下几点：  
您的 SageMaker HyperPod 集群必须始终维护至少一个实例组。
确保在删除前备份所有关键数据
删除过程无法撤销。
**注意**  
删除实例组将终止与该组关联的所有计算资源。

   1. 在**标签**部分，您可以更新集群的标记。

## 删除集 SageMaker HyperPod 群
<a name="sagemaker-hyperpod-operate-slurm-console-ui-delete-cluster"></a>

1. 在 SageMaker HyperPod控制台主窗格的集**群**下，选择要删除的集群。

1. 选择您的集群，并选择**删除**。

1. 在弹出的集群删除窗口中，仔细查看集群信息，确认选择了正确的集群进行删除。

1. 查看集群信息后，选择**是，删除集群**。

1. 在确认删除的文本字段中键入 **delete**。

1. 在弹出窗口的右下角选择**删除**，完成集群删除请求的发送。

# 使用管理 SageMaker HyperPod Slurm 集群 AWS CLI
<a name="sagemaker-hyperpod-operate-slurm-cli-command"></a>

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

**Topics**
+ [创建新集群](#sagemaker-hyperpod-operate-slurm-cli-command-create-cluster)
+ [描述集群](#sagemaker-hyperpod-operate-slurm-cli-command-describe-cluster)
+ [列出集群节点的详细信息](#sagemaker-hyperpod-operate-slurm-cli-command-list-cluster-nodes)
+ [描述集群节点的详细信息](#sagemaker-hyperpod-operate-slurm-cli-command-describe-cluster-node)
+ [列出集群](#sagemaker-hyperpod-operate-slurm-cli-command-list-clusters)
+ [更新集群配置](#sagemaker-hyperpod-operate-slurm-cli-command-update-cluster)
+ [更新集群的 SageMaker HyperPod 平台软件](#sagemaker-hyperpod-operate-slurm-cli-command-update-cluster-software)
+ [缩减集群](#sagemaker-hyperpod-operate-slurm-cli-command-scale-down)
+ [删除集群](#sagemaker-hyperpod-operate-slurm-cli-command-delete-cluster)

## 创建新集群
<a name="sagemaker-hyperpod-operate-slurm-cli-command-create-cluster"></a>

1. 准备生命周期配置脚本并将其上传到 S3 存储桶，如 `s3://sagemaker-amzn-s3-demo-bucket/lifecycle-script-directory/src/`。下面的步骤 2 假设在指定的 S3 存储桶中有一个名为 `on_create.sh` 的入口点脚本。
**重要**  
确保设置的 S3 路径以 `s3://sagemaker-` 开头。[的 IAM 角色适用于 SageMaker HyperPod](sagemaker-hyperpod-prerequisites-iam.md#sagemaker-hyperpod-prerequisites-iam-role-for-hyperpod) 附带托管的 [https://docs.aws.amazon.com/sagemaker/latest/dg/security-iam-awsmanpol-cluster.html](https://docs.aws.amazon.com/sagemaker/latest/dg/security-iam-awsmanpol-cluster.html)，允许访问带有特定前缀 `sagemaker-` 的 S3 存储桶。

1. 准备一个 JSON 格式的 [CreateCluster](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateCluster.html)API 请求文件。您应配置实例组，使其与您在 `provisioning_parameters.json` 文件中设计的 Slurm 集群相匹配，该文件将在创建集群时使用，是运行一组生命周期脚本的一部分。要了解更多信息，请参阅[使用生命周期脚本自定义 SageMaker HyperPod 集群](sagemaker-hyperpod-lifecycle-best-practices-slurm.md)。下面的模板有两个实例组，以满足 Slurm 集群的最低要求：一个控制器（主）节点和一个计算（Worker）节点。对于 `ExecutionRole`，请提供使用托管的 `AmazonSageMakerClusterInstanceRolePolicy` 从 [的 IAM 角色适用于 SageMaker HyperPod](sagemaker-hyperpod-prerequisites-iam.md#sagemaker-hyperpod-prerequisites-iam-role-for-hyperpod) 部分创建的 IAM 角色的 ARN。

   ```
   // create_cluster.json
   {
       "ClusterName": "your-hyperpod-cluster",
       "InstanceGroups": [
           {
               "InstanceGroupName": "controller-group",
               "InstanceType": "ml.m5.xlarge",
               "InstanceCount": 1,
               "LifeCycleConfig": {
                   "SourceS3Uri": "s3://amzn-s3-demo-bucket-sagemaker/lifecycle-script-directory/src/",
                   "OnCreate": "on_create.sh"
               },
               "ExecutionRole": "arn:aws:iam::111122223333:role/iam-role-for-cluster",
               // Optional: Configure an additional storage per instance group.
               "InstanceStorageConfigs": [
                   {
                      // Attach an additional EBS volume to each instance within the instance group.
                      // The default mount path for the additional EBS volume is /opt/sagemaker.
                      "EbsVolumeConfig":{
                         // Specify an integer between 1 and 16384 in gigabytes (GB).
                         "VolumeSizeInGB": integer,
                      }
                   }
               ]
           }, 
           {
               "InstanceGroupName": "worker-group-1",
               "InstanceType": "ml.p4d.xlarge",
               "InstanceCount": 1,
               "LifeCycleConfig": {
                   "SourceS3Uri": "s3://amzn-s3-demo-bucket-sagemaker/lifecycle-script-directory/src/",
                   "OnCreate": "on_create.sh"
               },
               "ExecutionRole": "arn:aws:iam::111122223333:role/iam-role-for-cluster"
           }
       ],
       // Optional
       "Tags": [ 
           { 
              "Key": "string",
              "Value": "string"
           }
       ],
       // Optional
       "VpcConfig": { 
           "SecurityGroupIds": [ "string" ],
           "Subnets": [ "string" ]
       }
   }
   ```

   根据生命周期脚本设计集群结构的方式，在 `InstanceGroups` 参数下最多可配置 20 个实例组。

   对于`Tags`请求参数，您可以添加用于将 SageMaker HyperPod 集群作为 AWS 资源进行管理的自定义标签。您可以像在其他支持标记的 AWS 服务中添加标签一样向集群添加标签。要了解有关为 AWS 资源添加标签的更多信息，请参阅《[标记 AWS 资源用户](https://docs.aws.amazon.com/tag-editor/latest/userguide/tagging.html)指南》。

   对于 `VpcConfig` 请求参数，请指定要使用的 VPC 信息。有关更多信息，请参阅 [SageMaker HyperPod 使用自定义 Amazon VPC 进行设置](sagemaker-hyperpod-prerequisites.md#sagemaker-hyperpod-prerequisites-optional-vpc)。

1. 运行 [create-cluster](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/create-cluster.html) 命令如下。

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

   这将返回新集群的 ARN。

## 描述集群
<a name="sagemaker-hyperpod-operate-slurm-cli-command-describe-cluster"></a>

运行 [describe-cluster](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/describe-cluster.html) 查看集群状态。您可以指定集群的名称或 ARN。

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

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

## 列出集群节点的详细信息
<a name="sagemaker-hyperpod-operate-slurm-cli-command-list-cluster-nodes"></a>

运行[list-cluster-nodes](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/list-cluster-nodes.html)以检查群集节点的密钥信息。

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

这将返回一个响应，`InstanceId` 是您需要用来登录（使用 `aws ssm`）的内容。

## 描述集群节点的详细信息
<a name="sagemaker-hyperpod-operate-slurm-cli-command-describe-cluster-node"></a>

运行[describe-cluster-node](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/describe-cluster-node.html)以检索群集节点的详细信息。您可以从 list-cluster-nodes输出中获取群集节点 ID。您可以指定集群的名称或 ARN。

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

## 列出集群
<a name="sagemaker-hyperpod-operate-slurm-cli-command-list-clusters"></a>

运行 [list-clusters](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/list-clusters.html) 列出账户中的所有集群。

```
aws sagemaker list-clusters
```

您还可以添加其他标签来筛选集群列表。要详细了解此命令在低级别运行的内容以及用于过滤的其他标志，请参阅 [ListClusters](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ListClusters.html)API 参考。

## 更新集群配置
<a name="sagemaker-hyperpod-operate-slurm-cli-command-update-cluster"></a>

运行 [update-cluster](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/update-cluster.html) 更新集群配置。

**注意**  
您可以使用 `UpdateCluster` API 缩小集群规模或从 SageMaker HyperPod 集群中移除整个实例组。有关如何缩减或删除实例组的更多说明，请参阅[缩减集群](#sagemaker-hyperpod-operate-slurm-cli-command-scale-down)。

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

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

   1. 对于 `InstanceGroupName`

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

      1. 要添加新的实例组，请指定一个集群中不存在的新名称。

   1. 对于 `InstanceType`

      1. 要更新现有实例组，必须将最初指定的实例类型与组匹配。

      1. 要添加新实例组，请指定要配置该组的实例类型。

   1. 对于 `InstanceCount`

      1. 要更新现有实例组，请指定与所需的实例数对应的整数。您可以提供更高或更低的值（最低可至 0）以纵向扩展或缩减实例组。

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

   1. 对于 `LifeCycleConfig`，您可以同时更改 `SourceS3Uri` 和 `OnCreate` 值，以更新实例组。

   1. 对于 `ExecutionRole`

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

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

   1. 对于 `ThreadsPerCore`

      1. 更新现有实例组时，请继续使用创建集群时指定的相同值。

      1. 添加新实例组时，您可以从每个实例类型允许的选项中选择任意值。如需了解更多信息，请搜索实例类型，并查看**《Amazon EC2 用户指南》**中 [CPU 内核和线程/CPU 内核/实例类型](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/cpu-options-supported-instances-values.html)参考表中的*每个内核的有效线程*列。

   下面的代码片段是您可以使用的 JSON 请求文件模板。有关此 API 的请求语法和参数的更多信息，请参阅 [UpdateCluster](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateCluster.html)API 参考。

   ```
   // 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://amzn-s3-demo-bucket-sagemaker/lifecycle-script-directory/src/",
                   "OnCreate": "on_create.sh"
               },
               "ExecutionRole": "arn:aws:iam::111122223333:role/iam-role-for-cluster",
               // Optional: Configure an additional storage per instance group.
               "InstanceStorageConfigs": [
                   {
                      // Attach an additional EBS volume to each instance within the instance group.
                      // The default mount path for the additional EBS volume is /opt/sagemaker.
                      "EbsVolumeConfig":{
                         // Specify an integer between 1 and 16384 in gigabytes (GB).
                         "VolumeSizeInGB": integer,
                      }
                   }
               ]
           },
           // add more blocks of instance groups as needed
           { ... }
       ]
   }
   ```

1. 运行以下 `update-cluster` 命令提交请求。

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

## 更新集群的 SageMaker HyperPod 平台软件
<a name="sagemaker-hyperpod-operate-slurm-cli-command-update-cluster-software"></a>

运行[update-cluster-software](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/update-cluster-software.html)以使用 SageMaker HyperPod 服务提供的软件和安全补丁更新现有集群。对于 `--cluster-name`，请指定要更新的集群名称或 ARN。

**重要**  
请注意，在运行此 API 之前必须备份您的工作。打补丁过程会用更新的 AMI 替换根卷，这意味着存储在实例根卷中的先前数据将丢失。请务必将实例根卷中的数据备份到 Amazon S3 或 Amazon for Lustre。 FSx 有关更多信息，请参阅 [使用提供的备份脚本 SageMaker HyperPod](#sagemaker-hyperpod-operate-slurm-cli-command-update-cluster-software-backup)。

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

此命令调用 [UpdateClusterSoftware](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateClusterSoftware.html)API。API 调用后， SageMaker HyperPod 检查集群实例是否有更新的 DLAMI 可用。如果需要更新 DLAMI SageMaker HyperPod ，则会将集群实例更新为使用[SageMaker HyperPod DLAMI](sagemaker-hyperpod-ref.md#sagemaker-hyperpod-ref-hyperpod-ami)最新版本，并在集群创建或更新期间指定的 Amazon S3 存储桶中运行生命周期脚本。如果集群已经在使用最新的 DLAMI SageMaker HyperPod ，则不会对集群进行任何更改或再次运行生命周期脚本。 SageMaker HyperPod 服务团队定期推出新[SageMaker HyperPod DLAMI](sagemaker-hyperpod-ref.md#sagemaker-hyperpod-ref-hyperpod-ami)产品，以增强安全性和改善用户体验。我们建议您随时更新到最新的 SageMaker HyperPod DLAMI。如需了解 SageMaker HyperPod Future DLAMI 的安全补丁更新，请跟进。[亚马逊 SageMaker HyperPod 发行说明](sagemaker-hyperpod-release-notes.md)

**提示**  
如果安全补丁失败，您可以按照 [描述集群](#sagemaker-hyperpod-operate-slurm-cli-command-describe-cluster) 中的指示运行 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeCluster.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeCluster.html) API，获取失败信息。API。

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

### 使用提供的备份脚本 SageMaker HyperPod
<a name="sagemaker-hyperpod-operate-slurm-cli-command-update-cluster-software-backup"></a>

SageMaker HyperPod 提供了一个脚本，用于在 *Awsome Distributed T [https://github.com/aws-samples/awsome-distributed-training/blob/main/1.architectures/5.sagemaker-hyperpod/patching-backup.sh](https://github.com/aws-samples/awsome-distributed-training/blob/main/1.architectures/5.sagemaker-hyperpod/patching-backup.sh)raining 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>
```

## 缩减集群
<a name="sagemaker-hyperpod-operate-slurm-cli-command-scale-down"></a>

您可以缩减 SageMaker HyperPod 集群中的实例数量或删除实例组，以优化资源分配或降低成本。

您可以使用 `UpdateCluster` API 操作随机终止实例组中的实例，直至实例数量减少到指定数量，或者使用 `BatchDeleteClusterNodes` API 操作终止特定的实例，从而进行缩减。您也可以使用 `UpdateCluster` API 完全移除整个实例组。有关如何使用这些方法进行缩减的更多信息，请参阅[缩小 SageMaker HyperPod 集群规模](smcluster-scale-down.md)。

**注意**  
您无法移除配置为 Slurm 控制器节点的实例。尝试删除 Slurm 控制器节点会导致验证错误，错误代码为 `NODE_ID_IN_USE`。

## 删除集群
<a name="sagemaker-hyperpod-operate-slurm-cli-command-delete-cluster"></a>

运行 [delete-cluster](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/delete-cluster.html) 删除集群。您可以指定集群的名称或 ARN。

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