Tutorial de pré-treinamento de clusters do Slurm no HyperPod (GPU)
O tutorial a seguir configura o ambiente do Slurm e inicia uma tarefa de treinamento em um modelo Llama com 8 bilhões de parâmetros.
Pré-requisitos
Antes de começar a configurar seu ambiente para executar a fórmula, você deve:
-
Configurar um cluster de GPU do Slurm no HyperPod.
-
O cluster do Slurm no HyperPod deve ter o NVIDIA Enroot e o Pyxis habilitados (eles estão habilitados por padrão).
-
-
Ter um local de armazenamento compartilhado. Pode ser um sistema de arquivos do Amazon FSx ou um sistema do NFS acessível por meio dos nós do cluster.
-
Ter dados em um dos seguintes formatos:
-
JSON
-
JSONGZ (JSON compactado)
-
ARROW
-
-
(Opcional) Você deve obter um token do HuggingFace se estiver usando os pesos do modelo do HuggingFace para pré-treinamento ou ajuste fino. Para ter mais informações sobre como obter o token, consulte User access tokens
.
Configuração do ambiente de GPU do Slurm no HyperPod
Para iniciar uma tarefa de treinamento em um cluster de GPU do Slurm no HyperPod, faça o seguinte:
-
Use SSH no nó cabeça do cluster.
-
Depois de fazer login, configure o ambiente Neuron. Você deve usar o Python 3.9 ou posterior.
#set up a virtual environment python3 -m venv ${PWD}/venv source venv/bin/activate -
Clone as fórmulas do SageMaker HyperPod e os repositórios do adaptador do SageMaker HyperPod em um local de armazenamento compartilhado.
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 -
Crie um arquivo squash usando o Enroot. Para encontrar a versão mais recente do contêiner da SMP, consulteNotas de lançamento da biblioteca de paralelismo de modelos do SageMaker. Para compreender melhor como usar o arquivo Enroot, consulte 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>" -
Para usar o arquivo squash do Enroot para iniciar o treinamento, use o exemplo a seguir para modificar o arquivo
recipes_collection/config.yaml.container: /fsx/path/to/your/smdistributed-modelparallel.sqsh
Iniciar a tarefa de treinamento
Depois de instalar as dependências, inicie uma tarefa de treinamento no diretório sagemaker-hyperpod-recipes/launcher_scripts. Você obtém as dependências clonando o repositório de fórmulas do SageMaker HyperPod
Primeiro, escolha sua fórmula de treinamento no GitHub. O nome do modelo é especificado como parte da fórmula. Usamos o script launcher_scripts/llama/run_hf_llama3_8b_seq16k_gpu_p5x16_pretrain.sh para executar o Llama 8b usando uma fórmula de pré-treinamento com um tamanho de sequência de 8.192, llama/hf_llama3_8b_seq16k_gpu_p5x16_pretrain, no exemplo a seguir.
-
IMAGE: o contêiner da seção de configuração do ambiente. -
(Opcional) Você pode fornecer o token do HuggingFace se precisar de pesos pré-treinados do HuggingFace definindo o seguinte par de chave-valor:
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"
Depois de configurar todos os parâmetros necessários no script de execução, você pode executar o script usando o comando a seguir.
bash launcher_scripts/llama/run_hf_llama3_8b_seq16k_gpu_p5x16_pretrain.sh
Para ter mais informações sobre como configurar um cluster do Slurm, consulte Executar uma tarefa de treinamento do Slurm no HyperPod.