Tutorial di preaddestramento sul cluster HyperPod Slurm (GPU)
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:
-
Un cluster HyperPod GPU Slurm configurato.
-
Il cluster HyperPod Slurm deve avere Nvidia Enroot e Pyxis abilitati (questi sono abilitati per impostazione predefinita).
-
-
Una posizione di archiviazione condivisa. Può essere un file system Amazon FSx 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 token HuggingFace se utilizzi i pesi del modello di HuggingFace per il preaddestramento o il fine-tuning. Per ulteriori informazioni su come ottenere il token, consulta User access tokens
.
Configurazione dell’ambiente Slurm con GPU HyperPod
Per avviare un job di addestramento su un cluster HyperPod GPU 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 ricette SageMaker HyperPod e i repository degli adattatori SageMaker HyperPod 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 -
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 comprendere meglio come utilizzare il file Enroot, consulta 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
Dopo aver installato le dipendenze, avvia un job di addestramento dalla directory sagemaker-hyperpod-recipes/launcher_scripts. Puoi ottenere le dipendenze clonando il repository delle ricette SageMaker HyperPod
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 preaddestrati da HuggingFace, puoi fornire il token HuggingFace impostando la coppia chiave-valore seguente:
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 job di addestramento in HyperPod Slurm.