

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à.

# HyperPod Tutorial Slurm Cluster Left-LoRa (GPU)
<a name="hyperpod-gpu-slurm-peft-lora-tutorial"></a>

Il tutorial seguente configura l’ambiente Slurm e avvia un processo di fine-tuning efficiente in termini di parametri (PEFT) su un modello Llama da 8 miliardi di parametri.

**Prerequisiti**  
Prima di iniziare a configurare l’ambiente, assicurati di avere:  
Configura il HyperPod cluster GPU Slurm  
Il tuo cluster HyperPod Slurm deve avere Nvidia Enroot e Pyxis abilitati (questi sono abilitati di default).
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) Se ti servono i pesi preallenati di HuggingFace o se stai allenando un modello Llama 3.2, devi procurarti il HuggingFace token prima di iniziare l'allenamento. Per ulteriori informazioni su come ottenere il token, consulta [User access tokens](https://huggingface.co/docs/hub/en/security-tokens).

## Configura l'ambiente GPU Slurm HyperPod
<a name="hyperpod-gpu-slurm-peft-lora-setup-hyperpod-gpu-slurm-environment"></a>

Per avviare un job di addestramento su un cluster Slurm, procedi come descritto di seguito:
+ SSH nel nodo head del cluster Slurm.
+ Dopo aver effettuato l’accesso, configura l’ambiente virtuale. Assicurati di utilizzare Python 3.9 o versioni successive.

  ```
  #set up a virtual environment
  python3 -m venv ${PWD}/venv
  source venv/bin/activate
  ```
+ Clona le SageMaker HyperPod ricette e gli archivi degli SageMaker HyperPod adattatori in una posizione di archiviazione condivisa. La posizione di archiviazione condivisa può essere un FSx file system Amazon o un sistema NFS accessibile dai nodi del cluster.

  ```
  git clone https://github.com/aws/sagemaker-hyperpod-training-adapter-for-nemo.git
  git clone --recursive https://github.com/aws/sagemaker-hyperpod-recipes.git
  cd sagemaker-hyperpod-recipes
  pip3 install -r requirements.txt
  ```
+ Crea un file squash utilizzando Enroot. 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). Per ulteriori informazioni sull'utilizzo del file Enroot, consulta l'immagine [AWS Nemo-Launcher ottimizzata per Build](https://github.com/aws-samples/awsome-distributed-training/tree/main/3.test_cases/2.nemo-launcher#2-build-aws-optimized-nemo-launcher-image).

  ```
  REGION="{{<region>}}"
  IMAGE="658645717510.dkr.ecr.${REGION}.amazonaws.com/smdistributed-modelparallel:2.4.1-gpu-py311-cu121"
  aws ecr get-login-password --region ${REGION} | docker login --username AWS --password-stdin 658645717510.dkr.ecr.${REGION}.amazonaws.com
  enroot import -o $PWD/smdistributed-modelparallel.sqsh dockerd://${IMAGE}
  mv $PWD/smdistributed-modelparallel.sqsh "/fsx/{{<any-path-in-the-shared-filesystem>}}"
  ```
+ Per utilizzare il file squash Enroot per iniziare l’addestramento, consulta l’esempio seguente per modificare il file `recipes_collection/config.yaml`.

  ```
  container: /fsx/path/to/your/smdistributed-modelparallel.sqsh
  ```

## Avvio del job di addestramento
<a name="hyperpod-gpu-slurm-peft-lora-launch-training-job"></a>

Per avviare un processo PEFT per il modello Llama da 8 miliardi di parametri con una lunghezza di sequenza di 8192 su un singolo nodo di calcolo Slurm, imposta lo script di avvio `launcher_scripts/llama/run_hf_llama3_8b_seq8k_gpu_lora.sh` su quanto segue:
+ `IMAGE`: il container della sezione di configurazione dell’ambiente.
+ `HF_MODEL_NAME_OR_PATH`: definisci il nome o il percorso dei pesi preaddestrati nel parametro hf\_model\_name\_or\_path della ricetta.
+ (Facoltativo) Se hai bisogno di pesi già addestrati, puoi fornire il HuggingFace token impostando la seguente coppia chiave-valore: HuggingFace 

  ```
  recipes.model.hf_access_token=${{{HF_ACCESS_TOKEN}}}
  ```

```
#!/bin/bash
IMAGE="${YOUR_IMAGE}"
SAGEMAKER_TRAINING_LAUNCHER_DIR="${SAGEMAKER_TRAINING_LAUNCHER_DIR:-${PWD}}"

TRAIN_DIR="${YOUR_TRAIN_DIR}" # Location of training dataset
VAL_DIR="${YOUR_VAL_DIR}" # Location of validation dataset

# experiment output directory
EXP_DIR="${{{YOUR_EXP_DIR}}}"
HF_ACCESS_TOKEN="${{{YOUR_HF_TOKEN}}}"
HF_MODEL_NAME_OR_PATH="${{{YOUR_HF_MODEL_NAME_OR_PATH}}}"

# Add hf_model_name_or_path and turn off synthetic_data
HYDRA_FULL_ERROR=1 python3 ${SAGEMAKER_TRAINING_LAUNCHER_DIR}/main.py \
    recipes=fine-tuning/llama/hf_llama3_8b_seq8k_gpu_lora \
    base_results_dir=${SAGEMAKER_TRAINING_LAUNCHER_DIR}/results \
    recipes.run.name="hf_llama3_lora" \
    recipes.exp_manager.exp_dir="$EXP_DIR" \
    recipes.model.data.train_dir="$TRAIN_DIR" \
    recipes.model.data.val_dir="$VAL_DIR" \
    recipes.model.hf_model_name_or_path="$HF_MODEL_NAME_OR_PATH" \
    container="${IMAGE}" \
    +cluster.container_mounts.0="/fsx:/fsx" \
    recipes.model.hf_access_token="${HF_ACCESS_TOKEN}"
```

Dopo aver configurato tutti i parametri richiesti nello script precedente, puoi eseguire il job di addestramento.

```
bash launcher_scripts/llama/run_hf_llama3_8b_seq8k_gpu_lora.sh
```

Per ulteriori informazioni sulla configurazione del cluster Slurm, consulta [Esecuzione di un lavoro di formazione su HyperPod Slurm](cluster-specific-configurations-run-training-job-hyperpod-slurm.md).