View a markdown version of this page

使用 Slurm 持續佈建增強型叢集操作 - Amazon SageMaker AI

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

使用 Slurm 持續佈建增強型叢集操作

使用 Slurm 協同運作建立的 Amazon SageMaker HyperPod 叢集現在支援持續佈建,這項功能可在執行大規模 AI/ML 工作負載時提供更大的彈性和效率。持續佈建可讓您快速開始訓練、無縫擴展、在不中斷操作的情況下執行維護,以及具有叢集操作的精細可見性。

注意

連續佈建可作為使用 Slurm 協同運作所建立之新 HyperPod 叢集的選用組態。目前,使用先前擴展模型的現有叢集無法遷移至連續佈建。

運作方式

持續佈建系統引入了所需狀態架構,取代了傳統的all-or-nothing擴展模型。在先前的模型中,如果任何執行個體群組無法完全佈建,整個叢集建立或更新操作會失敗並復原。透過持續佈建,系統會接受部分容量,並繼續以非同步方式佈建剩餘的執行個體。

持續佈建系統:

  • 接受請求:記錄每個執行個體群組的目標執行個體計數。

  • 啟動佈建:開始平行啟動所有執行個體群組的執行個體。

  • 先佈建優先順序節點:在成功佈建至少一個控制器節點 (以及一個登入節點,如果已指定登入執行個體群組) InService之後,叢集會轉換為 。

  • 追蹤進度:監控每個執行個體啟動嘗試並記錄狀態。

  • 處理失敗:以非同步方式自動重試工作者節點的失敗啟動。

持續佈建預設為停用。若要使用此功能,請在CreateCluster請求ContinuousNodeProvisioningMode將 設定為 。

啟用持續佈建後,您可以同時啟動多個擴展操作,而無需等待先前的操作完成。這可讓您同時擴展相同叢集中的不同執行個體群組,並將多個擴展請求提交至相同的執行個體群組。

優先順序型佈建

Slurm 叢集需要控制器節點可運作,工作者節點才能註冊和接受任務。持續佈建會透過優先順序型佈建自動處理此問題:

  1. 首先佈建控制器執行個體群組。

  2. 一旦一個控制器節點正常運作,登入節點和工作者節點就會開始平行佈建。

  3. 當一個控制器節點啟動且一個登入節點啟動InService時 (如果指定登入執行個體群組),叢集會轉換為 。如果未指定登入執行個體群組,叢集會在佈建控制器節點InService後立即轉換為 。

  4. 由於容量限制而無法立即佈建的工作者節點會進入非同步重試迴圈,並在 Slurm 叢集可用時自動將其新增至 Slurm 叢集。

控制器故障處理

在叢集建立期間,如果控制器節點無法佈建,則行為取決於錯誤是可重試還是不可重試。

可重試的錯誤 (例如運作狀態不佳的執行個體或暫時性故障):

  • HyperPod 會持續取代執行個體,並重試佈建,直到控制器啟動為止。

  • 已佈建的工作者和登入節點仍然可用,但在控制器運作狀態良好InService之前,叢集不會轉換為 。

無法重試的錯誤 (例如,控制器執行個體類型或生命週期指令碼失敗沒有可用的容量):

  • 叢集會標示為 Failed

  • 您會收到失敗原因的通知,並且必須採取修正動作,例如選擇不同的執行個體類型、修正生命週期指令碼,或在不同的可用區域中重試。

先決條件

持續佈建需要透過每個執行個體群組 SlurmConfig 欄位中的 API 承載提供 Slurm 佈建參數 (節點類型、分割區名稱)。在 Amazon S3 中依賴舊版provisioning_parameters.json檔案的叢集與連續佈建不相容。

注意

Slurm 叢集上目前不支援連續佈建下列功能:遷移現有叢集、透過 API 型 Slurm 拓撲進行多標頭節點組態,以及 SlurmConfigStrategy。持續佈建僅以合併模式運作以進行slurm.conf管理。

用量計量

具有持續佈建的 HyperPod 叢集會使用執行個體層級計量,以提供反映實際資源用量的準確計費。這種計量方法與傳統的叢集層級計費不同,因為其獨立追蹤每個執行個體。

執行個體層級計費

