Tutorial zum Vortraining des Kubernetes-Cluster (GPU) - Amazon SageMaker KI

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Tutorial zum Vortraining des Kubernetes-Cluster (GPU)

Es gibt zwei Möglichkeiten, einen Trainingsjob in einem GPU-Kubernetes-Cluster zu starten:

Voraussetzungen

Bevor Sie mit der Einrichtung Ihrer Umgebung beginnen, stellen Sie sicher, dass Sie über Folgendes verfügen:

  • Ein HyperPod GPU-Kubernetes-Cluster ist ordnungsgemäß eingerichtet.

  • Ein gemeinsam genutzter Speicherort. Es kann sich um ein FSx Amazon-Dateisystem oder ein NFS-System handeln, auf das von den Clusterknoten aus zugegriffen werden kann.

  • Daten in einem der folgenden Formate:

    • JSON

    • JSONGZ (komprimiertes JSON)

    • ARROW

  • (Optional) Sie benötigen ein HuggingFace Token, wenn Sie die Modellgewichte von HuggingFace für das Training oder die Feinabstimmung verwenden. Weitere Informationen zum Abrufen des Tokens finden Sie unter Benutzerzugriffstoken.

Einrichten der GPU-Kubernetes-Umgebung

Gehen Sie zum Einrichten einer GPU-Kubernetes-Umgebung wie folgt vor:

  • Richten Sie die virtuelle Umgebung ein. Vergewissern Sie sich, dass Sie Python 3.9 oder höher verwenden.

    python3 -m venv ${PWD}/venv source venv/bin/activate
  • Installieren Sie Abhängigkeiten mit einer der folgenden Methoden:

    • (Empfohlen): Methode des HyperPod Befehlszeilentools:

      # install HyperPod command line tools git clone https://github.com/aws/sagemaker-hyperpod-cli cd sagemaker-hyperpod-cli pip3 install .
    • SageMaker HyperPod Methode für Rezepte:

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

  • Helm installieren

  • Verbinden mit Ihrem Kubernetes-Cluster

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

Starten Sie den Trainingsjob mit der SageMaker HyperPod CLI

Wir empfehlen, das SageMaker HyperPod Befehlszeilenschnittstellentool (CLI) zu verwenden, um Ihren Schulungsjob mit Ihren Konfigurationen einzureichen. Im folgenden Beispiel wird ein Trainingsjob für das Modell hf_llama3_8b_seq16k_gpu_p5x16_pretrain eingereicht.

  • your_training_container: Ein Deep-Learning-Container. Die aktuelle Version des SMP-Containers finden Sie unter Versionshinweise zur Modell-Parallelitätsbibliothek von SageMaker AI.

  • (Optional) Sie können das HuggingFace Token angeben, wenn Sie vorab trainierte Gewichte von benötigen, HuggingFace indem Sie das folgende Schlüssel-Wert-Paar festlegen:

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

Nachdem Sie einen Trainingsjob eingereicht haben, können Sie mit dem folgenden Befehl überprüfen, ob die Übermittlung erfolgreich war.

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

Wenn der STATUS PENDING oder ContainerCreating lautet, führen Sie den folgenden Befehl aus, um weitere Informationen zu erhalten.

kubectl describe pod name_of_pod

Nachdem der Job-STATUS zu Running geändert wurde, können Sie das Protokoll mit dem folgenden Befehl überprüfen.

kubectl logs name_of_pod

Der STATUS wird zu Completed, wenn Sie kubectl get pods ausführen.

Starten des Trainingsjobs mit dem Launcher für Rezepte

Alternativ kannst du die SageMaker HyperPod Rezepte verwenden, um deinen Ausbildungsjob einzureichen. Die Verwendung der Rezepte beinhaltet die Aktualisierung von k8s.yaml, config.yaml und Ausführung des Startskripts.

  • Aktualisieren Sie in k8s.yaml den Code persistent_volume_claims. Es fügt den FSx Amazon-Claim dem /data Verzeichnis jedes Computer-Pods hinzu

    persistent_volume_claims: - claimName: fsx-claim mountPath: data
  • In config.yaml aktualisieren Sie repo_url_or_path unter git.

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

    • your_contrainer: Ein Deep-Learning-Container. Die aktuelle Version des SMP-Containers finden Sie unter Versionshinweise zur Modell-Parallelitätsbibliothek von SageMaker AI.

    • (Optional) Sie können das HuggingFace Token angeben, wenn Sie vorab trainierte Gewichte von benötigen, HuggingFace indem Sie das folgende Schlüssel-Wert-Paar festlegen:

      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
  • Starten eines Trainingsjobs

    bash launcher_scripts/llama/run_hf_llama3_8b_seq16k_gpu_p5x16_pretrain.sh

Nachdem Sie den Trainingsjob eingereicht haben, können Sie mit dem folgenden Befehl überprüfen, ob die Übermittlung erfolgreich war.

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

Wenn der STATUS PENDING oder ContainerCreating lautet, führen Sie den folgenden Befehl aus, um weitere Informationen zu erhalten.

kubectl describe pod <name-of-pod>

Nachdem der Job-STATUS zu Running geändert wurde, können Sie das Protokoll mit dem folgenden Befehl überprüfen.

kubectl logs name_of_pod

Der STATUS wechselt zu Completed, wenn Sie kubectl get pods ausführen.

Weitere Informationen zur Konfiguration des k8s-Clusters finden Sie unter Einen Trainingsjob auf HyperPod k8s ausführen.