SageMaker HyperPod 集群弹性 - Amazon SageMaker
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

SageMaker HyperPod 集群弹性

SageMaker HyperPod 提供以下集群弹性功能。

集群运行状况检查

本节介绍了一组运行状况检查,这些 SageMaker HyperPod 检查用于定期监控集群实例的运行状况,以了解加速器(GPU和 Trainium 内核)和网络()等设备是否存在问题。EFA

类别 实用程序名称 实例类型兼容性 描述
Accelerator DCGM政策 GPU 集群中的每个实例都会持续监控所有GPU相关策略,包括XID错误NVIDIADCGM
Accelerator NVIDIA SMI GPU nvidia-smi 实用程序是众所周知的管理和监控工具CLI。GPUs内置运行状况检查器解析的输出nvidia-smi以确定实例的运行状况。
Accelerator 神经元 sysfs Trainium 对于 Trainium 支持的实例,神经元设备的健康状况由读取神经元驱动程序直接传播的 Ne uron sysfs 中的计数器来确定。
网络 EFA GPU和 Trainium 为了帮助诊断 Elastic Fabric Adaptor (EFA) 设备,运行EFA状况检查器使用实例中的所有可用EFA卡运行一系列连接测试。
压力 DCGM诊断级别 2 GPU DCGM诊断级别 2 用于锻炼系统GPUs中的信息,并向他们施加压力,以全面了解运行状况。
压力 CPUstress GPU和 Trainium CPU运行状况是使用 Linux stres s 工具确定的,该工具运行多个线程以实现 100% 的CPU利用率并执行 I/O 操作。

自动恢复

本节介绍如何使用 SageMaker HyperPod 自动恢复功能运行训练作业,该功能提供了零接触弹性基础架构,可在节点超过 16 个的集群出现硬件故障时自动从上次保存的检查点恢复训练作业。

借助自动恢复功能,如果作业由于硬件故障或训练间隔期间的任何暂时问题而失败,则 SageMaker HyperPod 自动恢复将启动节点更换工作流程,并在更换故障节点后重新启动作业。

注意

通用资源 (GRES) 附加到 Slurm 节点时,Slurm 通常不允许更改节点分配,例如替换节点,因此不允许恢复失败的作业。除非明确禁止,否则 HyperPod 自动恢复功能会自动将任何与已启用节点关联的错误作业重新排队。GRES此过程包括停止作业,将其放回作业队列中,然后从头开始重新启动作业。

在 Slur SageMaker HyperPod m 中使用自动恢复功能

当你在 Slurm 中使用 SageMaker HyperPod 自动恢复时,你应该在通过使用或获得的独占分配中运行作业。salloc sbatch无论如何,您都需要修改 entrypoint 脚本,以确保在恢复作业时,所有设置步骤都在单个srun命令中运行。通过 entrypoint 脚本,重要的是要在替换的节点上设置环境,使其与任务步骤停止前运行的环境保持一致。以下先例说明如何准备入口点脚本以保持环境一致并将其作为单个命令运行。srun

提示

如果使用sbatch,则可以通过创建用于设置环境的单独脚本并使用单个srun命令来简化批处理脚本。

  1. 使用以下代码示例创建脚本并将其另存为train_auto_resume.sh。此脚本部署训练环境设置时假设先前未对替换的节点进行任何手动配置。这样可以确保环境与节点无关,因此在替换节点时,在恢复作业之前,会在节点上配置相同的环境。

    注意

    以下代码示例显示了如何发现与任务关联的 Slurm 节点列表。请勿使用 Slurm 提供的$SLURM_JOB_NODELIST环境变量,因为在 SageMaker HyperPod 自动恢复作业后,其值可能会过时。以下代码示例显示了如何定义要替换的新NODE_LIST变量SLURM_JOB_NODELIST,然后在该MASTER_ADDR变量中设置MASTER_NODENODE_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
    提示

    您可以使用前面的脚本添加更多命令,以便为您的作业安装任何其他依赖项。但是,我们建议您将依赖项安装脚本保留为集群创建期间使用的生命周期脚本集。如果您使用托管在共享目录上的虚拟环境,也可以使用此脚本来激活虚拟环境。

  2. 在启用 SageMaker HyperPod 自动恢复的情况下启动作业,方法是添加标志,--auto-resume=1以指示在出现硬件故障时应自动重试该srun命令。

    注意

    如果您使用sbatch或设置了资源分配salloc,则可以在分配中运行多个srun命令。如果出现故障, SageMaker HyperPod自动恢复功能仅在带有标志--auto-resume=1srun命令的当前作业步骤中运行。换句话说,在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标志和 entrypoint 脚本运行srun命令。

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

如何替换未自动恢复的故障节点 HyperPod

HyperPod 自动恢复功能会监控 Slurm 节点的状态是否变为或。fail down你可以通过运行来检查 Slurm 节点的状态。sinfo

如果您的节点遇到问题但无法通过 HyperPod 自动恢复功能修复,我们建议您运行以下命令将该节点的状态更改为fail

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

在前面的命令示例中,<ip-ipv4>替换为要替换的故障实例的 Slurm 节点名称(主机名)。

运行此命令后,节点应进入fail状态,等待当前正在运行的作业完成,替换为运行正常的实例,然后使用相同的主机名进行恢复。此过程需要时间,具体取决于可用区中的可用实例以及运行生命周期脚本所需的时间。在更新和替换过程中,请避免再次手动更改节点状态或重新启动 Slurm 控制器;这样做可能会导致更换失败。如果该节点在很长一段时间后仍未恢复或恢复到idle状态,请联系 Su Amazon pp ort。

如果故障节点持续处于该fail状态,则可以尝试的最后一种方法是手动强制将节点状态更改为down。这需要管理员权限(sudo 权限)。

警告

在运行以下命令之前,请谨慎行事,因为它会强制终止所有作业,并且您可能会丢失所有未保存的工作。

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