

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 Trainium Kubernetes
<a name="sagemaker-hyperpod-trainium-kubernetes-cluster-pretrain-tutorial"></a>

Puoi utilizzare uno dei metodi seguenti per avviare un job di addestramento in un cluster Trainium 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:  
Configura un cluster HyperPod Trainium Kubernetes
Una posizione di archiviazione condivisa che 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 Trainium Kubernetes
<a name="sagemaker-hyperpod-trainium-setup-trainium-kubernetes-environment"></a>

Per configurare l’ambiente Trainium Kubernetes, procedi come descritto di seguito:

1. **Completa i passaggi del seguente tutorial: [HuggingFace Llama3-8B](https://awsdocs-neuron.readthedocs-hosted.com/en/latest/libraries/nxd-training/tutorials/hf_llama3_8B_pretraining.html#download-the-dataset) Pretraining a partire da Scarica il set di dati.** 

1. Prepara una configurazione del modello. Sono disponibili nel repository Neuron. Per questo tutorial, puoi utilizzare la configurazione del modello llama3 8b.

1. Configura l’ambiente virtuale. Assicurati di utilizzare Python 3.9 o versioni successive.

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

1. Installazione delle dipendenze
   + (Consigliato) Utilizza il seguente strumento da riga di comando HyperPod 

     ```
     # install HyperPod command line tools
     git clone https://github.com/aws/sagemaker-hyperpod-cli
     cd sagemaker-hyperpod-cli
     pip3 install .
     ```
   + Se utilizzi SageMaker HyperPod ricette, specifica quanto segue

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

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

1. 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>]
   ```

1. Container: il [container Neuron](https://github.com/aws-neuron/deep-learning-containers?tab=readme-ov-file#pytorch-training-neuronx)

## Avvia il processo di formazione con la SageMaker HyperPod CLI
<a name="sagemaker-hyperpod-trainium-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 Trainium `hf_llama3_8b_seq8k_trn1x4_pretrain`.
+ `your_neuron_container`: il [container Neuron](https://github.com/aws-neuron/deep-learning-containers?tab=readme-ov-file#pytorch-training-neuronx).
+ `your_model_config`: la configurazione del modello dalla sezione di configurazione dell’ambiente.
+ (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_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>"
}'
```

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-trainium-launch-training-job-recipes"></a>

In alternativa, utilizza le SageMaker HyperPod ricette per inviare il tuo lavoro di formazione. Per inviare il job di addestramento utilizzando una ricetta, aggiorna `k8s.yaml` e `config.yaml`. Esegui lo script bash per il modello per avviarlo.
+ In`k8s.yaml`, aggiorna persistent\$1volume\$1claims per montare il claim FSx Amazon nella directory /data nei nodi di calcolo

  ```
  persistent_volume_claims:
    - claimName: fsx-claim
      mountPath: data
  ```
+ scripts/llama/runAggiorna launcher\$1 \$1hf\$1llama3\$18b\$1seq8k\$1trn1x4\$1pretrain.sh
  + `your_neuron_contrainer`: il container della sezione di configurazione dell’ambiente
  + `your_model_config`: la configurazione del modello dalla sezione di configurazione dell’ambiente

  (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 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
  ```
+ Avvia il processo.

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

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 lo `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 [Tutorial di preaddestramento sul cluster Trainium Kubernetes](#sagemaker-hyperpod-trainium-kubernetes-cluster-pretrain-tutorial).