

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 con clústeres de Kubernetes (GPU)
<a name="sagemaker-hyperpod-gpu-kubernetes-cluster-pretrain-tutorial"></a>

Hay dos formas de iniciar un trabajo de entrenamiento de GPU en un clúster 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:  
Un clúster HyperPod de Kubernetes con GPU está configurado correctamente.
Una ubicación de almacenamiento compartida. Puede ser un sistema de FSx archivos Amazon 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 HuggingFace para realizar ajustes. 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 GPU Kubernetes
<a name="sagemaker-hyperpod-gpu-kubernetes-environment-setup"></a>

Para configurar un entorno de GPU Kubernetes, haga lo siguiente:
+ Configure el entorno virtual. Asegúrese de utilizar Python 3.9 o posterior.

  ```
  python3 -m venv ${PWD}/venv
  source venv/bin/activate
  ```
+ Instale las dependencias siguiendo uno de estos métodos:
  + (Recomendado): método de herramienta de línea de [HyperPod comandos](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étodo de recetas:

    ```
    # install SageMaker HyperPod Recipes.
    git clone --recursive git@github.com:aws/sagemaker-hyperpod-recipes.git
    cd sagemaker-hyperpod-recipes
    pip3 install -r requirements.txt
    ```
+ [Configure kubectl y eksctl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html).
+ [Instale Helm](https://helm.sh/docs/intro/install/).
+ 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>]
  ```

## Inicie el trabajo de formación con la SageMaker HyperPod CLI
<a name="sagemaker-hyperpod-gpu-kubernetes-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_seq16k_gpu_p5x16_pretrain`.
+ `your_training_container`: es un contenedor de aprendizaje profundo. Para buscar la versión más reciente del contenedor de SMP, consulte [Notas de publicación de la biblioteca de paralelismo de SageMaker modelos](model-parallel-release-notes.md).
+ (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_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"
}'
```

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` cambia a `Completed` si ejecuta `kubectl get pods`.

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

Como alternativa, puedes usar las SageMaker HyperPod recetas para enviar tu trabajo de entrenamiento. Usar fórmulas implica actualizar `k8s.yaml`, `config.yaml` y ejecutar el script de lanzamiento.
+ En `k8s.yaml`, actualice `persistent_volume_claims`. Coloca la FSx reclamación de Amazon en el `/data` directorio de cada módulo de computación

  ```
  persistent_volume_claims:
    - claimName: fsx-claim
      mountPath: data
  ```
+ En `config.yaml`, actualice `repo_url_or_path` en `git`.

  ```
  git:
    repo_url_or_path: <training_adapter_repo>
    branch: null
    commit: null
    entry_script: null
    token: null
  ```
+ Actualice `launcher_scripts/llama/run_hf_llama3_8b_seq16k_gpu_p5x16_pretrain.sh`.
  + `your_contrainer`: es un contenedor de aprendizaje profundo. Para buscar la versión más reciente del contenedor de SMP, consulte [Notas de publicación de la biblioteca de paralelismo de SageMaker modelos](model-parallel-release-notes.md).
  + (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 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
  ```
+ Lanzamiento del trabajo de entrenamiento

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

Después de enviar el 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 [¿Estás realizando un trabajo de entrenamiento en k8s HyperPod](cluster-specific-configurations-run-training-job-hyperpod-k8s.md).