透過持續佈建,計費會在個別執行個體層級開始和停止,而不是等待叢集層級狀態變更。此方法提供下列優勢:

  • 精確的計費準確性:計費開始於生命週期指令碼執行開始時。如果生命週期指令碼失敗,將會重試執行個體佈建,並在生命週期指令碼執行時間期間向您收取費用。

  • 獨立計量:每個執行個體的計費生命週期都會個別管理,防止串聯計費錯誤。

  • 即時計費更新:計費會在執行個體開始執行其生命週期組態指令碼時開始,並在執行個體進入終止狀態時停止。

計費生命週期

HyperPod 叢集中的每個執行個體都遵循此計費生命週期:

  • 帳單開始:當執行個體成功啟動並開始執行其生命週期組態指令碼時。

  • 帳單會繼續:執行個體的整個操作生命週期。

  • 計費停止:當執行個體進入終止狀態時,無論終止原因為何。

注意

對於無法啟動的執行個體,計費不會開始。如果執行個體啟動由於容量不足或其他問題而失敗,則不會向您收取該失敗嘗試的費用。計費是在執行個體層級計算的,而且成本是在叢集的 Amazon Resource Name (ARN) 下彙總和報告。

建立已啟用持續佈建的叢集

注意

準備生命週期組態指令碼,並將其上傳至執行角色可存取的 Amazon S3 儲存貯體。如需詳細資訊,請參閱SageMaker HyperPod Slurm 叢集操作

準備 JSON 格式的 CreateCluster API 請求檔案。將 NodeProvisioningMode設定為 ,Continuous並在每個執行個體群組的 SlurmConfig 欄位中提供 Slurm 拓撲資訊。

// create_cluster.json { "ClusterName": "my-training-cluster", "NodeProvisioningMode": "Continuous", "Orchestrator": { "Slurm": {} }, "InstanceGroups": [ { "InstanceGroupName": "controller-group", "InstanceType": "ml.m5.xlarge", "InstanceCount": 1, "LifeCycleConfig": { "SourceS3Uri": "s3://amzn-s3-demo-bucket/lifecycle-scripts/src/", "OnCreate": "on_create.sh" }, "ExecutionRole": "arn:aws:iam::111122223333:role/iam-role-for-cluster", "SlurmConfig": { "NodeType": "Controller" } }, { "InstanceGroupName": "login-group", "InstanceType": "ml.m5.xlarge", "InstanceCount": 1, "LifeCycleConfig": { "SourceS3Uri": "s3://amzn-s3-demo-bucket/lifecycle-scripts/src/", "OnCreate": "on_create.sh" }, "ExecutionRole": "arn:aws:iam::111122223333:role/iam-role-for-cluster", "SlurmConfig": { "NodeType": "Login" } }, { "InstanceGroupName": "worker-gpu-a", "InstanceType": "ml.p5.48xlarge", "InstanceCount": 16, "LifeCycleConfig": { "SourceS3Uri": "s3://amzn-s3-demo-bucket/lifecycle-scripts/src/", "OnCreate": "on_create.sh" }, "ExecutionRole": "arn:aws:iam::111122223333:role/iam-role-for-cluster", "SlurmConfig": { "NodeType": "Compute", "PartitionNames": ["gpu-training"] } } ], "VpcConfig": { "SecurityGroupIds": ["sg-12345678"], "Subnets": ["subnet-12345678"] } }

執行 create-cluster命令以提交請求。

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

這會傳回新叢集的 ARN。

{ "ClusterArn": "arn:aws:sagemaker:us-west-2:111122223333:cluster/abcde12345" }

Slurm 組態管理

持續佈建僅以合併模式運作,以進行slurm.conf分割區管理。在合併模式中,HyperPod 會在您在 中修改的任何內容上附加套用其分割區組態變更slurm.conf。HyperPod 只會更新 的分割區相關區段 slurm.conf(例如分割區名稱和節點名稱項目);不會修改其他 Slurm 組態參數。這表示:

  • slurm.conf 系統會保留您對 的手動編輯。

  • 修改與 HyperPod 預期狀態之間的衝突不會自動偵測或解決偏離。

連續佈建不支援 SlurmConfigStrategy 參數 (ManagedMergeOverwrite)。傳遞任何SlurmConfigStrategy值會導致 API 錯誤。