

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Tutorial de entrenamiento previo del clúster Trainium de Kubernetes
<a name="sagemaker-hyperpod-trainium-kubernetes-cluster-pretrain-tutorial"></a>

Puede utilizar uno de los métodos siguientes para lanzar un trabajo de entrenamiento en un clúster Trainium de Kubernetes.
+ [Herramienta de línea de comandos (recomendada) HyperPod ](https://github.com/aws/sagemaker-hyperpod-cli)
+ El NeMo lanzador de estilos

**Requisitos previos**  
Antes de configurar el entorno, asegúrese de disponer de:  
Configura un clúster de HyperPod Trainium Kubernetes
Una ubicación de almacenamiento compartido que puede ser un sistema de archivos de Amazon FSx o un sistema NFS al que se pueda acceder desde los nodos del clúster.
Datos en uno de los siguientes formatos:  
JSON
JSONGZ (JSON comprimido)
ARROW
(Opcional) Debes obtener un HuggingFace token si utilizas las pesas del modelo para el entrenamiento previo o para ajustarlas con precisión. HuggingFace Para obtener más información sobre cómo obtener el token, consulte [User access tokens](https://huggingface.co/docs/hub/en/security-tokens).

## Configuración del entorno de Trainium Kubernetes
<a name="sagemaker-hyperpod-trainium-setup-trainium-kubernetes-environment"></a>

Para configurar un entorno de Trainium Kubernetes, haga lo siguiente:

1. **Complete los pasos del siguiente tutorial: [HuggingFace Llama3-8B Entrenamiento previo](https://awsdocs-neuron.readthedocs-hosted.com/en/latest/libraries/nxd-training/tutorials/hf_llama3_8B_pretraining.html#download-the-dataset) a partir de Descargar el conjunto de datos.** 

1. Prepare la configuración de un modelo. Están disponibles en el repositorio de Neuron. Para este tutorial, puede utilizar la configuración del modelo llama3 8b.

1. Configure el entorno virtual. Asegúrese de utilizar Python 3.9 o posterior.

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

1. Instale las dependencias.
   + (Recomendado) Usa la siguiente herramienta de línea de HyperPod comandos

     ```
     # install HyperPod command line tools
     git clone https://github.com/aws/sagemaker-hyperpod-cli
     cd sagemaker-hyperpod-cli
     pip3 install .
     ```
   + Si usa SageMaker HyperPod recetas, especifique lo siguiente

     ```
     # 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. [Configure kubectl y eksctl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html).

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

1. Conéctese con su clúster de Kubernetes.

   ```
   aws eks update-kubeconfig --region "${CLUSTER_REGION}" --name "${CLUSTER_NAME}"
   hyperpod connect-cluster --cluster-name "${CLUSTER_NAME}" [--region "${CLUSTER_REGION}"] [--namespace <namespace>]
   ```

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

## Inicie el trabajo de formación con la SageMaker HyperPod CLI
<a name="sagemaker-hyperpod-trainium-launch-training-job-cli"></a>

Recomendamos utilizar la herramienta de interfaz SageMaker HyperPod de línea de comandos (CLI) para enviar el trabajo de formación con las configuraciones. En el siguiente ejemplo, se envía un trabajo de entrenamiento para el modelo `hf_llama3_8b_seq8k_trn1x4_pretrain` de Trainium.
+ `your_neuron_container`: es el [Neuron container](https://github.com/aws-neuron/deep-learning-containers?tab=readme-ov-file#pytorch-training-neuronx).
+ `your_model_config`: es el modelo de configuración de la sección de configuración del entorno.
+ (Opcional) Puedes proporcionar el HuggingFace token si necesitas pesas previamente entrenadas HuggingFace configurando el siguiente par clave-valor:

  ```
  "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>}}"
}'
```

Después de enviar un trabajo de entrenamiento, puede usar el siguiente comando para comprobar si lo ha enviado correctamente.

```
kubectl get pods
NAME                              READY   STATUS             RESTARTS        AGE
hf-llama3-<your-alias>-worker-0   0/1     running         0               36s
```

Si el `STATUS` es `PENDING` o `ContainerCreating`, ejecute el siguiente comando para obtener más información.

```
kubectl describe pod {{name_of_pod}}
```

Cuando el `STATUS` del trabajo cambie a `Running`, podrá examinar el registro con el siguiente comando.

```
kubectl logs {{name_of_pod}}
```

El `STATUS` pasará a `Completed` cuando ejecute `kubectl get pods`.

## Lanzamiento del trabajo de entrenamiento con el lanzador de fórmulas
<a name="sagemaker-hyperpod-trainium-launch-training-job-recipes"></a>

También puedes usar SageMaker HyperPod recetas para enviar tu trabajo de entrenamiento. Para enviar el trabajo de entrenamiento con una fórmula, actualice `k8s.yaml` y `config.yaml`. Ejecute el script de bash para que el modelo lo lance.
+ En `k8s.yaml`, actualice persistent\_volume\_claims para montar la reclamación de Amazon FSx en el directorio /data de los nodos de computación.

  ```
  persistent_volume_claims:
    - claimName: fsx-claim
      mountPath: data
  ```
+ Actualice launcher\_scripts/llama /run\_hf\_llama3\_8b\_seq8k\_trn1x4\_pretrain.sh
  + `your_neuron_contrainer`: es el contenedor de la sección de configuración del entorno.
  + `your_model_config`: es el modelo de configuración de la sección de configuración del entorno.

  (Opcional) Puede proporcionar el HuggingFace token si necesita pesos previamente entrenados HuggingFace configurando el siguiente par clave-valor:

  ```
  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
  ```
+ Lance el trabajo.

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

Después de enviar un trabajo de entrenamiento, puede usar el siguiente comando para comprobar si lo ha enviado correctamente.

```
kubectl get pods
NAME                             READY   STATUS             RESTARTS        AGE
hf-llama3-<your-alias>-worker-0   0/1     running         0               36s
```

Si el `STATUS` es `PENDING` o `ContainerCreating`, ejecute el siguiente comando para obtener más información.

```
kubectl describe pod {{name_of_pod}}
```

Cuando el STATUS del trabajo cambie a Running, podrá examinar el registro con el siguiente comando.

```
kubectl logs {{name_of_pod}}
```

El `STATUS` pasará a `Completed` cuando ejecute `kubectl get pods`.

Para obtener más información acerca de la configuración del clúster k8s, consulte [Tutorial de entrenamiento previo del clúster Trainium de Kubernetes](#sagemaker-hyperpod-trainium-kubernetes-cluster-pretrain-tutorial).