HyperPod Tutorial zum Slurm-Cluster DPO (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.

HyperPod Tutorial zum Slurm-Cluster DPO (GPU)

Das folgende Tutorial richtet die Slurm-Umgebung ein und startet einen Job von Direct Preference Optimization (DPO) auf einem Lama-Modell mit 8 Milliarden Parametern.

Voraussetzungen

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

  • HyperPod GPU-Slurm-Cluster einrichten

    • In Ihrem HyperPod Slurm-Cluster müssen Nvidia Enroot und Pyxis aktiviert sein (diese sind standardmäßig aktiviert).

  • 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.

  • Ein tokenisierter binärer Präferenzdatensatz in einem der folgenden Formate:

    • JSON

    • JSONGZ (komprimiertes JSON)

    • ARROW

  • (Optional) Wenn du die vortrainierten Gewichte von einem Lama 3.2-Modell benötigst HuggingFace oder wenn du ein Lama 3.2-Modell trainierst, musst du dir das HuggingFace Token besorgen, bevor du mit dem Training beginnst. Weitere Informationen zum Abrufen des Tokens finden Sie unter Benutzerzugriffstoken.

Richten Sie die HyperPod GPU-Slurm-Umgebung ein

Um einen Trainingsjob auf einem Slurm-Cluster zu initiieren, führen Sie die folgenden Schritte aus:

  • Verbinden Sie sich per SSH mit dem Hauptknoten Ihres Slurm-Clusters.

  • Nachdem Sie sich angemeldet haben, richten Sie die virtuelle Umgebung ein. Vergewissern Sie sich, dass Sie Python 3.9 oder höher verwenden.

    #set up a virtual environment python3 -m venv ${PWD}/venv source venv/bin/activate
  • Klonen Sie die SageMaker HyperPod Rezepte und SageMaker HyperPod Adapter-Repositorys auf einen gemeinsam genutzten Speicherort. Der gemeinsam genutzte Speicherort kann ein FSx Amazon-Dateisystem oder ein NFS-System sein, auf das von den Clusterknoten aus zugegriffen werden kann.

    git clone https://github.com/aws/sagemaker-hyperpod-training-adapter-for-nemo.git git clone --recursive https://github.com/aws/sagemaker-hyperpod-recipes.git cd sagemaker-hyperpod-recipes pip3 install -r requirements.txt
  • Erstellen Sie mit Enroot eine Squash-Datei. Die aktuelle Version des SMP-Containers finden Sie unter Versionshinweise zur Modell-Parallelitätsbibliothek von SageMaker AI. Weitere Informationen zur Verwendung der Enroot-Datei finden Sie unter Erstellen eines AWS optimierten Nemo-Launcher-Images.

    REGION="<region>" IMAGE="658645717510.dkr.ecr.${REGION}.amazonaws.com/smdistributed-modelparallel:2.4.1-gpu-py311-cu121" aws ecr get-login-password --region ${REGION} | docker login --username AWS --password-stdin 658645717510.dkr.ecr.${REGION}.amazonaws.com enroot import -o $PWD/smdistributed-modelparallel.sqsh dockerd://${IMAGE} mv $PWD/smdistributed-modelparallel.sqsh "/fsx/<any-path-in-the-shared-filesystem>"
  • Um die Enroot-Squash-Datei zum Starten des Trainings zu verwenden, ändern Sie die recipes_collection/config.yaml-Datei anhand des folgenden Beispiels.

    container: /fsx/path/to/your/smdistributed-modelparallel.sqsh

Starten eines Trainingsjobs

Um einen DPO-Job für das Llama-Modell mit 8 Milliarden Parametern und einer Sequenzlänge von 8192 auf einem einzelnen Slurm-Rechenknoten zu starten, setzen Sie das Startskript, launcher_scripts/llama/run_hf_llama3_8b_seq8k_gpu_dpo.sh, auf Folgendes:

  • IMAGE: Der Container aus dem Abschnitt „Umgebungseinrichtung“.

  • HF_MODEL_NAME_OR_PATH: Definieren Sie den Namen oder den Pfad der vortrainierten Gewichte im Parameter hf_model_name_or_path des Rezepts.

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

    recipes.model.hf_access_token=${HF_ACCESS_TOKEN}
Anmerkung

Das für DPO in dieser Einrichtung verwendete Referenzmodell wird automatisch aus dem trainierten Basismodell abgeleitet (es wird kein separates Referenzmodell explizit definiert). DPO-spezifische Hyperparameter sind mit den folgenden Standardwerten vorkonfiguriert:

  • beta: 0,1 (steuert die Stärke der KL-Divergenz-Regularisierung)

  • label_smoothing: 0,0 (keine Glättung auf Präferenzbezeichnungen angewendet)

recipes.dpo.beta=${BETA} recipes.dpo.label_smoothing=${LABEL_SMOOTHING}
#!/bin/bash IMAGE="${YOUR_IMAGE}" SAGEMAKER_TRAINING_LAUNCHER_DIR="${SAGEMAKER_TRAINING_LAUNCHER_DIR:-${PWD}}" TRAIN_DIR="${YOUR_TRAIN_DIR}" # Location of training dataset VAL_DIR="${YOUR_VAL_DIR}" # Location of validation dataset # experiment output directory EXP_DIR="${YOUR_EXP_DIR}" HF_ACCESS_TOKEN="${YOUR_HF_TOKEN}" HF_MODEL_NAME_OR_PATH="${HF_MODEL_NAME_OR_PATH}" BETA="${BETA}" LABEL_SMOOTHING="${LABEL_SMOOTHING}" # Add hf_model_name_or_path and turn off synthetic_data HYDRA_FULL_ERROR=1 python3 ${SAGEMAKER_TRAINING_LAUNCHER_DIR}/main.py \ recipes=fine-tuning/llama/hf_llama3_8b_seq8k_gpu_dpo \ base_results_dir=${SAGEMAKER_TRAINING_LAUNCHER_DIR}/results \ recipes.run.name="hf_llama3_dpo" \ recipes.exp_manager.exp_dir="$EXP_DIR" \ recipes.model.data.train_dir="$TRAIN_DIR" \ recipes.model.data.val_dir="$VAL_DIR" \ recipes.model.hf_model_name_or_path="$HF_MODEL_NAME_OR_PATH" \ container="${IMAGE}" \ +cluster.container_mounts.0="/fsx:/fsx" \ recipes.model.hf_access_token="${HF_ACCESS_TOKEN}" \ recipes.dpo.enabled=true \ recipes.dpo.beta="${BETA}" \ recipes.dpo.label_smoothing="${LABEL_SMOOTHING}$" \

Nachdem Sie alle erforderlichen Parameter im vorherigen Skript konfiguriert haben, können Sie den Trainingsjob starten, indem Sie ihn ausführen.

bash launcher_scripts/llama/run_hf_llama3_8b_seq8k_gpu_dpo.sh

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