Tutorial de pré-treinamento de clusters do Kubernetes no Trainium - SageMaker Inteligência Artificial da Amazon

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Tutorial de pré-treinamento de clusters do Kubernetes no Trainium

É possível usar um dos métodos a seguir para iniciar uma tarefa de treinamento em um cluster do Kubernetes no Trainium.

  • Ferramenta de linha de HyperPod comando (recomendada)

  • O lançador NeMo de estilo

Pré-requisitos

Antes de começar a configurar seu ambiente, você deve:

  • Configurar um cluster HyperPod Trainium Kubernetes

  • Um local de armazenamento compartilhado que pode ser um sistema de FSx arquivos Amazon ou um sistema NFS acessível a partir dos nós do cluster.

  • Ter dados em um dos seguintes formatos:

    • JSON

    • JSONGZ (JSON compactado)

    • ARROW

  • (Opcional) Você deve receber uma HuggingFace ficha se estiver usando os pesos do modelo HuggingFace para pré-treinamento ou ajuste fino. Para ter mais informações sobre como obter o token, consulte User access tokens.

Configurar um ambiente do Kubernetes no Trainium

Para configurar o ambiente do Kubernetes no Trainium, faça o seguinte:

  1. Conclua as etapas do seguinte tutorial: Pré-treinamento do HuggingFace Llama3-8B a partir de Baixar o conjunto de dados.

  2. Prepare uma configuração do modelo. Os modelos estão disponíveis no repositório do Neuron. Para este tutorial, use a configuração do modelo llama3 8b.

  3. Configuração do ambiente virtual. Você deve usar o Python 3.9 ou posterior.

    python3 -m venv ${PWD}/venv source venv/bin/activate
  4. Instale as dependências.

    • (Recomendado) Use a seguinte ferramenta de HyperPod linha de comando

      # install HyperPod command line tools git clone https://github.com/aws/sagemaker-hyperpod-cli cd sagemaker-hyperpod-cli pip3 install .
    • Se você estiver usando SageMaker HyperPod receitas, especifique o seguinte

      # 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 o kubectl e o eksctl.

  6. Instale o Helm.

  7. 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>]
  8. Contêiner: o contêiner do Neuron

Inicie o trabalho de treinamento com a SageMaker HyperPod CLI

Recomendamos usar a ferramenta de interface SageMaker HyperPod de linha de comando (CLI) para enviar seu trabalho de treinamento com suas configurações. O exemplo a seguir envia uma tarefa de treinamento ao modelo hf_llama3_8b_seq8k_trn1x4_pretrain do Trainium.

  • your_neuron_container: o contêiner do Neuron.

  • your_model_config: a configuração do modelo na seção de configuração do ambiente.

  • (Opcional) Você pode fornecer o HuggingFace token se precisar de pesos pré-treinados HuggingFace definindo o seguinte par de valores-chave:

    "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>" }'

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

Depois que o STATUS da tarefa mudar para Running, você poderá examinar o log usando o comando a seguir.

kubectl logs name_of_pod

O STATUS mudará para Completed quando você executar kubectl get pods.

Iniciar a tarefa de treinamento com o inicializador de fórmulas

Como alternativa, use SageMaker HyperPod receitas para enviar seu trabalho de treinamento. Para enviar a tarefa de treinamento usando uma fórmula, atualize k8s.yaml e config.yaml. Execute o script Bash do modelo para iniciá-lo.

  • Emk8s.yaml, atualize persistent_volume_claims para montar a declaração da FSx Amazon no diretório /data nos nós de computação

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

    • your_neuron_contrainer: o contêiner da seção de configuração do ambiente.

    • your_model_config: a configuração do modelo na seção de configuração do ambiente.

    (Opcional) Você pode fornecer o HuggingFace token se precisar de pesos pré-treinados HuggingFace definindo o seguinte par de valores-chave:

    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
  • Iniciar a tarefa

    bash launcher_scripts/llama/run_hf_llama3_8b_seq8k_trn1x4_pretrain.sh

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 estiver como 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 logs name_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 Tutorial de pré-treinamento de clusters do Kubernetes no Trainium.