

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

# 在 SageMaker HyperPod 叢集上排程 Slurm 任務
<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 FSx 共用檔案系統的 SageMaker HyperPod 叢集上，執行使用全碎片資料平行化 (FSDP) 技術訓練 Llama-2 的任務。您也可以從 [Awsome 分散式訓練 GitHub 儲存庫](https://github.com/aws-samples/awsome-distributed-training/)找到更多範例。

**提示**  
所有 SageMaker HyperPod 範例都可在 [Awsome 分散式訓練 GitHub 儲存庫](https://github.com/aws-samples/awsome-distributed-training/)的 `3.test_cases` 資料夾中取得。

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 的自動繼續功能，讓您的訓練任務對硬體故障更具彈性，則需要在進入點指令碼中正確設定環境變數 `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
   ```