Tutorial di preaddestramento sul cluster Kubernetes (GPU) - Amazon SageMaker AI

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Tutorial di preaddestramento sul cluster Kubernetes (GPU)

Esistono due modi per avviare un job di addestramento in un cluster GPU Kubernetes:

Prerequisiti

Prima di iniziare a configurare l’ambiente, assicurati di avere:

  • Un cluster HyperPod GPU Kubernetes è configurato correttamente.

  • Una posizione di archiviazione condivisa. Può essere un FSx file system Amazon o un sistema NFS accessibile dai nodi del cluster.

  • I dati in uno dei seguenti formati:

    • JSON

    • JSONGZ (JSON compresso)

    • ARROW

  • (Facoltativo) È necessario ottenere un HuggingFace token se si utilizzano i pesi del modello HuggingFace per il pre-allenamento o la messa a punto. Per ulteriori informazioni su come ottenere il token, consulta User access tokens.

Configurazione dell’ambiente GPU Kubernetes

Per configurare un ambiente GPU Kubernetes, procedi come descritto di seguito:

  • Configura l’ambiente virtuale. Assicurati di utilizzare Python 3.9 o versioni successive.

    python3 -m venv ${PWD}/venv source venv/bin/activate
  • Installa le dipendenze utilizzando uno dei metodi seguenti:

    • (Consigliato): metodo dello strumento a riga di comando: HyperPod

      # install HyperPod command line tools git clone https://github.com/aws/sagemaker-hyperpod-cli cd sagemaker-hyperpod-cli pip3 install .
    • SageMaker HyperPod metodo delle ricette:

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

  • Installa Helm.

  • Connettiti al cluster Kubernetes.

    aws eks update-kubeconfig --region "CLUSTER_REGION" --name "CLUSTER_NAME" hyperpod connect-cluster --cluster-name "CLUSTER_NAME" [--region "CLUSTER_REGION"] [--namespace <namespace>]

Avvia il processo di formazione con la SageMaker HyperPod CLI

Ti consigliamo di utilizzare lo strumento dell'interfaccia SageMaker HyperPod a riga di comando (CLI) per inviare il tuo lavoro di formazione con le tue configurazioni. L’esempio seguente invia un job di addestramento per il modello hf_llama3_8b_seq16k_gpu_p5x16_pretrain.

  • your_training_container: un container per il Deep Learning. Per trovare il rilascio più recente del container SMP, consulta Note di rilascio della libreria SageMaker Model Parallelism..

  • (Facoltativo) Se hai bisogno di pesi già addestrati, puoi fornire il HuggingFace token HuggingFace impostando la seguente coppia chiave-valore:

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

Dopo aver inviato un job di addestramento, puoi utilizzare il comando seguente per verificare se l’invio è riuscito.

kubectl get pods NAME READY STATUS RESTARTS AGE hf-llama3-<your-alias>-worker-0 0/1 running 0 36s

Se STATUS è PENDING o ContainerCreating, utilizza il comando seguente per ottenere maggiori dettagli.

kubectl describe pod name_of_pod

Quando lo STATUS del processo diventa Running, puoi esaminare il log utilizzando il comando seguente.

kubectl logs name_of_pod

STATUS diventa Completed quando esegui kubectl get pods.

Avvio del job di addestramento con l’utilità di avvio delle ricette

In alternativa, puoi utilizzare le SageMaker HyperPod ricette per inviare il tuo lavoro di formazione. Per utilizzare le ricette, devi aggiornare k8s.yaml e config.yaml ed eseguire lo script di avvio.

  • In k8s.yaml, aggiorna persistent_volume_claims. Monta il FSx claim Amazon /data nella directory di ogni pod di elaborazione

    persistent_volume_claims: - claimName: fsx-claim mountPath: data
  • In config.yaml, aggiorna repo_url_or_path sotto git.

    git: repo_url_or_path: <training_adapter_repo> branch: null commit: null entry_script: null token: null
  • Aggiornamento di launcher_scripts/llama/run_hf_llama3_8b_seq16k_gpu_p5x16_pretrain.sh

    • your_contrainer: un container per il Deep Learning. Per trovare il rilascio più recente del container SMP, consulta Note di rilascio della libreria SageMaker Model Parallelism..

    • (Facoltativo) Se hai bisogno di pesi già addestrati, puoi fornire il HuggingFace token HuggingFace impostando la seguente coppia chiave-valore:

      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
  • Avvio del job di addestramento

    bash launcher_scripts/llama/run_hf_llama3_8b_seq16k_gpu_p5x16_pretrain.sh

Dopo aver inviato il job di addestramento, puoi utilizzare il comando seguente per verificare se l’invio è riuscito.

kubectl get pods
NAME READY STATUS RESTARTS AGE hf-llama3-<your-alias>-worker-0 0/1 running 0 36s

Se STATUS è PENDING o ContainerCreating, utilizza il comando seguente per ottenere maggiori dettagli.

kubectl describe pod <name-of-pod>

Quando lo STATUS del processo diventa Running, puoi esaminare il log utilizzando il comando seguente.

kubectl logs name_of_pod

STATUS diventa Completed quando esegui kubectl get pods.

Per ulteriori informazioni sulla connessione al cluster k8s, consulta Esecuzione di un processo di formazione su k8s HyperPod .