

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 di pre-formazione sul cluster Slurm (GPU)
Preaddestramento GPU con cluster Slurm

Il tutorial seguente configura l’ambiente Slurm e avvia un job di addestramento su un modello Llama da 8 miliardi di parametri.

**Prerequisiti**  
Prima di iniziare a configurare l’ambiente per eseguire la ricetta, assicurati di avere:  
Configura un cluster GPU Slurm HyperPod .  
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) È 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).

## HyperPod Configurazione dell'ambiente GPU Slurm


Per avviare un processo di formazione su un cluster HyperPod GPU Slurm, procedi come segue:

1. SSH nel nodo head del cluster Slurm.

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

1. Clona le SageMaker HyperPod ricette e gli archivi degli SageMaker HyperPod adattatori in una posizione di archiviazione condivisa.

   ```
   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
   ```

1. 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 una comprensione più approfondita di come utilizzare il 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>"
   ```

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


Dopo aver installato le dipendenze, avvia un job di addestramento dalla directory `sagemaker-hyperpod-recipes/launcher_scripts`. [Ottieni le dipendenze clonando l'archivio delle ricette: SageMaker HyperPod ](https://github.com/aws/sagemaker-hyperpod-recipes)

Prima di tutto, scegli la tua ricetta di addestramento da GitHub. Il nome del modello viene specificato come parte della ricetta. Nell’esempio seguente utilizziamo lo script `launcher_scripts/llama/run_hf_llama3_8b_seq16k_gpu_p5x16_pretrain.sh` per avviare `llama/hf_llama3_8b_seq16k_gpu_p5x16_pretrain`, una ricetta di preaddestramento Llama 8b con lunghezza della sequenza 8192.
+ `IMAGE`: il container della 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
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 ouput directory
EXP_DIR="${YOUR_EXP_DIR}"

HYDRA_FULL_ERROR=1 python3 "${SAGEMAKER_TRAINING_LAUNCHER_DIR}/main.py" \
  recipes=training/llama/hf_llama3_8b_seq16k_gpu_p5x16_pretrain \
  base_results_dir="${SAGEMAKER_TRAINING_LAUNCHER_DIR}/results" \
  recipes.run.name="hf_llama3_8b" \
  recipes.exp_manager.exp_dir="$EXP_DIR" \
  recipes.model.data.train_dir="$TRAIN_DIR" \
  recipes.model.data.val_dir="$VAL_DIR" \
  container="${IMAGE}" \
  +cluster.container_mounts.0="/fsx:/fsx"
```

Dopo aver configurato tutti i parametri richiesti nello script di avvio, puoi eseguire lo script con questo comando.

```
bash launcher_scripts/llama/run_hf_llama3_8b_seq16k_gpu_p5x16_pretrain.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).