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:
-
Il programma di avvio degli stili NeMo
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
-
-
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 podname_of_pod
Quando lo STATUS del processo diventa Running, puoi esaminare il log utilizzando il comando seguente.
kubectl logsname_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, aggiornapersistent_volume_claims. Monta il FSx claim Amazon/datanella directory di ogni pod di elaborazionepersistent_volume_claims: - claimName: fsx-claim mountPath: data -
In
config.yaml, aggiornarepo_url_or_pathsottogit.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 logsname_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 .