

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 des clusters Kubernetes (GPU)
<a name="sagemaker-hyperpod-gpu-kubernetes-cluster-pretrain-tutorial"></a>

Il existe deux manières de lancer une tâche d’entraînement dans un cluster Kubernetes de GPU :
+ 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 :  
Un cluster HyperPod GPU Kubernetes est correctement configuré.
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).

## Configuration de l’environnement Kubernetes de GPU
<a name="sagemaker-hyperpod-gpu-kubernetes-environment-setup"></a>

Pour configurer un environnement Kubernetes de GPU, procédez comme suit :
+ Configurez l’environnement virtuel. Assurez-vous d’utiliser Python 3.9 ou version supérieure.

  ```
  python3 -m venv ${PWD}/venv
  source venv/bin/activate
  ```
+ Installez les dépendances en utilisant l’une des méthodes suivantes :
  + (Recommandé) : méthode de l'[outil HyperPod en ligne de commande](https://github.com/aws/sagemaker-hyperpod-cli) :

    ```
    # install HyperPod command line tools
    git clone https://github.com/aws/sagemaker-hyperpod-cli
    cd sagemaker-hyperpod-cli
    pip3 install .
    ```
  + SageMaker HyperPod méthode 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
    ```
+ [Configurez kubectl et eksctl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html).
+ [Installez Helm](https://helm.sh/docs/intro/install/).
+ 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>]
  ```

## Lancez le job de formation avec la SageMaker HyperPod CLI
<a name="sagemaker-hyperpod-gpu-kubernetes-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_seq16k_gpu_p5x16_pretrain`.
+ `your_training_container` : conteneur Deep Learning. 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).
+ (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_seq16k_gpu_p5x16_pretrain \
--persistent-volume-claims fsx-claim:data \
--override-parameters \
'{
"recipes.run.name": "hf-llama3-8b",
"recipes.exp_manager.exp_dir": "/data/<your_exp_dir>",
"container": "658645717510.dkr.ecr.<region>.amazonaws.com/smdistributed-modelparallel:2.4.1-gpu-py311-cu121",
"recipes.model.data.train_dir": "<your_train_data_dir>",
"recipes.model.data.val_dir": "<your_val_data_dir>",
"cluster": "k8s",
"cluster_type": "k8s"
}'
```

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` prend la valeur `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-gpu-kubernetes-launch-training-job-recipes"></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` et de `config.yaml`, et l’exécution du script de lancement.
+ Dans `k8s.yaml`, mettez à jour `persistent_volume_claims`. Il place la FSx réclamation Amazon `/data` dans le répertoire de chaque module informatique

  ```
  persistent_volume_claims:
    - claimName: fsx-claim
      mountPath: data
  ```
+ Dans `config.yaml`, mettez à jour `repo_url_or_path` sous `git`.

  ```
  git:
    repo_url_or_path: <training_adapter_repo>
    branch: null
    commit: null
    entry_script: null
    token: null
  ```
+ Mettre à jour `launcher_scripts/llama/run_hf_llama3_8b_seq16k_gpu_p5x16_pretrain.sh`
  + `your_contrainer` : conteneur Deep Learning. 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).
  + (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 setup their cluster type in /recipes_collection/config.yaml
  REGION="<region>"
  IMAGE="658645717510.dkr.ecr.${REGION}.amazonaws.com/smdistributed-modelparallel:2.4.1-gpu-py311-cu121"
  SAGEMAKER_TRAINING_LAUNCHER_DIR=${SAGEMAKER_TRAINING_LAUNCHER_DIR:-"$(pwd)"}
  EXP_DIR="<your_exp_dir>" # Location to save experiment info including logging, checkpoints, ect
  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_gpu_p5x16_pretrain \
      base_results_dir="${SAGEMAKER_TRAINING_LAUNCHER_DIR}/results" \
      recipes.run.name="hf-llama3" \
      recipes.exp_manager.exp_dir="$EXP_DIR" \
      cluster=k8s \
      cluster_type=k8s \
      container="${IMAGE}" \
      recipes.model.data.train_dir=$TRAIN_DIR \
      recipes.model.data.val_dir=$VAL_DIR
  ```
+ Lancement de la tâche d’entraînement

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

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
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 [Exécution d'une tâche de formation sur HyperPod k8s](cluster-specific-configurations-run-training-job-hyperpod-k8s.md).