

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

# 使用生命週期指令碼自訂 SageMaker HyperPod 叢集
<a name="sagemaker-hyperpod-lifecycle-best-practices-slurm"></a>

SageMaker HyperPod 提供始終啟動並執行中的運算叢集，這些叢集可高度自訂，因為您可以撰寫生命週期指令碼，告知 SageMaker HyperPod 如何設定叢集資源。下列主題是準備生命週期指令碼，以使用開放原始碼工作負載管理員工具，設定 SageMaker HyperPod 叢集的最佳實務。

下列主題深入討論在 SageMaker HyperPod 上準備生命週期指令碼以設定 Slurm 組態的最佳實務。

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

下列程序是佈建 HyperPod 叢集並使用 Slurm 設定該叢集的主要流程。這些步驟是依***由下而上***的方式進行。

1. 規劃您想要在 HyperPod 叢集上建立 Slurm 節點的方式。例如，如果您想要設定兩個 Slurm 節點，則需要在 HyperPod 叢集中設定兩個執行個體群組。

1. 準備 Slurm 組態。選擇下列其中一種方法：
   + **選項 A：API 驅動組態 （建議）** – 在每個執行個體群組中使用 直接在 `CreateCluster` API 承載`SlurmConfig`中定義 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`檔案，即 [provisioning\_parameters.json 的組態表單](sagemaker-hyperpod-ref.md#sagemaker-hyperpod-ref-provisioning-forms-slurm)。 `provisioning_parameters.json`應包含要在 HyperPod 叢集上佈建的 Slurm 節點組態資訊。這應該反映步驟 1 中 Slurm 節點的設計。

1. 準備一組生命週期指令碼以在 HyperPod 上設定 Slurm，來安裝軟體套件並在叢集中為您的使用案例設定環境。您應該建構生命週期指令碼，以在中央 Python 指令碼 (`lifecycle_script.py`) 中依順序集體執行，並撰寫進入點 Shell 指令碼 (`on_create.sh`) 來執行 Python 指令碼。進入點 Shell 指令碼是您稍後在步驟 5 需要提供給 HyperPod 叢集建立請求的內容。

   此外，請注意，您應該撰寫指令碼來預期在叢集建立期間將由 HyperPod 產生的 `resource_config.json`。`resource_config.json` 包含 HyperPod 叢集資源資訊，例如 IP 位址、執行個體類型和 ARN，以及用於設定 Slurm 所需的內容。

1. 將先前步驟中的所有檔案收集到資料夾。資料夾結構取決於您在步驟 2 中選取的組態方法。

   如果您選取選項 A (API 驅動的組態）：

   您的資料夾只需要自訂設定任務的生命週期指令碼。HyperPod 會根據 API 承載自動處理 Slurm 組態和 FSx 掛載。

   ```
   └── 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) 連接的 [SageMaker HyperPod 的 IAM 角色](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：如果您使用 AWS CLI，請依照 的指示，以 JSON 格式 (`create_cluster.json`) 撰寫叢集建立請求[建立新叢集](sagemaker-hyperpod-operate-slurm-cli-command.md#sagemaker-hyperpod-operate-slurm-cli-command-create-cluster)。
   + 選項 2：如果您使用 SageMaker AI 主控台 UI，請遵循[建立 SageMaker HyperPod 叢集](sagemaker-hyperpod-operate-slurm-console-ui.md#sagemaker-hyperpod-operate-slurm-console-ui-create-cluster)中的指示，在 HyperPod 主控台 UI 中填寫**建立叢集**請求表單。

   在此階段，請確定您以步驟 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)
+ [HyperPod 在 Slurm 組態檔案中管理哪些特定組態](sagemaker-hyperpod-lifecycle-best-practices-slurm-what-hyperpod-overrides-in-slurm-conf.md)
+ [Slurm 日誌輪換](sagemaker-hyperpod-slurm-log-rotation.md)
+ [將 Amazon FSx for Lustre 和 Amazon FSx for OpenZFS 掛載到 HyperPod 叢集](sagemaker-hyperpod-lifecycle-best-practices-slurm-slurm-setup-with-fsx.md)
+ [在 HyperPod 上建立 Slurm 叢集之前驗證 JSON 組態檔案](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)