

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Agendamento de um trabalho do Slurm em um cluster SageMaker HyperPod
<a name="sagemaker-hyperpod-run-jobs-slurm-schedule-slurm-job"></a>

Você pode iniciar trabalhos de treinamento usando os comandos padrão Slurm `sbatch` ou `srun`. Por exemplo, para iniciar um trabalho de treinamento de 8 nós, você pode executar um treinamento de `srun -N 8 --exclusive train.sh` SageMaker HyperPod suporte em uma variedade de ambientes`conda`, incluindo`venv`,`docker`, e. `enroot` Você pode configurar um ambiente de ML executando scripts de ciclo de vida em seus SageMaker HyperPod clusters. Você também tem a opção de anexar um sistema de arquivos compartilhado, como o Amazon FSx, que também pode ser usado como um ambiente virtual.

O exemplo a seguir mostra como executar um trabalho para treinar o Llama-2 com a técnica Fully Sharded Data Parallelism (FSDP) em um cluster com um sistema de arquivos compartilhado da Amazon. SageMaker HyperPod FSx Você também pode encontrar mais exemplos no [ GitHub repositório Awsome Distributed Training](https://github.com/aws-samples/awsome-distributed-training/).

**dica**  
Todos os SageMaker HyperPod exemplos estão disponíveis na `3.test_cases` pasta do [ GitHub repositório do Awsome Distributed Training](https://github.com/aws-samples/awsome-distributed-training/).

1. Clone o [ GitHub repositório Awsome Distributed Training](https://github.com/aws-samples/awsome-distributed-training/) e copie os exemplos de trabalhos de treinamento para o seu sistema de arquivos da Amazon FSx . 

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

1. Execute o script [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). Isso cria um `conda` ambiente no seu sistema de FSx arquivos da Amazon. Verifique se o sistema de arquivos está acessível a todos os nós do cluster.

1. Crie o ambiente virtual Conda iniciando um trabalho de slurm de nó único da seguinte forma:

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

1. Depois que o ambiente for criado, você poderá iniciar um trabalho de treinamento apontando para o caminho do ambiente no volume compartilhado. Você pode iniciar trabalhos de treinamento de nó único e de vários nós com a mesma configuração. Para iniciar uma tarefa, crie um script inicializador de tarefas (também chamado de script de ponto de entrada) da seguinte forma:

   ```
   #!/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
   ```
**dica**  
Se você quiser tornar seu trabalho de treinamento mais resiliente contra falhas de hardware usando o recurso de retomada automática do SageMaker HyperPod, você precisa configurar adequadamente a variável de ambiente `MASTER_ADDR` no script do ponto de entrada. Para saber mais, consulte [Recuperação automática de nós e retomada automática](sagemaker-hyperpod-resiliency-slurm-auto-resume.md).

   Este tutorial pressupõe que esse script seja salvo como `/fsx/users/my_user/train.sh`.

1. Com esse script no volume compartilhado em `/fsx/users/my_user/train.sh`, execute o comando `srun` a seguir para agendar o trabalho do Slurm.

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