

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 FSx arquivos Amazon ou um sistema NFS acessível a partir 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 FSx reivindicação da Amazon no `/data` diretório 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).