Pianifica un job Slurm su un cluster SageMaker HyperPod - Amazon SageMaker

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Pianifica un job Slurm su un cluster SageMaker HyperPod

È possibile avviare lavori di formazione utilizzando lo Slurm sbatch o srun i comandi standard. Ad esempio, per avviare un processo di formazione a 8 nodi, è possibile eseguire la formazione dei srun -N 8 --exclusive train.sh SageMaker HyperPod supporti in una serie di ambienti, tra cui, condavenv, docker e. enroot È possibile configurare un ambiente ML eseguendo script del ciclo di vita sui cluster. SageMaker HyperPod È inoltre possibile allegare un file system condiviso come Amazon FSx, che può essere utilizzato anche come ambiente virtuale.

L'esempio seguente mostra come eseguire un job per addestrare Llama-2 con la tecnica Fully Sharded Data Parallelism (FSDP) su un cluster con SageMaker HyperPod un file system condiviso Amazon FSx. Puoi anche trovare altri esempi dal repository Awsome Distributed Training. GitHub

Suggerimento

Tutti gli SageMaker HyperPod esempi sono disponibili nella 3.test_cases cartella del repository Awsome Distributed Training. GitHub

  1. Clona l' GitHub archivio Awsome Distributed Training e copia gli esempi di lavori di formazione sul tuo file system Amazon FSx.

    $ TRAINING_DIR=/fsx/users/my-user/fsdp $ git clone https://github.com/aws-samples/awsome-distributed-training/
  2. Eseguire lo script create_conda_env.sh. Questo crea un conda ambiente sul tuo file system Amazon FSx. Assicurati che il file system sia accessibile a tutti i nodi del cluster.

  3. Crea l'ambiente virtuale Conda avviando uno slurm job a nodo singolo come segue.

    $ srun -N 1 /path_to/create_conda_env.sh
  4. Dopo aver creato l'ambiente, puoi avviare un processo di formazione indicando il percorso dell'ambiente sul volume condiviso. È possibile avviare processi di formazione sia a nodo singolo che a più nodi con la stessa configurazione. Per avviare un job, create uno script Job Launcher (chiamato anche script di entry point) come segue.

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

    Se si desidera rendere il processo di formazione più resistente ai guasti hardware utilizzando la funzionalità di ripristino automatico di SageMaker HyperPod, è necessario impostare correttamente la variabile di ambiente MASTER_ADDR nello script entrypoint. Per ulteriori informazioni, consulta Ripresa automatica.

    Questo tutorial presuppone che questo script sia salvato come. /fsx/users/my_user/train.sh

  5. Con questo script nel volume condiviso in/fsx/users/my_user/train.sh, esegui il srun comando seguente per pianificare il job Slurm.

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