Tutorial de formación previa sobre clústeres de Kubernetes (GPU) - Amazon SageMaker AI

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:

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
  • Configure kubectl y eksctl

  • Instalación de Helm

  • 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

  • Enk8s.yaml, actualizarpersistent_volume_claims. Monta la FSx reclamación de Amazon en el /data directorio de cada módulo de computación

    persistent_volume_claims: - claimName: fsx-claim mountPath: data
  • Enconfig.yaml, actualice repo_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

STATUSSe 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