

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.

# HyperPod Tutoriel de pré-entraînement sur le cluster Slurm (GPU)
<a name="hyperpod-gpu-slurm-pretrain-tutorial"></a>

Le didacticiel suivant permet de configurer l’environnement Slurm et de démarrer une tâche d’entraînement sur un modèle Llama de 8 milliards de paramètres.

**Conditions préalables**  
Avant de commencer à configurer votre environnement pour exécuter la recette, assurez-vous d’avoir :  
Configurez un HyperPod cluster GPU Slurm.  
Votre cluster HyperPod Slurm doit avoir Nvidia Enroot et Pyxis activés (ils sont activés par défaut).
Un emplacement de stockage partagé. Il peut s'agir d'un système de FSx fichiers Amazon ou d'un système NFS accessible depuis les nœuds du cluster.
Des données dans l’un des formats suivants :  
JSON
JSONGZ (JSON compressé)
ARROW
(Facultatif) Vous devez obtenir un HuggingFace jeton si vous utilisez les poids du modèle à des HuggingFace fins de pré-entraînement ou de réglage. Pour plus d’informations sur l’obtention du jeton, consultez [User access tokens](https://huggingface.co/docs/hub/en/security-tokens).

## HyperPod Configuration de l'environnement GPU Slurm
<a name="hyperpod-gpu-slurm-environment-setup"></a>

Pour lancer une tâche d'entraînement sur un cluster HyperPod GPU Slurm, procédez comme suit :

1. Accédez par SSH au nœud principal de votre cluster Slurm.

1. Une fois connecté, configurez l’environnement virtuel. Assurez-vous d’utiliser Python 3.9 ou version supérieure.

   ```
   #set up a virtual environment
   python3 -m venv ${PWD}/venv
   source venv/bin/activate
   ```

1. Clonez les référentiels de SageMaker HyperPod recettes et d' SageMaker HyperPod adaptateurs sur un emplacement de stockage partagé.

   ```
   git clone https://github.com/aws/sagemaker-hyperpod-training-adapter-for-nemo.git
   git clone --recursive https://github.com/aws/sagemaker-hyperpod-recipes.git
   cd sagemaker-hyperpod-recipes
   pip3 install -r requirements.txt
   ```

1. Créez un fichier squash à l’aide d’Enroot. Pour trouver la dernière version du conteneur SMP, consultez [Notes de mise à jour pour la bibliothèque de parallélisme des SageMaker modèles](model-parallel-release-notes.md). Pour mieux comprendre comment utiliser le fichier Enroot, voir l'image [AWS Nemo-Launcher optimisée pour Build](https://github.com/aws-samples/awsome-distributed-training/tree/main/3.test_cases/2.nemo-launcher#2-build-aws-optimized-nemo-launcher-image).

   ```
   REGION="{{<region>}}"
   IMAGE="658645717510.dkr.ecr.${{{REGION}}}.amazonaws.com/smdistributed-modelparallel:2.4.1-gpu-py311-cu121"
   aws ecr get-login-password --region ${{{REGION}}} | docker login --username AWS --password-stdin 658645717510.dkr.ecr.${{{REGION}}}.amazonaws.com
   enroot import -o $PWD/smdistributed-modelparallel.sqsh dockerd://${IMAGE}
   mv $PWD/smdistributed-modelparallel.sqsh "/fsx/{{<any-path-in-the-shared-filesystem>}}"
   ```

1. Pour utiliser le fichier squash Enroot pour commencer l’entraînement, utilisez l’exemple suivant pour modifier le fichier `recipes_collection/config.yaml`.

   ```
   container: /fsx/path/to/your/smdistributed-modelparallel.sqsh
   ```

## Lancement de la tâche d’entraînement
<a name="hyperpod-gpu-slurm-launch-training-job"></a>

Après avoir installé les dépendances, démarrez une tâche d’entraînement à partir du répertoire `sagemaker-hyperpod-recipes/launcher_scripts`. Vous obtenez les dépendances en clonant le [référentiel de SageMaker HyperPod recettes](https://github.com/aws/sagemaker-hyperpod-recipes) :

Choisissez d’abord votre recette d’entraînement sur Github, le nom du modèle est spécifié dans le cadre de la recette. Dans l’exemple suivant, nous utilisons le script `launcher_scripts/llama/run_hf_llama3_8b_seq16k_gpu_p5x16_pretrain.sh` pour lancer une recette de pré-entraînement de type Llama 8b d’une longueur de séquence de 8192, `llama/hf_llama3_8b_seq16k_gpu_p5x16_pretrain`.
+ `IMAGE` : le conteneur de la section de configuration de l’environnement.
+ (Facultatif) Vous pouvez fournir le HuggingFace jeton si vous avez besoin de poids préentraînés HuggingFace en définissant la paire clé-valeur suivante :

  ```
  recipes.model.hf_access_token={{<your_hf_token>}}
  ```

```
#!/bin/bash
IMAGE="${YOUR_IMAGE}"
SAGEMAKER_TRAINING_LAUNCHER_DIR="${SAGEMAKER_TRAINING_LAUNCHER_DIR:-${PWD}}"

TRAIN_DIR="${YOUR_TRAIN_DIR}" # Location of training dataset
VAL_DIR="${YOUR_VAL_DIR}" # Location of validation dataset

# experiment ouput directory
EXP_DIR="${YOUR_EXP_DIR}"

HYDRA_FULL_ERROR=1 python3 "${SAGEMAKER_TRAINING_LAUNCHER_DIR}/main.py" \
  recipes=training/llama/hf_llama3_8b_seq16k_gpu_p5x16_pretrain \
  base_results_dir="${SAGEMAKER_TRAINING_LAUNCHER_DIR}/results" \
  recipes.run.name="hf_llama3_8b" \
  recipes.exp_manager.exp_dir="$EXP_DIR" \
  recipes.model.data.train_dir="$TRAIN_DIR" \
  recipes.model.data.val_dir="$VAL_DIR" \
  container="${IMAGE}" \
  +cluster.container_mounts.0="/fsx:/fsx"
```

Après avoir configuré tous les paramètres requis dans le script du lanceur, vous pouvez exécuter le script à l’aide de la commande suivante.

```
bash launcher_scripts/llama/run_hf_llama3_8b_seq16k_gpu_p5x16_pretrain.sh
```

Pour plus d’informations sur la configuration du cluster Slurm, consultez [Exécution d'une tâche de formation sur HyperPod Slurm](cluster-specific-configurations-run-training-job-hyperpod-slurm.md).