

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

# 在集群上调度 Slurm 作业 SageMaker HyperPod
<a name="sagemaker-hyperpod-run-jobs-slurm-schedule-slurm-job"></a>

您可以使用标准的 Slurm `sbatch` 或 `srun` 命令启动训练作业。例如，要启动 8 节点训练作业，可以在各种环境中运行`srun -N 8 --exclusive train.sh` SageMaker HyperPod 支持训练，包括`conda`、`venv``docker`、和`enroot`。您可以通过在 SageMaker HyperPod 集群上运行生命周期脚本来配置 ML 环境。您还可以选择附加共享文件系统，例如 Amazon FSx，该文件系统也可以用作虚拟环境。

以下示例说明如何在具有 Amazon 共享文件系统的集群 SageMaker HyperPod 上使用完全分片数据并行化 (FSDP) 技术运行训练 Llama-2 的作业。 FSx 您还可以从 [Awsome 分布式训练 GitHub 资料库](https://github.com/aws-samples/awsome-distributed-training/)中找到更多示例。

**提示**  
所有 SageMaker HyperPod 示例都可在 [Awsome 分布式训练 GitHub 存储库的`3.test_cases`文件夹中找](https://github.com/aws-samples/awsome-distributed-training/)到。

1. 克隆 [Awsome 分布式训练 GitHub 存储库](https://github.com/aws-samples/awsome-distributed-training/)，并将训练作业示例复制到您的 Amazon FSx 文件系统。

   ```
   $ TRAINING_DIR=/fsx/users/my-user/fsdp
   $ git clone https://github.com/aws-samples/awsome-distributed-training/
   ```

1. 运行 [https://github.com/aws-samples/awsome-distributed-training/blob/main/3.test_cases/10.FSDP/0.create_conda_env.sh](https://github.com/aws-samples/awsome-distributed-training/blob/main/3.test_cases/10.FSDP/0.create_conda_env.sh) 脚本。这将在您的 Amazon FSx 文件系统上创建`conda`环境。确保集群中的所有节点都能访问文件系统。

1. 启动单节点 slurm 作业，构建虚拟 Conda 环境，如下所示。

   ```
   $ srun -N 1 /path_to/create_conda_env.sh
   ```

1. 环境构建完成后，您可以通过指向共享卷上的环境路径来启动训练作业。您可以使用相同的设置启动单节点和多节点训练作业。要启动作业，请按如下步骤创建作业启动器脚本（也称为入口点脚本）。

   ```
   #!/usr/bin/env bash
   set -ex
   
   ENV_PATH=/fsx/users/my_user/pytorch_env
   TORCHRUN=$ENV_PATH/bin/torchrun
   TRAINING_SCRIPT=/fsx/users/my_user/pt_train.py
   
   WORLD_SIZE_JOB=$SLURM_NTASKS
   RANK_NODE=$SLURM_NODEID
   PROC_PER_NODE=8
   MASTER_ADDR=(`scontrol show hostnames \$SLURM_JOB_NODELIST | head -n 1`)
   MASTER_PORT=$(expr 10000 + $(echo -n $SLURM_JOBID | tail -c 4))
   
   DIST_ARGS="--nproc_per_node=$PROC_PER_NODE \
              --nnodes=$WORLD_SIZE_JOB \
              --node_rank=$RANK_NODE \
              --master_addr=$MASTER_ADDR \
              --master_port=$MASTER_PORT \
             "
             
   $TORCHRUN $DIST_ARGS $TRAINING_SCRIPT
   ```
**提示**  
如果要使用的自动恢复功能提高训练作业抵御硬件故障的能力 SageMaker HyperPod，则需要在 entrypoint 脚本`MASTER_ADDR`中正确设置环境变量。要了解更多信息，请参阅[自动节点恢复和自动恢复](sagemaker-hyperpod-resiliency-slurm-auto-resume.md)。

   本教程假定该脚本保存为 `/fsx/users/my_user/train.sh`。

1. 将此脚本放入位于 `/fsx/users/my_user/train.sh` 的共享卷后，运行以下 `srun` 命令来调度 Slurm 作业。

   ```
   $ cd /fsx/users/my_user/
   $ srun -N 8 train.sh
   ```