Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Tutoriel de pré-formation au cluster Kubernetes (GPU)
Il existe deux manières de lancer une tâche de formation dans un cluster GPU Kubernetes :
-
outil de ligne de HyperPod commande
(recommandé) -
Le lanceur NeMo de style
Prérequis
Avant de commencer à configurer votre environnement, assurez-vous d'avoir :
-
Un cluster HyperPod GPU Kubernetes est correctement configuré.
-
Un lieu de stockage partagé. Il peut s'agir d'un système de FSx fichiers Amazon ou d'un système NFS accessible depuis les nœuds du cluster.
-
Données dans l'un des formats suivants :
-
JSON
-
JSONGZ (JSON compressé)
-
FLÈCHE
-
-
(Facultatif) Vous devez obtenir un HuggingFace jeton si vous utilisez les poids du modèle à des HuggingFace fins de pré-entraînement ou de réglage. Pour plus d'informations sur l'obtention du jeton, consultez la section Jetons d'accès utilisateur
.
Configuration de l'environnement GPU Kubernetes
Pour configurer un environnement Kubernetes GPU, procédez comme suit :
-
Configurez l'environnement virtuel. Assurez-vous d'utiliser Python 3.9 ou une version ultérieure.
python3 -m venv ${PWD}/venv source venv/bin/activate
-
Installez les dépendances à l'aide de l'une des méthodes suivantes :
-
(Recommandé) : méthode de l'outil HyperPod en ligne de commande
: # install HyperPod command line tools git clone https://github.com/aws/sagemaker-hyperpod-cli cd sagemaker-hyperpod-cli pip3 install .
-
SageMaker HyperPod méthode des recettes :
# install SageMaker HyperPod Recipes. git clone --recursive git@github.com:aws/sagemaker-hyperpod-recipes.git cd sagemaker-hyperpod-recipes pip3 install -r requirements.txt
-
-
Connectez-vous à votre cluster Kubernetes
aws eks update-kubeconfig --region "
CLUSTER_REGION
" --name "CLUSTER_NAME
" hyperpod connect-cluster --cluster-name "CLUSTER_NAME
" [--region "CLUSTER_REGION
"] [--namespace <namespace>]
Lancez le job de formation avec la SageMaker HyperPod CLI
Nous vous recommandons d'utiliser l'outil d'interface de SageMaker HyperPod ligne de commande (CLI) pour soumettre votre tâche de formation avec vos configurations. L'exemple suivant propose une tâche de formation pour le hf_llama3_8b_seq16k_gpu_p5x16_pretrain
modèle.
-
your_training_container
: un conteneur de Deep Learning. Pour trouver la version la plus récente du conteneur SMP, consultezNotes de mise à jour pour la bibliothèque de parallélisme des SageMaker modèles. -
(Facultatif) Vous pouvez fournir le HuggingFace jeton si vous avez besoin de poids préentraînés HuggingFace en définissant la paire clé-valeur suivante :
"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" }'
Après avoir soumis une offre de formation, vous pouvez utiliser la commande suivante pour vérifier si vous l'avez envoyée avec succès.
kubectl get pods NAME READY STATUS RESTARTS AGE hf-llama3-<your-alias>-worker-0 0/1 running 0 36s
Si STATUS
c'est le cas PENDING
ouContainerCreating
, exécutez la commande suivante pour obtenir plus de détails.
kubectl describe pod
name_of_pod
Une fois que la STATUS
tâche est passée àRunning
, vous pouvez examiner le journal à l'aide de la commande suivante.
kubectl logs
name_of_pod
Cela STATUS
devient Completed
lorsque vous courezkubectl
get pods
.
Lancez le job de formation avec le lanceur de recettes
Vous pouvez également utiliser les SageMaker HyperPod recettes pour soumettre votre offre de formation. L'utilisation des recettes implique la mise à jour k8s.yaml
et l'exécution du script de lancement. config.yaml
-
Dans
k8s.yaml
, mettez à jourpersistent_volume_claims
. Il place la FSx réclamation Amazon/data
dans le répertoire de chaque module informatiquepersistent_volume_claims: - claimName: fsx-claim mountPath: data
-
Dans
config.yaml
, mettez à jourrepo_url_or_path
sousgit
.git: repo_url_or_path:
<training_adapter_repo>
branch: null commit: null entry_script: null token: null -
Mettre à jour
launcher_scripts/llama/run_hf_llama3_8b_seq16k_gpu_p5x16_pretrain.sh
-
your_contrainer
: un conteneur de Deep Learning. Pour trouver la version la plus récente du conteneur SMP, consultezNotes de mise à jour pour la bibliothèque de parallélisme des SageMaker modèles. -
(Facultatif) Vous pouvez fournir le HuggingFace jeton si vous avez besoin de poids préentraînés HuggingFace en définissant la paire clé-valeur suivante :
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 -
-
Lancez le job de formation
bash launcher_scripts/llama/run_hf_llama3_8b_seq16k_gpu_p5x16_pretrain.sh
Une fois que vous avez soumis le travail de formation, vous pouvez utiliser la commande suivante pour vérifier si vous l'avez correctement soumis.
kubectl get pods
NAME READY STATUS RESTARTS AGE hf-llama3-<your-alias>-worker-0 0/1 running 0 36s
Si STATUS
c'est le cas PENDING
ouContainerCreating
, exécutez la commande suivante pour obtenir plus de détails.
kubectl describe pod
<name-of-pod>
Une fois que la STATUS
tâche est passée àRunning
, vous pouvez examiner le journal à l'aide de la commande suivante.
kubectl logs
name_of_pod
Ils se STATUS
tourneront vers Completed
lorsque vous courezkubectl get pods
.
Pour plus d'informations sur la configuration du cluster k8s, consultez. Exécution d'une tâche de formation sur HyperPod k8s