

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.

# Didacticiel de pré-entraînement sur le cluster Trainium Kubernetes
<a name="sagemaker-hyperpod-trainium-kubernetes-cluster-pretrain-tutorial"></a>

Vous pouvez utiliser l’une des méthodes suivantes pour démarrer une tâche d’entraînement dans un cluster Trainium Kubernetes.
+ outil de ligne de [HyperPod commande](https://github.com/aws/sagemaker-hyperpod-cli) (recommandé)
+ Le lanceur NeMo de style

**Conditions préalables**  
Avant de commencer à configurer votre environnement, assurez-vous d’avoir :  
Configuration d'un cluster HyperPod Trainium Kubernetes
Un emplacement de stockage partagé qui peut être un système de FSx fichiers Amazon ou 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).

## Configuration de votre environnement Trainium Kubernetes
<a name="sagemaker-hyperpod-trainium-setup-trainium-kubernetes-environment"></a>

Pour configurer l’environnement Trainium Kubernetes, procédez comme suit :

1. **Suivez les étapes du didacticiel suivant : [HuggingFace Llama3-8B Pretraining](https://awsdocs-neuron.readthedocs-hosted.com/en/latest/libraries/nxd-training/tutorials/hf_llama3_8B_pretraining.html#download-the-dataset) en commençant par Télécharger le jeu de données.** 

1. Préparez une configuration de modèle. Elle est disponible dans le référentiel Neuron. Pour ce didacticiel, vous pouvez utiliser la configuration du modèle llama3 8b.

1. Configuration de l’environnement virtuel. Assurez-vous d’utiliser Python 3.9 ou version supérieure.

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

1. Installez les dépendances.
   + (Recommandé) Utilisez l'outil de ligne de HyperPod commande suivant

     ```
     # install HyperPod command line tools
     git clone https://github.com/aws/sagemaker-hyperpod-cli
     cd sagemaker-hyperpod-cli
     pip3 install .
     ```
   + Si vous utilisez des SageMaker HyperPod recettes, spécifiez les éléments suivants

     ```
     # 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. [Configurez 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}"
   hyperpod connect-cluster --cluster-name "${CLUSTER_NAME}" [--region "${CLUSTER_REGION}"] [--namespace <namespace>]
   ```

1. Conteneur : le [conteneur Neuron](https://github.com/aws-neuron/deep-learning-containers?tab=readme-ov-file#pytorch-training-neuronx)

## Lancez le job de formation avec la SageMaker HyperPod CLI
<a name="sagemaker-hyperpod-trainium-launch-training-job-cli"></a>

Nous vous recommandons d'utiliser l'outil d'interface de SageMaker HyperPod ligne de commande (CLI) pour soumettre votre tâche de formation avec vos configurations. L’exemple suivant soumet une tâche d’entraînement pour le modèle `hf_llama3_8b_seq8k_trn1x4_pretrain` Trainium.
+ `your_neuron_container` : le [conteneur Neuron](https://github.com/aws-neuron/deep-learning-containers?tab=readme-ov-file#pytorch-training-neuronx).
+ `your_model_config` : la configuration de modèle provenant 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>"
  ```

```
hyperpod start-job --recipe training/llama/hf_llama3_8b_seq8k_trn1x4_pretrain \
--persistent-volume-claims fsx-claim:data \
--override-parameters \
'{
 "cluster": "k8s",
 "cluster_type": "k8s",
 "container": "<your_neuron_contrainer>",
 "recipes.run.name": "hf-llama3",
 "recipes.run.compile": 0,
 "recipes.model.model_config": "<your_model_config>",
 "instance_type": "trn1.32xlarge",
 "recipes.data.train_dir": "<your_train_data_dir>"
}'
```

Après avoir soumis une 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
hf-llama3-<your-alias>-worker-0   0/1     running         0               36s
```

Si `STATUS` a pour valeur `PENDING` ou `ContainerCreating`, exécutez la commande suivante pour obtenir plus de détails.

```
kubectl describe pod name_of_pod
```

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
```

`STATUS` devient `Completed` lorsque vous exécutez `kubectl get pods`.

## Lancement de la tâche d’entraînement avec le lanceur de recettes
<a name="sagemaker-hyperpod-trainium-launch-training-job-recipes"></a>

Vous pouvez également utiliser SageMaker HyperPod des recettes pour soumettre votre offre de formation. Pour soumettre la tâche d’entraînement à l’aide d’une recette, mettez à jour `k8s.yaml` et `config.yaml`. Exécutez le script bash du modèle pour le lancer.
+ Dans`k8s.yaml`, mettez à jour persistent\$1volume\$1claims pour monter la FSx réclamation Amazon dans le répertoire /data des nœuds de calcul

  ```
  persistent_volume_claims:
    - claimName: fsx-claim
      mountPath: data
  ```
+ Mettre à jour launcher\$1 \$1hf\$1llama3\$18b\$1seq8k\$1trn1x4\$1pretrain.sh scripts/llama/run
  + `your_neuron_contrainer` : le conteneur de la section de configuration de l’environnement.
  + `your_model_config` : la configuration de modèle provenant 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
  #Users should set up their cluster type in /recipes_collection/config.yaml
  IMAGE="<your_neuron_contrainer>"
  MODEL_CONFIG="<your_model_config>"
  SAGEMAKER_TRAINING_LAUNCHER_DIR=${SAGEMAKER_TRAINING_LAUNCHER_DIR:-"$(pwd)"}
  TRAIN_DIR="<your_training_data_dir>" # Location of training dataset
  VAL_DIR="<your_val_data_dir>" # Location of talidation dataset
  
  HYDRA_FULL_ERROR=1 python3 "${SAGEMAKER_TRAINING_LAUNCHER_DIR}/main.py" \
    recipes=training/llama/hf_llama3_8b_seq8k_trn1x4_pretrain \
    base_results_dir="${SAGEMAKER_TRAINING_LAUNCHER_DIR}/results" \
    recipes.run.name="hf-llama3-8b" \
    instance_type=trn1.32xlarge \
    recipes.model.model_config="$MODEL_CONFIG" \
    cluster=k8s \
    cluster_type=k8s \
    container="${IMAGE}" \
    recipes.data.train_dir=$TRAIN_DIR \
    recipes.data.val_dir=$VAL_DIR
  ```
+ Lancez la tâche.

  ```
  bash launcher_scripts/llama/run_hf_llama3_8b_seq8k_trn1x4_pretrain.sh
  ```

Après avoir soumis une 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
hf-llama3-<your-alias>-worker-0   0/1     running         0               36s
```

Si `STATUS` a pour valeur `PENDING` ou `ContainerCreating`, exécutez la commande suivante pour obtenir plus de détails.

```
kubectl describe pod name_of_pod
```

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
```

`STATUS` devient `Completed` lorsque vous exécutez `kubectl get pods`.

Pour plus d’informations sur la configuration du cluster k8s, consultez [Didacticiel de pré-entraînement sur le cluster Trainium Kubernetes](#sagemaker-hyperpod-trainium-kubernetes-cluster-pretrain-tutorial).