Tutorial de pré-treinamento de clusters do Kubernetes (GPU)
Há duas maneiras de iniciar uma tarefa de treinamento em um cluster de GPU do Kubernetes:
-
(Recomendado) Ferramenta de linha de comandos do HyperPod
-
O inicializador do estilo NeMo
Pré-requisitos
Antes de começar a configurar seu ambiente, você deve:
-
Um cluster de GPU do Kubernetes no HyperPod está configurado corretamente.
-
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 Kubernetes
Para configurar um ambiente de GPU do Kubernetes, faça o seguinte:
-
Configure um ambiente virtual. Você deve usar o Python 3.9 ou posterior.
python3 -m venv ${PWD}/venv source venv/bin/activate -
Instale as dependências usando um dos seguintes métodos:
-
(Recomendado): Ferramenta de linha de comandos do HyperPod
# install HyperPod command line tools git clone https://github.com/aws/sagemaker-hyperpod-cli cd sagemaker-hyperpod-cli pip3 install . -
Método de fórmulas do SageMaker HyperPod:
# install SageMaker HyperPod Recipes. git clone --recursive git@github.com:aws/sagemaker-hyperpod-recipes.git cd sagemaker-hyperpod-recipes pip3 install -r requirements.txt
-
-
Conecte-se ao cluster do Kubernetes.
aws eks update-kubeconfig --region "CLUSTER_REGION" --name "CLUSTER_NAME" hyperpod connect-cluster --cluster-name "CLUSTER_NAME" [--region "CLUSTER_REGION"] [--namespace <namespace>]
Iniciar a tarefa de treinamento com a CLI do SageMaker HyperPod
Recomendamos usar a ferramenta de interface de linha de comandos (CLI) do SageMaker HyperPod para enviar sua tarefa de treinamento com suas configurações. O exemplo a seguir envia uma tarefa de treinamento ao modelo hf_llama3_8b_seq16k_gpu_p5x16_pretrain.
-
your_training_container: contêiner de deep learning. Para encontrar a versão mais recente do contêiner da SMP, consulteNotas de lançamento da biblioteca de paralelismo de modelos do SageMaker. -
(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>"
hyperpod start-job --recipe training/llama/hf_llama3_8b_seq16k_gpu_p5x16_pretrain \ --persistent-volume-claims fsx-claim:data \ --override-parameters \ '{ "recipes.run.name": "hf-llama3-8b", "recipes.exp_manager.exp_dir": "/data/<your_exp_dir>", "container": "658645717510.dkr.ecr.<region>.amazonaws.com/smdistributed-modelparallel:2.4.1-gpu-py311-cu121", "recipes.model.data.train_dir": "<your_train_data_dir>", "recipes.model.data.val_dir": "<your_val_data_dir>", "cluster": "k8s", "cluster_type": "k8s" }'
Depois de enviar uma tarefa de treinamento, você pode usar o comando a seguir para verificar se a enviou com êxito.
kubectl get pods NAME READY STATUS RESTARTS AGE hf-llama3-<your-alias>-worker-0 0/1 running 0 36s
Se o STATUS for PENDING ou ContainerCreating, execute o comando a seguir para obter mais detalhes.
kubectl describe podname_of_pod
Depois que o STATUS da tarefa mudar para Running, você poderá examinar o log usando o comando a seguir.
kubectl logsname_of_pod
O STATUS muda para Completed quando você executa kubectl
get pods.
Iniciar a tarefa de treinamento com o inicializador de fórmulas
Também é possível usar as fórmulas do SageMaker HyperPod para enviar tarefas de treinamento. Para usar as fórmulas, é necessário atualizar o k8s.yaml e o config.yaml e utilizar o script de execução.
-
No
k8s.yaml, atualizepersistent_volume_claims. Ele monta a declaração do Amazon FSx no diretório/datade cada pod de computaçãopersistent_volume_claims: - claimName: fsx-claim mountPath: data -
No
config.yaml, atualizerepo_url_or_pathemgit.git: repo_url_or_path:<training_adapter_repo>branch: null commit: null entry_script: null token: null -
Atualizar as
launcher_scripts/llama/run_hf_llama3_8b_seq16k_gpu_p5x16_pretrain.sh-
your_contrainer: contêiner de deep learning. Para encontrar a versão mais recente do contêiner da SMP, consulteNotas de lançamento da biblioteca de paralelismo de modelos do SageMaker. -
(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 #Users should setup their cluster type in /recipes_collection/config.yaml REGION="<region>" IMAGE="658645717510.dkr.ecr.${REGION}.amazonaws.com/smdistributed-modelparallel:2.4.1-gpu-py311-cu121" SAGEMAKER_TRAINING_LAUNCHER_DIR=${SAGEMAKER_TRAINING_LAUNCHER_DIR:-"$(pwd)"} EXP_DIR="<your_exp_dir>" # Location to save experiment info including logging, checkpoints, ect TRAIN_DIR="<your_training_data_dir>" # Location of training dataset VAL_DIR="<your_val_data_dir>" # Location of talidation dataset HYDRA_FULL_ERROR=1 python3 "${SAGEMAKER_TRAINING_LAUNCHER_DIR}/main.py" \ recipes=training/llama/hf_llama3_8b_seq8k_gpu_p5x16_pretrain \ base_results_dir="${SAGEMAKER_TRAINING_LAUNCHER_DIR}/results" \ recipes.run.name="hf-llama3" \ recipes.exp_manager.exp_dir="$EXP_DIR" \ cluster=k8s \ cluster_type=k8s \ container="${IMAGE}" \ recipes.model.data.train_dir=$TRAIN_DIR \ recipes.model.data.val_dir=$VAL_DIR -
-
Iniciar a tarefa de treinamento
bash launcher_scripts/llama/run_hf_llama3_8b_seq16k_gpu_p5x16_pretrain.sh
Depois de enviar a tarefa de treinamento, você pode usar o comando a seguir para verificar se a enviou com êxito.
kubectl get pods
NAME READY STATUS RESTARTS AGE hf-llama3-<your-alias>-worker-0 0/1 running 0 36s
Se o STATUS for PENDING ou ContainerCreating, execute o comando a seguir para obter mais detalhes.
kubectl describe pod<name-of-pod>
Depois que o STATUS da tarefa mudar para Running, você poderá examinar o log usando o comando a seguir.
kubectl logsname_of_pod
O STATUS mudará para Completed quando você executar kubectl get pods.
Para ter mais informações sobre a configuração de clusters do K8s, consulte Executar uma tarefa de treinamento do K8s no HyperPod.