Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Tutorial de entrenamiento previo con clústeres de Kubernetes (GPU)
Hay dos formas de iniciar un trabajo de entrenamiento de GPU en un clúster de Kubernetes:
-
El NeMo lanzador de estilos
Requisitos previos
Antes de configurar el entorno, asegúrese de disponer de:
-
Un clúster HyperPod de Kubernetes con GPU está configurado correctamente.
-
Una ubicación de almacenamiento compartida. Puede ser un sistema de FSx archivos Amazon o un sistema NFS al que se pueda acceder desde los nodos del clúster.
-
Datos en uno de los siguientes formatos:
-
JSON
-
JSONGZ (JSON comprimido)
-
ARROW
-
-
(Opcional) Debes obtener un HuggingFace token si utilizas las pesas del modelo para el entrenamiento previo o HuggingFace para realizar ajustes. Para obtener más información sobre cómo obtener el token, consulte User access tokens
.
Configuración del entorno de GPU Kubernetes
Para configurar un entorno de GPU Kubernetes, haga lo siguiente:
-
Configure el entorno virtual. Asegúrese de utilizar Python 3.9 o posterior.
python3 -m venv ${PWD}/venv source venv/bin/activate -
Instale las dependencias siguiendo uno de estos métodos:
-
(Recomendado): método de herramienta de línea de HyperPod comandos
: # install HyperPod command line tools git clone https://github.com/aws/sagemaker-hyperpod-cli cd sagemaker-hyperpod-cli pip3 install . -
SageMaker HyperPod método de recetas:
# install SageMaker HyperPod Recipes. git clone --recursive git@github.com:aws/sagemaker-hyperpod-recipes.git cd sagemaker-hyperpod-recipes pip3 install -r requirements.txt
-
-
Conéctese con su clúster de Kubernetes.
aws eks update-kubeconfig --region "CLUSTER_REGION" --name "CLUSTER_NAME" hyperpod connect-cluster --cluster-name "CLUSTER_NAME" [--region "CLUSTER_REGION"] [--namespace <namespace>]
Inicie el trabajo de formación con la SageMaker HyperPod CLI
Recomendamos utilizar la herramienta de interfaz SageMaker HyperPod de línea de comandos (CLI) para enviar el trabajo de formación con las configuraciones. En el siguiente ejemplo, se envía un trabajo de entrenamiento para el modelo hf_llama3_8b_seq16k_gpu_p5x16_pretrain.
-
your_training_container: es un contenedor de aprendizaje profundo. Para buscar la versión más reciente del contenedor de SMP, consulte Notas de la versión de la biblioteca de paralelismo de modelos de SageMaker. -
(Opcional) Puedes proporcionar el HuggingFace token si necesitas pesas previamente entrenadas HuggingFace configurando el siguiente par clave-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" }'
Después de enviar un trabajo de entrenamiento, puede usar el siguiente comando para comprobar si lo ha enviado correctamente.
kubectl get pods NAME READY STATUS RESTARTS AGE hf-llama3-<your-alias>-worker-0 0/1 running 0 36s
Si el STATUS es PENDING o ContainerCreating, ejecute el siguiente comando para obtener más información.
kubectl describe podname_of_pod
Cuando el STATUS del trabajo cambie a Running, podrá examinar el registro con el siguiente comando.
kubectl logsname_of_pod
El STATUS cambia a Completed si ejecuta kubectl
get pods.
Lanzamiento del trabajo de entrenamiento con el lanzador de fórmulas
Como alternativa, puedes usar las SageMaker HyperPod recetas para enviar tu trabajo de entrenamiento. Usar fórmulas implica actualizar k8s.yaml, config.yaml y ejecutar el script de lanzamiento.
-
En
k8s.yaml, actualicepersistent_volume_claims. Monta la FSx reclamación de Amazon en el/datadirectorio de cada módulo de computaciónpersistent_volume_claims: - claimName: fsx-claim mountPath: data -
En
config.yaml, actualicerepo_url_or_pathengit.git: repo_url_or_path:<training_adapter_repo>branch: null commit: null entry_script: null token: null -
Actualice
launcher_scripts/llama/run_hf_llama3_8b_seq16k_gpu_p5x16_pretrain.sh.-
your_contrainer: es un contenedor de aprendizaje profundo. Para buscar la versión más reciente del contenedor de SMP, consulte Notas de la versión de la biblioteca de paralelismo de modelos de SageMaker. -
(Opcional) Puede proporcionar el HuggingFace token si necesita pesos previamente entrenados HuggingFace configurando el siguiente par clave-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 -
-
Lanzamiento del trabajo de entrenamiento
bash launcher_scripts/llama/run_hf_llama3_8b_seq16k_gpu_p5x16_pretrain.sh
Después de enviar el trabajo de entrenamiento, puede usar el siguiente comando para comprobar si lo ha enviado correctamente.
kubectl get pods
NAME READY STATUS RESTARTS AGE hf-llama3-<your-alias>-worker-0 0/1 running 0 36s
Si el STATUS es PENDING o ContainerCreating, ejecute el siguiente comando para obtener más información.
kubectl describe pod<name-of-pod>
Cuando el STATUS del trabajo cambie a Running, podrá examinar el registro con el siguiente comando.
kubectl logsname_of_pod
El STATUS pasará a Completed cuando ejecute kubectl get pods.
Para obtener más información acerca de la configuración del clúster k8s, consulte ¿Estás realizando un trabajo de entrenamiento en k8s HyperPod .