使用生命週期指令碼自訂 SageMaker HyperPod 叢集 - Amazon SageMaker AI

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

使用生命週期指令碼自訂 SageMaker HyperPod 叢集

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

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

高階概觀

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

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

  2. 準備 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 的組態表單provisioning_parameters.json應包含要在 HyperPod 叢集上佈建的 Slurm 節點組態資訊。這應該反映步驟 1 中 Slurm 節點的設計。

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

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

  4. 將先前步驟中的所有檔案收集到資料夾。資料夾結構取決於您在步驟 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
  5. 將所有檔案上傳至 S3 儲存貯體。複製並保留 S3 儲存貯體路徑。請注意,您應該建立以 sagemaker- 開頭的 S3 儲存貯體路徑,因為您需要選擇與 AmazonSageMakerClusterInstanceRolePolicy 連接的 SageMaker HyperPod 的 IAM 角色,這僅允許以字首 sagemaker- 開頭的 S3 儲存貯體路徑。下列命令是將所有檔案上傳至 S3 儲存貯體的範例命令。

    aws s3 cp --recursive ./lifecycle_files s3://sagemaker-hyperpod-lifecycle/src
  6. 準備 HyperPod 叢集建立請求。

    • 選項 1:如果您使用 AWS CLI,請依照 中的指示,以 JSON 格式 (create_cluster.json) 撰寫叢集建立請求建立新叢集

    • 選項 2:如果您使用 SageMaker AI 主控台 UI,請遵循建立 SageMaker HyperPod 叢集中的指示,在 HyperPod 主控台 UI 中填寫建立叢集請求表單。

    在此階段,請確定您以步驟 1 和 2 中規劃的相同結構建立執行個體群組。此外,請確定您在請求表單中指定來自步驟 5 的 S3 儲存貯體。

  7. 提交叢集建立請求。HyperPod 會根據請求佈建叢集,然後在 HyperPod 叢集執行個體中建立 resource_config.json 檔案,並在執行生命週期指令碼的叢集上設定 Slurm。

下列主題將引導您深入了解如何組織組態檔案和生命週期指令碼,以在 HyperPod 叢集建立期間正常運作。