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 formación previa sobre clústeres de Kubernetes (GPU)
Hay dos formas de iniciar un trabajo de formación en un clúster de Kubernetes con GPU:
-
El NeMo lanzador de estilos
Requisitos previos
Antes de empezar a configurar el entorno, asegúrese de tener:
-
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)
-
FLECHA
-
-
(Opcional) Debes obtener una HuggingFace ficha si utilizas las pesas del modelo para el entrenamiento previo o HuggingFace para ajustarlas con precisión. Para obtener más información sobre cómo obtener el token, consulta Tokens de acceso de usuario
.
Configuración del entorno de Kubernetes de GPU
Para configurar un entorno de Kubernetes con GPU, haga lo siguiente:
-
Configure el entorno virtual. Asegúrese de utilizar Python 3.9 o superior.
python3 -m venv ${PWD}/venv source venv/bin/activate
-
Instala las dependencias mediante uno de los siguientes métodos:
-
(Recomendado): método de herramienta de HyperPod línea de 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 a 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 formación para el modelo. hf_llama3_8b_seq16k_gpu_p5x16_pretrain
-
your_training_container
: un contenedor de aprendizaje profundo. Para encontrar la versión más reciente del contenedor SMP, consulteNotas de publicación de la biblioteca de paralelismo de SageMaker modelos. -
(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" }'
Una vez que hayas enviado un trabajo de formación, puedes usar el siguiente comando para comprobar si lo has enviado correctamente.
kubectl get pods NAME READY STATUS RESTARTS AGE hf-llama3-<your-alias>-worker-0 0/1 running 0 36s
Si STATUS
es PENDING
oContainerCreating
, ejecuta el siguiente comando para obtener más información.
kubectl describe pod
name_of_pod
Una vez que el trabajo STATUS
cambie aRunning
, puede examinar el registro mediante el siguiente comando.
kubectl logs
name_of_pod
Se STATUS
convierte en Completed
cuando correskubectl
get pods
.
Inicia el trabajo de entrenamiento con el lanzador de recetas
Como alternativa, puede utilizar las SageMaker HyperPod recetas para enviar su trabajo de formación. El uso de las recetas implica actualizar k8s.yaml
y ejecutar el script de lanzamiento. config.yaml
-
En
k8s.yaml
, actualizarpersistent_volume_claims
. Monta la FSx reclamación de Amazon en el/data
directorio de cada módulo de computaciónpersistent_volume_claims: - claimName: fsx-claim mountPath: data
-
En
config.yaml
, actualicerepo_url_or_path
engit
.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
: Un contenedor de aprendizaje profundo. Para encontrar la versión más reciente del contenedor SMP, consulteNotas de publicación de la biblioteca de paralelismo de SageMaker modelos. -
(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>
#!/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 -
-
Lanza el trabajo de formación
bash launcher_scripts/llama/run_hf_llama3_8b_seq16k_gpu_p5x16_pretrain.sh
Una vez que haya enviado el trabajo de formación, puede utilizar 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 STATUS
es PENDING
oContainerCreating
, ejecute el siguiente comando para obtener más detalles.
kubectl describe pod
<name-of-pod>
Una vez que el trabajo STATUS
cambie aRunning
, puede examinar el registro mediante el siguiente comando.
kubectl logs
name_of_pod
STATUS
Se convertirá en Completed
cuando corraskubectl get pods
.
Para obtener más información sobre la configuración del clúster k8s, consulte. ¿Ejecutando un trabajo de entrenamiento en k8s HyperPod