SageMaker HyperPod 叢集彈性 - Amazon SageMaker

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

SageMaker HyperPod 叢集彈性

SageMaker HyperPod 提供下列叢集彈性功能。

叢集運作狀態檢查

本節說明一組運作狀態檢查, SageMaker HyperPod 用於定期監控叢集執行個體運作狀態,以解決加速器 (GPU 和 Trainium 核心) 和聯網 () 等裝置的問題EFA。

類別 公用程式名稱 執行個體類型相容性 描述
加速器 DCGM 政策 GPU 叢集中的每個執行個體都會持續監控所有相關政策GPU,包括使用 NVIDIA 的DCGMXID錯誤。
加速器 NVIDIA SMI GPU nvidia-smi 公用程式廣為人知CLI,可管理和監控 GPUs。內建運作狀態檢查程式會從 剖析輸出nvidia-smi,以判斷執行個體的運作狀態。
加速器 Neuron sysfs 訓練館 對於 Trainium 驅動的執行個體,Neuron 裝置的運作狀態取決於從 Neuron sysfs 讀取由 Neuron 驅動程式直接傳播的計數器。
網路 EFA GPU 和 Trainium 為了協助診斷 Elastic Fabric Adaptor (EFA) 裝置,EFA運作狀態檢查程式會使用執行個體內所有可用的EFA卡片執行一系列連線測試。
壓力 DCGM 診斷層級 2 GPU DCGM 診斷層級 2 用於GPUs在系統中執行 ,並對其施加壓力,以全面了解運作狀態。
壓力 CPU 壓力 GPU 和 Trainium CPU 運作狀態是使用 Linux 壓力工具來判斷,該工具會執行多個執行緒,以達到 100% CPU使用率並執行 I/O 操作。

自動繼續

本節說明如何使用 SageMaker HyperPod 自動恢復功能執行訓練任務,該功能提供零接觸彈性基礎設施,以便在超過 16 個節點的叢集發生硬體故障時,自動從上次儲存的檢查點復原訓練任務。

使用自動恢復功能,如果任務因硬體故障或訓練之間有任何暫時性問題而失敗, SageMaker HyperPod 則自動恢復會啟動節點取代工作流程,並在取代故障節點後重新啟動任務。

注意

一般資源 (GRES) 連接至 Slurm 節點時,Slurm 通常不允許節點配置的變更,例如取代節點,因此不允許繼續失敗的任務。除非明確禁止, HyperPod 否則自動恢復功能會自動重新佇列與啟用 GRES的節點相關聯的任何錯誤任務。此程序涉及停止任務、將其放回任務佇列,然後從頭開始重新啟動任務。

搭配 Slurm 使用 SageMaker HyperPod 自動恢復功能

當您搭配 Slurm 使用 SageMaker HyperPod 自動恢復時,您應該在透過使用 或 salloc 取得的獨家配置內執行任務sbatch。在任何情況下,您需要修改進入點指令碼,以確保在繼續任務時,所有設定步驟都以單一srun命令執行。透過入門指令碼,在已取代的節點上設定環境必須與任務步驟在停止之前執行的環境一致,這一點很重要。下列程序說明如何準備入門指令碼,以保持環境一致性,並以單一srun命令執行。

提示

如果您使用 sbatch,您可以建立個別的指令碼來設定環境並使用單一srun命令,以保持批次指令碼的簡單性。

  1. 使用下列程式碼範例建立指令碼,並將其儲存為 train_auto_resume.sh。此指令碼部署訓練環境設定,假設先前沒有對取代的節點進行手動組態。這可確保環境不受節點影響,因此當節點被取代時,在繼續任務之前,會在節點上佈建相同的環境。

    注意

    下列程式碼範例示範如何探索與任務相關聯的 Slurm 節點清單。請勿使用 Slurm 提供$SLURM_JOB_NODELIST的環境變數,因為其值可能會在 SageMaker HyperPod 自動恢復任務後過期。下列程式碼範例示範如何定義新NODE_LIST變數以取代 SLURM_JOB_NODELIST,然後從NODE_LIST變數設定 MASTER_NODEMASTER_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
    提示

    您可以使用上述指令碼新增更多命令,以安裝任務的任何其他相依性。不過,我們建議您將相依性安裝指令碼保留在叢集建立期間使用的一組生命週期指令碼。如果您使用託管在共用目錄上的虛擬環境,您也可以使用此指令碼來啟用虛擬環境。

  2. 透過新增旗標--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=1 train_auto_resume.sh

    使用以下命令執行先前的批次指令碼。

    sbatch batch.sh

    使用 salloc

    首先取得獨家配置,然後使用 --auto-resume 旗標和 進入點指令碼執行 srun命令。

    salloc -N 2 --exclusive srun --auto-resume=1 train_auto_resume.sh

如何取代未由 自動恢復的故障節點 HyperPod

HyperPod 自動恢復功能會監控 Slurm 節點的狀態是否變成 faildown。您可以執行 來檢查 Slurm 節點的狀態sinfo

如果您有節點卡住問題,但未由 HyperPod 自動恢復功能修正,建議您執行下列命令,將節點的狀態變更為 fail

scontrol update node=<ip-ipv4> state=fail reason="Action:Replace"

在上述命令範例中,<ip-ipv4>使用您要取代之故障執行個體的 Slurm 節點名稱 (主機名稱) 取代 。

執行此命令後,節點應進入 fail 狀態,等待目前執行中的任務完成,以運作狀態良好的執行個體取代,並使用相同的主機名稱復原。此程序需要的時間取決於可用區域中的可用執行個體,以及執行生命週期指令碼所需的時間。在更新和替換過程中,避免再次手動變更節點狀態或重新啟動 Slurm 控制器;這樣做可能會導致替換失敗。如果節點長時間後未復原或變成 idle 狀態,請聯絡 AWS 支援

如果故障節點持續卡在 fail 狀態中,您可以嘗試的最後一個手段是手動強制將節點狀態變更為 down。這需要管理員權限 (sudo 許可)。

警告

在執行下列命令之前,請小心執行,因為它會強制刪除所有任務,而且可能會遺失所有未儲存的工作。

scontrol update node=<ip-ipv4> state=down reason="Action:Replace"