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 DPO (GPU)
Il tutorial seguente configura un ambiente Slurm e avvia un processo di ottimizzazione diretta delle preferenze (DPO) su un modello Llama da otto miliardi di parametri.
Prerequisiti
Prima di iniziare a configurare l’ambiente, assicurati di avere:
-
Configura il 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.
-
Un set di dati di preferenze binarie tokenizzato in uno dei formati seguenti:
-
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
.
Configura l'ambiente GPU Slurm HyperPod
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 della libreria SageMaker Model Parallelism.. Per ulteriori informazioni sull'utilizzo del file Enroot, consulta l'immagine AWSNemo-Launcher ottimizzata per Build
. 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
Per avviare un processo DPO 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_dpo.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}
Nota
Il modello di riferimento utilizzato per il DPO in questa configurazione deriva automaticamente dal modello di base in fase di addestramento (non viene definito in modo esplicito alcun modello di riferimento separato). Gli iperparametri specifici del DPO sono preconfigurati con i valori predefiniti seguenti:
-
beta: 0.1 (controlla l’intensità della regolarizzazione della divergenza KL) -
label_smoothing: 0.0 (nessun livellamento applicato alle etichette delle preferenze)
recipes.dpo.beta=${BETA} recipes.dpo.label_smoothing=${LABEL_SMOOTHING}
#!/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="${HF_MODEL_NAME_OR_PATH}" BETA="${BETA}" LABEL_SMOOTHING="${LABEL_SMOOTHING}" # 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_dpo \ base_results_dir=${SAGEMAKER_TRAINING_LAUNCHER_DIR}/results \ recipes.run.name="hf_llama3_dpo" \ 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}" \ recipes.dpo.enabled=true \ recipes.dpo.beta="${BETA}" \ recipes.dpo.label_smoothing="${LABEL_SMOOTHING}$" \
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_dpo.sh
Per ulteriori informazioni sulla configurazione del cluster Slurm, consulta Esecuzione di un lavoro di formazione su HyperPod Slurm.