本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
自動節點復原和自動恢復
注意
截至 2025 年 9 月 11 日,HyperPod 搭配 Slurm 協同運作現在支援運作狀態監控代理程式。執行 UpdateClusterSoftware 並更新至最新版本的 AMI,以使用此功能。
本節討論 Amazon SageMaker HyperPod 的兩個互補彈性功能:自動節點復原可取代故障的基礎設施,無需手動介入,以及在硬體故障後從最後一個檢查點重新啟動訓練任務的自動恢復功能。
自動節點復原的運作方式
在叢集建立或更新期間,叢集管理員使用者可以在叢集層級於 Automatic (建議) 與 None 之間選取節點 (執行個體) 復原選項。如果設定為 Automatic,SageMaker HyperPod 會自動重新啟動或取代故障的節點。
重要
建議您設定 Automatic 選項。根據預設,叢集會使用自動節點復原進行設定。
從運作狀態監控代理程式、基本運作狀態檢查和深層運作狀態檢查發現問題時,會自動執行節點復原。如果設定為 None,運作狀態監控代理程式會在偵測到故障時標記執行個體,但不會自動對受影響的節點啟動任何修復或復原動作。我們不建議使用此選項。
使用 Amazon SageMaker HyperPod 自動恢復功能執行訓練任務
本節描述如何使用 SageMaker HyperPod 自動繼續功能執行訓練任務,該功能提供零接觸彈性基礎設施,以在發生硬體故障時自動從上次儲存的檢查點復原訓練任務。
使用自動繼續功能,如果任務由於硬體故障或訓練之間任何暫時性問題而失敗,SageMaker HyperPod 會自動繼續啟動節點取代工作流程,並在取代故障節點之後重新啟動任務。使用自動恢復時,每當任務失敗時,就會執行下列硬體檢查:
| Category | 公用程式名稱 | 執行個體類型相容性 | Description |
|---|---|---|---|
| 加速器 | NVIDIA SMI | GPU | nvidia-sminvidia-smi 的輸出,以判斷執行個體的運作狀態。 |
| 加速器 | Neuron sysfs | Trainium | 對於採用 Trainium 技術的執行個體,Neuron 裝置的運作狀態取決於從 Neuron sysfs |
| 網路 | EFA | GPU 和 Trainium | 為了協助診斷 Elastic Fabric Adaptor (EFA) 裝置,EFA 運作狀態檢查程式會使用執行個體內所有可用的 EFA 卡執行一系列連線測試。 |
注意
當一般資源 (GRES)
搭配 Slurm 使用 SageMaker HyperPod 自動繼續功能
當您搭配 Slurm 使用 SageMaker HyperPod 自動繼續時,您應該在透過使用 salloc 或 sbatch 取得的專屬配置內執行任務。無論如何,您都需要修改進入點指令碼,以確保在繼續任務時,所有設定步驟都在單一 srun 命令中執行。透過進入點指令碼,請務必在取代的節點上設定環境,以符合任務步驟在停止之前執行的環境。下列程序說明如何準備進入點指令碼,讓環境保持一致,並以單一srun命令執行。
提示
如果使用 sbatch,您可以建立單獨的指令碼來設定環境並使用單一 srun 命令,使批次指令碼保持簡單。
-
使用下列程式碼範例建立指令碼,並將其儲存為
train_auto_resume.sh。此指令碼會部署訓練環境設定,假設先前沒有對取代的節點進行手動設定。這可確保環境與節點無關,因此當節點被取代時,相同的環境會先佈建在節點上,再繼續任務。注意
下列程式碼範例展示如何探索與任務相關聯的 Slurm 節點清單。請勿使用 Slurm 提供的
$SLURM_JOB_NODELIST環境變數,因為其值可能會在 SageMaker HyperPod 自動繼續任務之後過期。下列程式碼範例展示如何定義新的NODE_LIST變數以取代SLURM_JOB_NODELIST,然後從NODE_LIST變數設定MASTER_NODE和MASTER_ADDR變數。#!/bin/bash # Filename: train_auto_resume.sh # Sample containerized script to launch a training job with a single srun which can be auto-resumed. # Place your training environment setup here. # Example: Install conda, docker, activate virtual env, etc. # Get the list of nodes for a given job NODE_LIST=$(scontrol show jobid=$SLURM_JOBID | \ # Show details of the SLURM job awk -F= '/NodeList=/{print $2}' | \ # Extract NodeList field grep -v Exc) # Exclude nodes marked as excluded # Determine the master node from the node list MASTER_NODE=$(scontrol show hostname $NODE_LIST | \ # Convert node list to hostnames head -n 1) # Select the first hostname as master node # Get the master node address MASTER_ADDR=$(scontrol show node=$MASTER_NODE | \ # Show node information awk -F= '/NodeAddr=/{print $2}' | \ # Extract NodeAddr awk '{print $1}') # Print the first part of NodeAddr # Torchrun command to launch the training job torchrun_cmd="torchrun --nnodes=$SLURM_NNODES \ --nproc_per_node=1 \ --node_rank=$SLURM_NODE \ --master-addr=$MASTER_ADDR \ --master_port=1234\<your_training_script.py>" # Execute the torchrun command in the 'pytorch' Conda environment, # streaming output live /opt/conda/bin/conda run --live-stream -n pytorch $torchrun_cmd提示
您可以使用上述指令碼新增更多命令,為您的任務安裝任何其他相依性。不過,我們建議您將相依性安裝指令碼保留至叢集建立期間使用的一組生命週期指令碼。如果您使用共用目錄上託管的虛擬環境,也可以利用此指令碼來啟用虛擬環境。
-
透過新增旗標
--auto-resume=1啟動已啟用 SageMaker HyperPod 自動繼續的任務,以指示應在硬體故障時自動重試srun命令。注意
如果您已使用
sbatch或salloc設定資源配置,則可以在配置內執行多個srun命令。發生故障時,SageMaker HyperPod 自動繼續功能只會在srun命令的目前任務步驟中操作,旗標為 --auto-resume=1。換句話說,在srun命令中啟用自動繼續不適用於資源配置工作階段內啟動的其他srun命令。以下是已啟用
auto-resume的srun命令範例。使用 sbatch
由於設定環境的大多數邏輯已在
train_auto_resume.sh中,批次指令碼應簡單且類似下列程式碼範例。假設下列批次指令碼儲存為batch.sh。#!/bin/bash #SBATCH --nodes 2 #SBATCH --exclusive srun --auto-resume=1train_auto_resume.sh使用以下命令執行上述批次指令碼。
sbatchbatch.sh使用 salloc
首先取得專屬配置,並執行旗標為
--auto-resume的srun命令和進入點指令碼。salloc -N 2 --exclusive srun --auto-resume=1train_auto_resume.sh
自動節點復原和自動恢復如何一起運作
當自動節點復原和自動恢復系統都處於作用中狀態時,它們會遵循協調方法來處理失敗。如果 HMA 偵測到硬體故障,無論任務層級狀態為何,節點都會標記為耗盡。啟用節點自動復原後,節點會在節點中執行的所有任務結束時自動取代。在此案例中,對於啟用自動恢復的任務,如果步驟中有非零的結束狀態,則自動恢復會啟動 (任務會在節點取代後恢復)。未啟用自動恢復的任務只會結束,需要管理員或使用者手動重新提交。
注意
如果您使用自動恢復,則偵測到硬體故障時,一律會取代節點 (不會重新啟動)。