Tutorial de entrenamiento previo del clúster Trainium de Kubernetes - 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 entrenamiento previo del clúster Trainium de Kubernetes

Puede utilizar uno de los métodos siguientes para lanzar un trabajo de entrenamiento en un clúster Trainium de Kubernetes.

Requisitos previos

Antes de configurar el entorno, asegúrese de disponer de:

  • Configura un clúster de HyperPod Trainium Kubernetes

  • Una ubicación de almacenamiento compartido que 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 vas a utilizar 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 Trainium Kubernetes

Para configurar un entorno de Trainium Kubernetes, haga lo siguiente:

  1. Complete los pasos del siguiente tutorial: Entrenamiento previo de HuggingFace Llama3-8B empezando por Descargar el conjunto de datos.

  2. Prepare la configuración de un modelo. Están disponibles en el repositorio de Neuron. Para este tutorial, puede utilizar la configuración del modelo llama3 8b.

  3. Configure el entorno virtual. Asegúrese de utilizar Python 3.9 o posterior.

    python3 -m venv ${PWD}/venv source venv/bin/activate
  4. Instale las dependencias.

    • (Recomendado) Utilice la siguiente herramienta de línea de comandos HyperPod

      # install HyperPod command line tools git clone https://github.com/aws/sagemaker-hyperpod-cli cd sagemaker-hyperpod-cli pip3 install .
    • Si usa SageMaker HyperPod recetas, especifique lo siguiente

      # install SageMaker HyperPod Recipes. git clone --recursive git@github.com:aws/sagemaker-hyperpod-recipes.git cd sagemaker-hyperpod-recipes pip3 install -r requirements.txt
  5. Configure kubectl y eksctl.

  6. Instale Helm.

  7. 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>]
  8. Contenedor: el Neuron container.

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_seq8k_trn1x4_pretrain de Trainium.

  • your_neuron_container: es el Neuron container.

  • your_model_config: es el modelo de configuración de la sección de configuración del entorno.

  • (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_seq8k_trn1x4_pretrain \ --persistent-volume-claims fsx-claim:data \ --override-parameters \ '{ "cluster": "k8s", "cluster_type": "k8s", "container": "<your_neuron_contrainer>", "recipes.run.name": "hf-llama3", "recipes.run.compile": 0, "recipes.model.model_config": "<your_model_config>", "instance_type": "trn1.32xlarge", "recipes.data.train_dir": "<your_train_data_dir>" }'

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 pod name_of_pod

Cuando el STATUS del trabajo cambie a Running, podrá examinar el registro con el siguiente comando.

kubectl logs name_of_pod

El STATUS pasará a Completed cuando ejecute kubectl get pods.

Lanzamiento del trabajo de entrenamiento con el lanzador de fórmulas

También puedes usar SageMaker HyperPod recetas para enviar tu trabajo de entrenamiento. Para enviar el trabajo de entrenamiento con una fórmula, actualice k8s.yaml y config.yaml. Ejecute el script de bash para que el modelo lo lance.

  • Enk8s.yaml, actualiza persistent_volume_claims para montar la reclamación de FSx Amazon en el directorio /data de los nodos de cómputo

    persistent_volume_claims: - claimName: fsx-claim mountPath: data
  • scripts/llama/runActualice launcher_ _hf_llama3_8b_seq8k_trn1x4_pretrain.sh

    • your_neuron_contrainer: es el contenedor de la sección de configuración del entorno.

    • your_model_config: es el modelo de configuración de la sección de configuración del entorno.

    (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 set up their cluster type in /recipes_collection/config.yaml IMAGE="<your_neuron_contrainer>" MODEL_CONFIG="<your_model_config>" SAGEMAKER_TRAINING_LAUNCHER_DIR=${SAGEMAKER_TRAINING_LAUNCHER_DIR:-"$(pwd)"} 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_trn1x4_pretrain \ base_results_dir="${SAGEMAKER_TRAINING_LAUNCHER_DIR}/results" \ recipes.run.name="hf-llama3-8b" \ instance_type=trn1.32xlarge \ recipes.model.model_config="$MODEL_CONFIG" \ cluster=k8s \ cluster_type=k8s \ container="${IMAGE}" \ recipes.data.train_dir=$TRAIN_DIR \ recipes.data.val_dir=$VAL_DIR
  • Lance el trabajo.

    bash launcher_scripts/llama/run_hf_llama3_8b_seq8k_trn1x4_pretrain.sh

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 pod name_of_pod

Cuando el STATUS del trabajo cambie a Running, podrá examinar el registro con el siguiente comando.

kubectl logs name_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 Tutorial de entrenamiento previo del clúster Trainium de Kubernetes.