本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
自动节点恢复和自动恢复
注意
截至2025年9月11日,Slurm编排现在支持健康监测代理。 HyperPod 要使用此功能,请运行UpdateClusterSoftware并更新到最新版本的 AMI。
本节讨论 Amazon SageMaker HyperPod 的两个互补弹性功能:无需人工干预即可替换故障基础设施的自动节点恢复,以及硬件故障后从最后一个检查点重新启动训练作业的自动恢复功能。
自动节点恢复的工作原理
在集群创建或更新期间,集群管理员用户可在集群级别的 Automatic(推荐)和 None 之间选择节点(实例)恢复选项。如果设置为Automatic,则 SageMaker HyperPod 自动重启或更换故障节点。
重要
我们建议设置 Automatic 选项。默认情况下,群集设置为自动节点恢复。
当从运行状况监控座席、基本运行状况检查和深度运行状况检查中发现问题时,自动运行节点恢复。如果设置为 None,运行状况监控座席将在检测到故障时对实例进行标记,但不会在受影响的节点上自动启动任何修复或恢复操作。我们不建议使用此选项。
使用 Amazon SageMaker HyperPod 自动恢复功能运行训练作业
本节介绍如何使用 SageMaker HyperPod 自动恢复功能运行训练作业,该功能提供了零接触弹性基础架构,可在硬件出现故障时自动从上次保存的检查点恢复训练作业。
借助自动恢复功能,如果作业由于硬件故障或训练间隔期间的任何暂时问题而失败,则 SageMaker HyperPod 自动恢复将启动节点替换工作流程,并在更换故障节点后重新启动作业。使用自动恢复时,每当作业失败时,都会运行以下硬件检查:
| 类别 | 实用程序名称 | 实例类型兼容性 | 说明 |
|---|---|---|---|
| Accelerator | NVIDIA SMI | GPU | nvidia-sminvidia-smi 的输出,以确定实例的运行状况。 |
| Accelerator | Neuron sysfs | Trainium | 对于 Trainium-powered 实例,Neuron 设备的运行状况由 Neuron 驱动程序直接从 Neuron sysfs |
| Network | EFA | GPU 和 Trainium | 为帮助诊断弹性 Fabric 适配器 (EFA) 设备,EFA 运行状况检查程序会使用实例中所有可用的 EFA 卡运行一系列连接性测试。 |
注意
当通用资源(GRES)
在 Slur SageMaker HyperPod m 中使用自动恢复功能
当你在 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,然后根据MASTER_NODE变量设置MASTER_ADDR和NODE_LIST变量。#!/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提示
您可以使用前面的脚本添加更多命令,以便为作业安装其他依赖关系。不过,我们建议您将依赖关系安装脚本保留在创建集群时使用的生命周期脚本集中。如果您使用托管在共享目录下的虚拟环境,也可以使用此脚本激活虚拟环境。
-
在启用 SageMaker HyperPod 自动恢复的情况下启动作业,方法是添加标志,
--auto-resume=1以指示在出现硬件故障时应自动重试该srun命令。注意
如果您使用
sbatch或salloc设置了资源分配,则可以在分配中运行多个srun命令。如果出现故障, SageMaker HyperPod自动恢复功能仅在带有标志--auto-resume=1的srun命令的当前作业步骤中运行。换句话说,在 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 检测到硬件故障,则无论作业级别的状态如何,该节点都会被标记为已耗尽。启用节点自动恢复后,一旦节点中运行的所有作业退出,就会自动替换节点。在这种情况下,对于启用了自动恢复的作业,如果步骤中的退出状态为非零,则自动恢复将启动(替换节点后作业就会恢复)。未启用自动恢复功能的作业将直接退出,需要管理员或用户手动重新提交。
注意
如果使用自动恢复,则在检测到硬件故障时将始终替换节点(不重新启动)。