Tutorial zum Vortraining des Trainium-Kubernetes-Clusters - 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 Trainium-Kubernetes-Clusters

Sie können eine der folgenden Methoden verwenden, um einen Trainingsjob in einem Trainium-Kubernetes-Cluster zu starten.

Voraussetzungen

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

  • Richten Sie einen HyperPod Trainium Kubernetes-Cluster ein

  • Ein gemeinsam genutzter Speicherort, bei dem es sich um ein FSx Amazon-Dateisystem oder ein NFS-System handeln kann, 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 Ihrer Trainium-Kubernetes-Umgebung

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

  1. Führen Sie die Schritte im folgenden Tutorial aus: HuggingFace Llama3-8B Pretraining, beginnend mit Datensatz herunterladen.

  2. Bereiten Sie eine Modellkonfiguration vor. Sie sind im Neuron-Repo verfügbar. Für dieses Tutorial können Sie die llama3 8b-Modellkonfiguration verwenden.

  3. Einrichtung der virtuellen Umgebung. Vergewissern Sie sich, dass Sie Python 3.9 oder höher verwenden.

    python3 -m venv ${PWD}/venv source venv/bin/activate
  4. Installieren der Abhängigkeiten

    • (Empfohlen) Verwenden Sie das folgende Befehlszeilentool HyperPod

      # install HyperPod command line tools git clone https://github.com/aws/sagemaker-hyperpod-cli cd sagemaker-hyperpod-cli pip3 install .
    • Wenn Sie SageMaker HyperPod Rezepte verwenden, geben Sie Folgendes an

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

  6. Helm installieren

  7. 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>]
  8. Container: Der Neuron-Container

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 hf_llama3_8b_seq8k_trn1x4_pretrain-Trainium-Modell eingereicht.

  • your_neuron_container: Der Neuron-Container.

  • your_model_config: Die Modellkonfiguration aus dem Abschnitt „Umgebungseinrichtung“

  • (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_seq8k_trn1x4_pretrain \ --persistent-volume-claims fsx-claim:data \ --override-parameters \ '{ "cluster": "k8s", "cluster_type": "k8s", "container": "<your_neuron_contrainer>", "recipes.run.name": "hf-llama3", "recipes.run.compile": 0, "recipes.model.model_config": "<your_model_config>", "instance_type": "trn1.32xlarge", "recipes.data.train_dir": "<your_train_data_dir>" }'

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 wechselt zu Completed, wenn Sie kubectl get pods ausführen.

Starten des Trainingsjobs mit dem Launcher für Rezepte

Alternativ kannst du SageMaker HyperPod Rezepte verwenden, um deinen Ausbildungsjob einzureichen. Um den Trainingsjob mithilfe eines Rezepts einzureichen, aktualisieren Sie k8s.yaml und config.yaml. Führen Sie das Bash-Skript für das Modell aus, um es zu starten.

  • Aktualisieren Sie in persistent_volume_claimsk8s.yaml, um den FSx Amazon-Claim im Verzeichnis /data in den Rechenknoten einzuhängen

    persistent_volume_claims: - claimName: fsx-claim mountPath: data
  • scripts/llama/runAktualisieren Sie launcher_ _hf_llama3_8b_seq8k_trn1x4_pretrain.sh

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

    • your_model_config: Die Modellkonfiguration aus dem Abschnitt „Umgebungseinrichtung“

    (Optional) Sie können das HuggingFace Token bereitstellen, 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 set up their cluster type in /recipes_collection/config.yaml IMAGE="<your_neuron_contrainer>" MODEL_CONFIG="<your_model_config>" SAGEMAKER_TRAINING_LAUNCHER_DIR=${SAGEMAKER_TRAINING_LAUNCHER_DIR:-"$(pwd)"} 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_trn1x4_pretrain \ base_results_dir="${SAGEMAKER_TRAINING_LAUNCHER_DIR}/results" \ recipes.run.name="hf-llama3-8b" \ instance_type=trn1.32xlarge \ recipes.model.model_config="$MODEL_CONFIG" \ cluster=k8s \ cluster_type=k8s \ container="${IMAGE}" \ recipes.data.train_dir=$TRAIN_DIR \ recipes.data.val_dir=$VAL_DIR
  • Starten des Jobs

    bash launcher_scripts/llama/run_hf_llama3_8b_seq8k_trn1x4_pretrain.sh

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 „Laufend“ 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 Tutorial zum Vortraining des Trainium-Kubernetes-Clusters.