

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.

# Tutoriels - Amazon SageMaker HyperPod Checkpointless Pretraining Llama 3 70b
<a name="sagemaker-eks-checkpointless-recipes-pretraining-llama3"></a>

La séquence d'étapes suivante est requise pour exécuter des recettes d'entraînement sans point de contrôle sur. HyperPod

## Conditions préalables
<a name="sagemaker-eks-checkpointless-recipes-pretraining-llama3-prereqs"></a>

Avant de commencer à configurer votre environnement, assurez-vous d’avoir :
+ [Support Amazon EKS activé sur Amazon SageMaker HyperPod](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-hyperpod-eks-prerequisites.html)
+ [Configuration de l'opérateur HyperPod de formation (v1.2\+)](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-eks-operator.html)
+ Un emplacement de stockage partagé. Il peut s’agir d’un système de fichiers Amazon FSx 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
+ [Choisissez une recette d'entraînement sans point de contrôle compatible pour Llama 70B ou GPT-OSS 120B à la source.](https://github.com/aws/sagemaker-hyperpod-recipes/tree/main/recipes_collection)
+ [Téléchargez les poids du modèle Hugging Face](https://huggingface.co/docs/hub/models-downloading) et convertissez-le au format compatible avec [Nemo.](https://docs.nvidia.com/nemo-framework/user-guide/latest/nemo-2.0/features/hf-integration.html#importing-from-hugging-face)
+ Configurez votre environnement

## Configuration de l'environnement Kubernetes
<a name="sagemaker-eks-checkpointless-recipes-pretraining-llama3-kubernetes"></a>

Pour configurer votre environnement Kubernetes, procédez comme suit :

1. Configurez l’environnement virtuel. Assurez-vous que vous utilisez un Python supérieur ou égal à 3.10 et inférieur à 3.14.

   ```
   python3 -m venv ${PWD}/venv
   source venv/bin/activate
   ```

1. [Configurer kubectl et eksctl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html)

1. [Installez Helm](https://helm.sh/docs/intro/install/)

1. Connectez-vous à votre cluster Kubernetes.

   ```
   aws eks update-kubeconfig --region "${CLUSTER_REGION}" --name "${CLUSTER_NAME}"
   ```

1. Installez les dépendances en utilisant l’une des méthodes suivantes :

   1. Méthode 1 : méthode SageMaker HyperPod des recettes :

      ```
      # install SageMaker HyperPod Recipes.
      git clone --recursive git@github.com:aws/sagemaker-hyperpod-recipes.git
      cd sagemaker-hyperpod-recipes
      pip3 install -r requirements.txt
      ```

   1. Méthode 2 : kubectl avec la méthode yaml de travail prédéfinie

      ```
      # install SageMaker HyperPod checkpointless training.
      git clone git@github.com:aws/sagemaker-hyperpod-checkpointless-training.git
      cd sagemaker-hyperpod-checkpointless-training
      ```

Vous pouvez désormais lancer la recette d'entraînement sans point de contrôle à l'aide du NeMo-style lanceur ou de kubectl.

## Méthode 1 : Lancer la tâche de formation avec le lanceur de recettes
<a name="sagemaker-eks-checkpointless-recipes-pretraining-llama3-recipes-launcher"></a>

Vous pouvez également utiliser les SageMaker HyperPod recettes pour soumettre votre offre de formation. L'utilisation des recettes implique la mise à jour de k8s.yaml, config.yaml et l'exécution du script de lancement.

1. Mettre à jour `launcher_scripts/llama/run_checkpointless_llama3_70b_pretrain.sh`

   Un conteneur de Deep Learning. Pour trouver la version la plus récente du conteneur de formation Checkpointless, consultez les notes de version de [Checkpointless](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-eks-checkpointless-release-notes.html) Training.

   ```
   #!/bin/bash
   
   SAGEMAKER_TRAINING_LAUNCHER_DIR=${SAGEMAKER_TRAINING_LAUNCHER_DIR:-"$(pwd)"}
   TRAIN_DIR="${TRAIN_DIR}"
   VAL_DIR="${VAL_DIR}"
   EXP_DIR="${EXP_DIR}"
   LOG_DIR="${LOG_DIR}"
   CONTAINER_MOUNT="/data"
   CONTAINER="${CONTAINER}"
   
   HYDRA_FULL_ERROR=1 python3 "${SAGEMAKER_TRAINING_LAUNCHER_DIR}/main.py" \
       recipes=training/llama/checkpointless_llama3_70b_pretrain \
       recipes.dataset.dataset_path="${TRAIN_DIR}" \
       recipes.exp_manager.exp_dir="${EXP_DIR}" \
       recipes.log_dir="${LOG_DIR}" \
       recipes.data.global_batch_size=16 \
       recipes.data.micro_batch_size=4 \
       base_results_dir="${SAGEMAKER_TRAINING_LAUNCHER_DIR}/results" \
       git.use_default=false \
       cluster=k8s \
       cluster_type=k8s \
       container="${CONTAINER}" \
       +cluster.hostNetwork=true \
       +cluster.persistent_volume_claims.0.claimName=fsx-claim \
       +cluster.persistent_volume_claims.0.mountPath="${CONTAINER_MOUNT}" \
       +recipes.dataset.val_dataset_path="${VAL_DIR}" \
       ++recipes.callbacks.3.test_fault_config.fault_prob_between_lock=1 \
   ```

1. Lancement de la tâche d’entraînement

   ```
   bash launcher_scripts/llama/run_checkpointless_llama3_70b_pretrain.sh
   ```

1. Une fois que vous avez soumis la tâche d’entraînement, vous pouvez utiliser la commande suivante pour vérifier si vous l’avez soumise avec succès.

   ```
   kubectl get pods
   
   NAME                             READY   STATUS             RESTARTS        AGE
   llama-3-70b-worker-0             0/1    running               0            36s
   ```

1. Si le STATUS est en attente ContainerCreating, ou exécutez la commande suivante pour obtenir plus de détails

   ```
   kubectl describe pod {{<name of pod>}}
   ```

1. Une fois que l’élément STATUS de la tâche a pris la valeur Running, vous pouvez examiner le journal à l’aide de la commande suivante.

   ```
   kubectl logs <name of pod>
   ```

   Le STATUS deviendra Terminé lorsque vous exécuterez kubectl get pods

## Méthode 2 : Lancer la tâche de formation avec kubectl avec yaml prédéfini
<a name="sagemaker-eks-checkpointless-recipes-pretraining-llama3-kubectl"></a>

Une autre option consiste à lancer la formation via kubectl avec un job yaml prédéfini.

1. Mettre à jour le `examples/llama3/launch/pretrain_llama3_70b_checkpointless_p5.yaml`
   + `image` : conteneur Deep Learning. Pour trouver la version la plus récente du conteneur de formation Checkpointless, consultez les notes de version de [Checkpointless](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-eks-checkpointless-release-notes.html) Training.
   + `resume.restore_config.path=<path_to_pretrained_weights>`: le chemin vers les poids des modèles préentraînés téléchargés au format Nemo dans l'étape [Prérequis](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-eks-checkpointless-recipes-finetune.html#sagemaker-eks-checkpointless-recipes-finetune-prereqs).
   + `dataset.dataset_path=<path_to_dataset>`: chemin d'accès à l'ensemble de données stocké dans le stockage partagé

1. Soumettez le job en utilisant kubectl avec `pretrain_llama3_70b_checkpointless_p5.yaml`

   ```
   kubectl apply -f examples/llama3/launch/pretrain_llama3_70b_checkpointless_p5.yaml
   ```

1. Une fois que vous avez soumis la tâche d’entraînement, vous pouvez utiliser la commande suivante pour vérifier si vous l’avez soumise avec succès.

   ```
   kubectl get pods
   
   NAME                                             READY   STATUS             RESTARTS        AGE
   llama3-pretrain-checkpointless-worker-0             0/1    running               0            36s
   ```

1. Si le STATUS est en attente ContainerCreating, ou exécutez la commande suivante pour obtenir plus de détails

   ```
   kubectl describe pod <name of pod>
   ```

1. Une fois que l’élément STATUS de la tâche a pris la valeur Running, vous pouvez examiner le journal à l’aide de la commande suivante.

   ```
   kubectl logs <name of pod>
   ```

   Le STATUS deviendra Terminé lorsque vous exécuterez kubectl get pods