

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

Há duas maneiras de iniciar uma tarefa de treinamento em um cluster de GPU do Kubernetes:
+ 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:  
Um cluster de HyperPod GPU Kubernetes está configurado corretamente.
Ter 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).

## Configuração do ambiente de GPU do Kubernetes
<a name="sagemaker-hyperpod-gpu-kubernetes-environment-setup"></a>

Para configurar um ambiente de GPU do Kubernetes, faça o seguinte:
+ Configure um ambiente virtual. Você deve usar o Python 3.9 ou posterior.

  ```
  python3 -m venv ${PWD}/venv
  source venv/bin/activate
  ```
+ Instale as dependências usando um dos seguintes métodos:
  + (Recomendado): método de [ferramenta HyperPod de linha de comando](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 receitas:

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

## Inicie o trabalho de treinamento com a SageMaker HyperPod CLI
<a name="sagemaker-hyperpod-gpu-kubernetes-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_seq16k_gpu_p5x16_pretrain`.
+ `your_training_container`: contêiner de deep learning. Para encontrar a versão mais recente do contêiner da SMP, consulte[Notas de lançamento da biblioteca de SageMaker paralelismo de modelos](model-parallel-release-notes.md).
+ (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_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"
}'
```

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` muda para `Completed` quando você executa `kubectl get pods`.

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

Como alternativa, você pode usar as SageMaker HyperPod receitas para enviar seu trabalho de treinamento. Para usar as fórmulas, é necessário atualizar o `k8s.yaml` e o `config.yaml` e utilizar o script de execução.
+ No `k8s.yaml`, atualize `persistent_volume_claims`. Ele monta a declaração do Amazon FSx no diretório `/data` de cada pod de computação

  ```
  persistent_volume_claims:
    - claimName: fsx-claim
      mountPath: data
  ```
+ No `config.yaml`, atualize `repo_url_or_path` em `git`.

  ```
  git:
    repo_url_or_path: {{<training_adapter_repo>}}
    branch: null
    commit: null
    entry_script: null
    token: null
  ```
+ Atualizar as `launcher_scripts/llama/run_hf_llama3_8b_seq16k_gpu_p5x16_pretrain.sh`
  + `your_contrainer`: contêiner de deep learning. Para encontrar a versão mais recente do contêiner da SMP, consulte[Notas de lançamento da biblioteca de SageMaker paralelismo de modelos](model-parallel-release-notes.md).
  + (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 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
  ```
+ Iniciar a tarefa de treinamento

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

Depois de enviar a 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`.

Para ter mais informações sobre a configuração de clusters do K8s, consulte [Executando um trabalho de treinamento no HyperPod k8s](cluster-specific-configurations-run-training-job-hyperpod-k8s.md).