

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Tutorial di preaddestramento sul cluster Kubernetes (GPU)
<a name="sagemaker-hyperpod-gpu-kubernetes-cluster-pretrain-tutorial"></a>

Esistono due modi per avviare un job di addestramento in un cluster GPU Kubernetes:
+ [Strumento da riga di comando (consigliato) HyperPod ](https://github.com/aws/sagemaker-hyperpod-cli)
+ Il programma di avvio degli stili NeMo 

**Prerequisiti**  
Prima di iniziare a configurare l’ambiente, assicurati di avere:  
Un cluster HyperPod GPU Kubernetes è configurato correttamente.
Una posizione di archiviazione condivisa. Può essere un FSx file system Amazon o un sistema NFS accessibile dai nodi del cluster.
I dati in uno dei seguenti formati:  
JSON
JSONGZ (JSON compresso)
ARROW
(Facoltativo) È necessario ottenere un HuggingFace token se si utilizzano i pesi del modello HuggingFace per il pre-allenamento o la messa a punto. Per ulteriori informazioni su come ottenere il token, consulta [User access tokens](https://huggingface.co/docs/hub/en/security-tokens).

## Configurazione dell’ambiente GPU Kubernetes
<a name="sagemaker-hyperpod-gpu-kubernetes-environment-setup"></a>

Per configurare un ambiente GPU Kubernetes, procedi come descritto di seguito:
+ Configura l’ambiente virtuale. Assicurati di utilizzare Python 3.9 o versioni successive.

  ```
  python3 -m venv ${PWD}/venv
  source venv/bin/activate
  ```
+ Installa le dipendenze utilizzando uno dei metodi seguenti:
  + [(Consigliato): metodo dello strumento a riga di comando: HyperPod ](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 metodo delle ricette:

    ```
    # install SageMaker HyperPod Recipes.
    git clone --recursive git@github.com:aws/sagemaker-hyperpod-recipes.git
    cd sagemaker-hyperpod-recipes
    pip3 install -r requirements.txt
    ```
+ [Configura kubectl ed eksctl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html).
+ [Installa Helm](https://helm.sh/docs/intro/install/).
+ Connettiti al cluster Kubernetes.

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

## Avvia il processo di formazione con la SageMaker HyperPod CLI
<a name="sagemaker-hyperpod-gpu-kubernetes-launch-training-job-cli"></a>

Ti consigliamo di utilizzare lo strumento dell'interfaccia SageMaker HyperPod a riga di comando (CLI) per inviare il tuo lavoro di formazione con le tue configurazioni. L’esempio seguente invia un job di addestramento per il modello `hf_llama3_8b_seq16k_gpu_p5x16_pretrain`.
+ `your_training_container`: un container per il Deep Learning. Per trovare il rilascio più recente del container SMP, consulta [Note di rilascio per la libreria di parallelismo dei SageMaker modelli](model-parallel-release-notes.md).
+ (Facoltativo) Se hai bisogno di pesi già addestrati, puoi fornire il HuggingFace token HuggingFace impostando la seguente coppia chiave-valore:

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

Dopo aver inviato un job di addestramento, puoi utilizzare il comando seguente per verificare se l’invio è riuscito.

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

Se `STATUS` è `PENDING` o `ContainerCreating`, utilizza il comando seguente per ottenere maggiori dettagli.

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

Quando lo `STATUS` del processo diventa `Running`, puoi esaminare il log utilizzando il comando seguente.

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

`STATUS` diventa `Completed` quando esegui `kubectl get pods`.

## Avvio del job di addestramento con l’utilità di avvio delle ricette
<a name="sagemaker-hyperpod-gpu-kubernetes-launch-training-job-recipes"></a>

In alternativa, puoi utilizzare le SageMaker HyperPod ricette per inviare il tuo lavoro di formazione. Per utilizzare le ricette, devi aggiornare `k8s.yaml` e `config.yaml` ed eseguire lo script di avvio.
+ In `k8s.yaml`, aggiorna `persistent_volume_claims`. Monta il FSx claim Amazon `/data` nella directory di ogni pod di elaborazione

  ```
  persistent_volume_claims:
    - claimName: fsx-claim
      mountPath: data
  ```
+ In `config.yaml`, aggiorna `repo_url_or_path` sotto `git`.

  ```
  git:
    repo_url_or_path: {{<training_adapter_repo>}}
    branch: null
    commit: null
    entry_script: null
    token: null
  ```
+ Aggiornamento di `launcher_scripts/llama/run_hf_llama3_8b_seq16k_gpu_p5x16_pretrain.sh`
  + `your_contrainer`: un container per il Deep Learning. Per trovare il rilascio più recente del container SMP, consulta [Note di rilascio per la libreria di parallelismo dei SageMaker modelli](model-parallel-release-notes.md).
  + (Facoltativo) Se hai bisogno di pesi già addestrati, puoi fornire il HuggingFace token HuggingFace impostando la seguente coppia chiave-valore:

    ```
    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
  ```
+ Avvio del job di addestramento

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

Dopo aver inviato il job di addestramento, puoi utilizzare il comando seguente per verificare se l’invio è riuscito.

```
kubectl get pods
```

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

Se `STATUS` è `PENDING` o `ContainerCreating`, utilizza il comando seguente per ottenere maggiori dettagli.

```
kubectl describe pod <name-of-pod>
```

Quando lo `STATUS` del processo diventa `Running`, puoi esaminare il log utilizzando il comando seguente.

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

`STATUS` diventa `Completed` quando esegui `kubectl get pods`.

Per ulteriori informazioni sulla connessione al cluster k8s, consulta [Esecuzione di un processo di formazione su k8s HyperPod](cluster-specific-configurations-run-training-job-hyperpod-k8s.md).