

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

# 开始 SageMaker HyperPod 使用 AWS CLI
<a name="smcluster-getting-started-slurm-cli"></a>

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

## 使用 Slurm 创建你的第一个 SageMaker HyperPod 集群
<a name="smcluster-getting-started-slurm-cli-create-cluster"></a>

以下教程演示了如何创建新 SageMaker HyperPod 集群并通过的[AWS CLI 命令](sagemaker-hyperpod-ref.md#sagemaker-hyperpod-ref-cli)使用 Slurm 对其进行设置。 SageMaker HyperPod按照教程，您将创建一个包含三个 Slurm 节点的 HyperPod 集群：`my-controller-group``my-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 角色](sagemaker-hyperpod-prerequisites-iam.md#sagemaker-hyperpod-prerequisites-iam-role-for-hyperpod)`AmazonSageMakerClusterInstanceRolePolicy`仅允许访问以特定前缀开头的 Amazon S3 存储桶。 SageMaker HyperPod

   如果您是从头开始，请使用 [Awsome 分布式训练 GitHub 存储库](https://github.com/aws-samples/awsome-distributed-training/)中提供的示例生命周期脚本。以下子步骤说明如何下载示例生命周期脚本并将其上传到 Amazon S3 存储桶。

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

      ```
      git clone https://github.com/aws-samples/awsome-distributed-training/
      ```

   1. 进入目录 [https://github.com/aws-samples/awsome-distributed-training/tree/main/1.architectures/5.sagemaker-hyperpod/LifecycleScripts/base-config](https://github.com/aws-samples/awsome-distributed-training/tree/main/1.architectures/5.sagemaker-hyperpod/LifecycleScripts/base-config)，可以找到一组生命周期脚本。

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

      要了解生命周期脚本示例的更多信息，请参阅 [使用生命周期脚本自定义 SageMaker HyperPod 集群](sagemaker-hyperpod-lifecycle-best-practices-slurm.md)。

   1. 将脚本上传到 `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.json`Slurm 配置将在下一步的 CreateCluster API 请求中直接定义。

1. 准备一个 JSON 格式的[CreateCluster](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateCluster.html)请求文件并另存为`create_cluster.json`。

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

   对于 `ExecutionRole`，请提供在 [使用的先决条件 SageMaker HyperPod](sagemaker-hyperpod-prerequisites.md) 中使用托管的 `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 字段**：    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/smcluster-getting-started-slurm-cli.html)

   **Orchestrator.Slurm 字段：**    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/smcluster-getting-started-slurm-cli.html)

   **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"]
       }
   }
   ```

1. 运行以下命令创建集群。

   ```
   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 配额](sagemaker-hyperpod-prerequisites.md#sagemaker-hyperpod-prerequisites-quotas)中的说明操作来请求额外配额。

   **常见的验证错误：**    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/smcluster-getting-started-slurm-cli.html)

1. 运行 `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 分钟。

1. 运行 `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 集群上的作业](sagemaker-hyperpod-run-jobs-slurm.md)。

1. 使用 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
   ```

## 删除集群并清理资源
<a name="smcluster-getting-started-slurm-cli-delete-cluster-and-clean"></a>

成功测试创建 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）中。为防止产生费用，请删除存储或文件系统中的所有构件和数据。

## 相关主题
<a name="smcluster-getting-started-slurm-cli-related-topics"></a>
+ [SageMaker HyperPod Slurm 配置](sagemaker-hyperpod-ref.md#sagemaker-hyperpod-ref-slurm-configuration)
+ [使用生命周期脚本自定义 SageMaker HyperPod 集群](sagemaker-hyperpod-lifecycle-best-practices-slurm.md)
+ [FSx 配置通过 InstanceStorageConfigs](sagemaker-hyperpod-ref.md#sagemaker-hyperpod-ref-slurm-fsx-config)
+ [SageMaker HyperPod Slurm 集群操作](sagemaker-hyperpod-operate-slurm.md)