

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

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

使用 HyperPod 的 AWS CLI 命令建立您的第一個 SageMaker HyperPod 叢集。

## 使用 Slurm 建立您的第一個 SageMaker HyperPod 叢集
<a name="smcluster-getting-started-slurm-cli-create-cluster"></a>

下列教學課程示範如何建立新的 SageMaker HyperPod 叢集，並透過 [SageMaker HyperPod 的AWS CLI 命令](sagemaker-hyperpod-ref.md#sagemaker-hyperpod-ref-cli)使用 Slurm 進行設定。遵循教學課程，您將建立具有三個 Slurm 節點的 HyperPod 叢集：`my-controller-group`、 `my-login-group`和 `worker-group-1`。

透過 API 驅動的組態方法，您可以使用 直接在 CreateCluster API 請求中定義 Slurm 節點類型和分割區指派`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-`，因為 [ SageMaker HyperPod 的 IAM 角色](sagemaker-hyperpod-prerequisites-iam.md#sagemaker-hyperpod-prerequisites-iam-role-for-hyperpod)`AmazonSageMakerClusterInstanceRolePolicy`只允許存取以特定字首開頭的 Amazon S3 儲存貯體。

   如果您是從頭開始，請使用 [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 主控台或執行下列 Amazon S3 AWS CLI 命令來執行此操作。

      ```
      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 驅動的組態，您可以使用 `SlurmConfig` 欄位指定每個執行個體群組的 Slurm 節點類型和分割區指派。您也可以使用 設定叢集層級 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_tw/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_tw/sagemaker/latest/dg/smcluster-getting-started-slurm-cli.html)

   **SlurmConfigStrategy 選項：**
   + `Managed` （建議）：HyperPod 可完全管理和`slurm.conf`偵測未經授權的變更 （偏離偵測）。如果偵測到偏離，更新會失敗。
   + `Overwrite`：HyperPod 會在更新`slurm.conf`時覆寫，忽略任何手動變更。
   + `Merge`：HyperPod 會保留手動變更，並將其與 API 組態合併。

   **新增 FSx for Lustre （選用）：**

   若要將 FSx for 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 for OpenZFS （選用）：**

   您也可以掛載 FSx for OpenZFS 檔案系統：

   ```
   "InstanceStorageConfigs": [
       {
           "FsxOpenZfsConfig": {
               "DnsName": "fs-0xyz789abc123456.fsx.us-west-2.amazonaws.com",
               "MountPath": "/shared"
           }
       }
   ]
   ```
**注意**  
每個執行個體群組最多可以有一個 FSx for Lustre 和一個 FSx for OpenZFS 組態。不同的執行個體群組可以掛載不同的檔案系統。

   **新增 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_tw/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 Session 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 容量建立的叢集，若未使用將其刪除，以避免根據隨需定價持續產生服務費用。在本教學課程中，您已建立由三個執行個體群組組成的叢集。請務必執行下列命令來刪除叢集。

```
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 FSx for Lustre 和 Amazon 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)
+ [透過 InstanceStorageConfigs 的 FSx 組態](sagemaker-hyperpod-ref.md#sagemaker-hyperpod-ref-slurm-fsx-config)
+ [SageMaker HyperPod Slurm 叢集操作](sagemaker-hyperpod-operate-slurm.md)