Programa un trabajo de Slurm en un clúster SageMaker HyperPod - Amazon SageMaker

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Programa un trabajo de Slurm en un clúster SageMaker HyperPod

Puede iniciar los trabajos de formación utilizando el Slurm sbatch o srun los comandos estándar. Por ejemplo, para lanzar un trabajo de formación de 8 nodos, puede ejecutar un entrenamiento de srun -N 8 --exclusive train.sh SageMaker HyperPod apoyo en una variedad de entornos, incluidos, condavenv, docker y. enroot Puede configurar un entorno de aprendizaje automático ejecutando scripts de ciclo de vida en sus SageMaker HyperPod clústeres. También tiene la opción de adjuntar un sistema de archivos compartido, como Amazon FSx, que también se puede utilizar como entorno virtual.

El siguiente ejemplo muestra cómo ejecutar un trabajo para entrenar a Llama-2 con la técnica de paralelismo de datos totalmente fragmentado (FSDP) en un clúster con SageMaker HyperPod un sistema de archivos compartidos Amazon FSx. También puede encontrar más ejemplos en el repositorio Awsome Distributed Training. GitHub

sugerencia

Todos los SageMaker HyperPod ejemplos están disponibles en la 3.test_cases carpeta del repositorio de Awsome Distributed Training GitHub .

  1. Clona el GitHub repositorio de Awsome Distributed Training y copia los ejemplos de trabajos de formación en tu sistema de archivos Amazon FSx.

    $ TRAINING_DIR=/fsx/users/my-user/fsdp $ git clone https://github.com/aws-samples/awsome-distributed-training/
  2. Ejecute el script create_conda_env.sh. Esto crea un conda entorno en su sistema de archivos Amazon FSx. Asegúrese de que todos los nodos del clúster puedan acceder al sistema de archivos.

  3. Cree el entorno virtual de Conda lanzando un slurm de un solo nodo de la siguiente manera.

    $ srun -N 1 /path_to/create_conda_env.sh
  4. Una vez creado el entorno, puede iniciar un trabajo de formación seleccionando la ruta del entorno en el volumen compartido. Puede lanzar trabajos de formación tanto de un nodo como de varios nodos con la misma configuración. Para lanzar un trabajo, cree un script de inicio de trabajos (también denominado script de punto de entrada) de la siguiente manera.

    #!/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
    sugerencia

    Si desea que su trabajo de formación sea más resistente a los fallos de hardware mediante la capacidad de reanudación automática de SageMaker HyperPod, debe configurar correctamente la variable de entorno MASTER_ADDR en el script de punto de entrada. Para obtener más información, consulte Reanudación automática.

    En este tutorial se asume que este script se guarda como. /fsx/users/my_user/train.sh

  5. Con este script en el volumen compartido/fsx/users/my_user/train.sh, ejecute el siguiente srun comando para programar el trabajo de Slurm.

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