SageMaker HyperPod 叢集彈性 - Amazon SageMaker AI

SageMaker HyperPod 叢集彈性

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

叢集運作狀態檢查

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

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

自動繼續

本節描述如何使用 SageMaker HyperPod 自動繼續功能執行訓練任務,該功能提供零接觸彈性基礎設施,以在發生硬體故障時自動從上次儲存的檢查點復原訓練任務。

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

注意

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

搭配 Slurm 使用 SageMaker HyperPod 自動繼續功能

當您搭配 Slurm 使用 SageMaker HyperPod 自動繼續時,您應該在透過使用 sallocsbatch 取得的專屬配置內執行任務。無論如何,您都需要修改進入點指令碼,以確保在繼續任務時,所有設定步驟都在單一 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 命令。

    注意

    如果您已使用 sbatchsalloc 設定資源配置,則可以在配置內執行多個 srun 命令。發生故障時,SageMaker HyperPod 自動繼續功能只會在 srun 命令的目前任務步驟中操作,旗標為 --auto-resume=1。換句話說,在 srun 命令中啟用自動繼續不適用於資源配置工作階段內啟動的其他 srun 命令。

    以下是已啟用 auto-resumesrun 命令範例。

    使用 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-resumesrun 命令和進入點指令碼。

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

如何取代 HyperPod 未自動繼續的故障節點

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

如果您有節點卡住問題,但 HyperPod 自動繼續功能無法將其修正,建議您執行下列命令,將節點的狀態變更為 fail

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

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

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

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

警告

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

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