

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Tutorial de pré-treinamento de clusters do Kubernetes no Trainium
<a name="sagemaker-hyperpod-trainium-kubernetes-cluster-pretrain-tutorial"></a>

É possível usar um dos métodos a seguir para iniciar uma tarefa de treinamento em um cluster do Kubernetes no Trainium.
+ Ferramenta de linha de [HyperPod comando](https://github.com/aws/sagemaker-hyperpod-cli) (recomendada)
+ O lançador NeMo de estilo

**Pré-requisitos**  
Antes de começar a configurar seu ambiente, você deve:  
Configurar um cluster HyperPod Trainium Kubernetes
Um local de armazenamento compartilhado pode ser um sistema de arquivos do Amazon FSx ou um sistema do NFS acessível por meio dos nós do cluster.
Ter dados em um dos seguintes formatos:  
JSON
JSONGZ (JSON compactado)
ARROW
(Opcional) Você deve receber uma HuggingFace ficha se estiver usando os pesos do modelo HuggingFace para pré-treinamento ou ajuste fino. Para ter mais informações sobre como obter o token, consulte [User access tokens](https://huggingface.co/docs/hub/en/security-tokens).

## Configurar um ambiente do Kubernetes no Trainium
<a name="sagemaker-hyperpod-trainium-setup-trainium-kubernetes-environment"></a>

Para configurar o ambiente do Kubernetes no Trainium, faça o seguinte:

1. Conclua as etapas do seguinte tutorial: [HuggingFace Llama3-8B Pré-treinamento](https://awsdocs-neuron.readthedocs-hosted.com/en/latest/libraries/nxd-training/tutorials/hf_llama3_8B_pretraining.html#download-the-dataset) a partir de **Baixar o conjunto** de dados. 

1. Prepare uma configuração do modelo. Os modelos estão disponíveis no repositório do Neuron. Para este tutorial, use a configuração do modelo llama3 8b.

1. Configuração do ambiente virtual. Você deve usar o Python 3.9 ou posterior.

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

1. Instale as dependências.
   + (Recomendado) Use a seguinte ferramenta de HyperPod linha de comando

     ```
     # install HyperPod command line tools
     git clone https://github.com/aws/sagemaker-hyperpod-cli
     cd sagemaker-hyperpod-cli
     pip3 install .
     ```
   + Se você estiver usando SageMaker HyperPod receitas, especifique o seguinte

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

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

1. Conecte-se ao cluster do Kubernetes.

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

1. Contêiner: o [contêiner do Neuron](https://github.com/aws-neuron/deep-learning-containers?tab=readme-ov-file#pytorch-training-neuronx)

## Inicie o trabalho de treinamento com a SageMaker HyperPod CLI
<a name="sagemaker-hyperpod-trainium-launch-training-job-cli"></a>

Recomendamos usar a ferramenta de interface SageMaker HyperPod de linha de comando (CLI) para enviar seu trabalho de treinamento com suas configurações. O exemplo a seguir envia uma tarefa de treinamento ao modelo `hf_llama3_8b_seq8k_trn1x4_pretrain` do Trainium.
+ `your_neuron_container`: o [contêiner do Neuron](https://github.com/aws-neuron/deep-learning-containers?tab=readme-ov-file#pytorch-training-neuronx).
+ `your_model_config`: a configuração do modelo na seção de configuração do ambiente.
+ (Opcional) Você pode fornecer o HuggingFace token se precisar de pesos pré-treinados HuggingFace definindo o seguinte par de valores-chave:

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

Depois de enviar uma tarefa de treinamento, você pode usar o comando a seguir para verificar se a enviou com êxito.

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

Se o `STATUS` for `PENDING` ou `ContainerCreating`, execute o comando a seguir para obter mais detalhes.

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

Depois que o `STATUS` da tarefa mudar para `Running`, você poderá examinar o log usando o comando a seguir.

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

O `STATUS` mudará para `Completed` quando você executar `kubectl get pods`.

## Iniciar a tarefa de treinamento com o inicializador de fórmulas
<a name="sagemaker-hyperpod-trainium-launch-training-job-recipes"></a>

Como alternativa, use SageMaker HyperPod receitas para enviar seu trabalho de treinamento. Para enviar a tarefa de treinamento usando uma fórmula, atualize `k8s.yaml` e `config.yaml`. Execute o script Bash do modelo para iniciá-lo.
+ No `k8s.yaml`, atualize persistent\_volume\_claims para montar a declaração Amazon FSx no diretório /data nos nós de computação.

  ```
  persistent_volume_claims:
    - claimName: fsx-claim
      mountPath: data
  ```
+ Atualize launcher\_scripts/llama o /run\_hf\_llama3\_8b\_seq8k\_trn1x4\_pretrain.sh
  + `your_neuron_contrainer`: o contêiner da seção de configuração do ambiente.
  + `your_model_config`: a configuração do modelo na seção de configuração do ambiente.

  (Opcional) Você pode fornecer o HuggingFace token se precisar de pesos pré-treinados HuggingFace definindo o seguinte par de valores-chave:

  ```
  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
  ```
+ Iniciar a tarefa

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

Depois de enviar uma tarefa de treinamento, você pode usar o comando a seguir para verificar se a enviou com êxito.

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

Se o `STATUS` estiver como `PENDING` ou `ContainerCreating`, execute o comando a seguir para obter mais detalhes.

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

Depois que o STATUS da tarefa mudar para Running, você poderá examinar o log usando o comando a seguir.

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

O `STATUS` mudará para `Completed` quando você executar `kubectl get pods`.

Para ter mais informações sobre a configuração de clusters do K8s, consulte [Tutorial de pré-treinamento de clusters do Kubernetes no Trainium](#sagemaker-hyperpod-trainium-kubernetes-cluster-pretrain-tutorial).