Planifier une tâche Slurm sur un cluster SageMaker HyperPod - Amazon SageMaker AI

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Planifier une tâche Slurm sur un cluster SageMaker HyperPod

Vous pouvez lancer des tâches de formation à l'aide du Slurm sbatch ou srun des commandes standard. Par exemple, pour lancer une tâche de formation à 8 nœuds, vous pouvez exécuter une formation de srun -N 8 --exclusive train.sh SageMaker HyperPod support dans différents environnements, notammentconda, venvdocker, etenroot. Vous pouvez configurer un environnement ML en exécutant des scripts de cycle de vie sur vos SageMaker HyperPod clusters. Vous avez également la possibilité de joindre un système de fichiers partagé tel qu'AmazonFSx, qui peut également être utilisé comme environnement virtuel.

L'exemple suivant montre comment exécuter une tâche pour former Llama-2 à l'aide de la technique Fully Sharded Data Parallelism (FSDP) sur un cluster SageMaker HyperPod doté d'un système de fichiers partagé Amazon. FSx Vous pouvez également trouver d'autres exemples dans le GitHub référentiel Awsome Distributed Training.

Astuce

Tous les SageMaker HyperPod exemples sont disponibles dans le 3.test_cases dossier du GitHub référentiel Awsome Distributed Training.

  1. Clonez le GitHub référentiel Awsome Distributed Training et copiez les exemples de tâches de formation dans votre système de FSx fichiers Amazon.

    $ TRAINING_DIR=/fsx/users/my-user/fsdp $ git clone https://github.com/aws-samples/awsome-distributed-training/
  2. Exécutez le script create_conda_env.sh. Cela crée un conda environnement sur votre système de FSx fichiers Amazon. Assurez-vous que le système de fichiers est accessible à tous les nœuds du cluster.

  3. Créez l'environnement virtuel Conda en lançant une tâche slurm à nœud unique comme suit.

    $ srun -N 1 /path_to/create_conda_env.sh
  4. Une fois l'environnement créé, vous pouvez lancer une tâche de formation en pointant sur le chemin de l'environnement sur le volume partagé. Vous pouvez lancer des tâches d'entraînement à nœud unique ou à nœuds multiples avec la même configuration. Pour lancer une tâche, créez un script de lancement de tâches (également appelé script de point d'entrée) comme suit.

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

    Si vous souhaitez améliorer la résilience de votre formation face aux pannes matérielles en utilisant la fonctionnalité de reprise automatique de SageMaker HyperPod, vous devez configurer correctement la variable d'environnement MASTER_ADDR dans le script du point d'entrée. Pour en savoir plus, consultez Reprise automatique.

    Ce didacticiel part du principe que ce script est enregistré sous le nom/fsx/users/my_user/train.sh.

  5. Avec ce script dans le volume partagé à l'adresse/fsx/users/my_user/train.sh, exécutez la srun commande suivante pour planifier la tâche Slurm.

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