

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
<a name="sagemaker-hyperpod-trainium-kubernetes-cluster-pretrain-tutorial"></a>

Sie können eine der folgenden Methoden verwenden, um einen Trainingsjob in einem Trainium-Kubernetes-Cluster zu starten.
+ [(Empfohlen) Befehlszeilentool HyperPod ](https://github.com/aws/sagemaker-hyperpod-cli)
+ Der Style-Launcher NeMo 

**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](https://huggingface.co/docs/hub/en/security-tokens).

## Einrichten Ihrer Trainium-Kubernetes-Umgebung
<a name="sagemaker-hyperpod-trainium-setup-trainium-kubernetes-environment"></a>

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](https://awsdocs-neuron.readthedocs-hosted.com/en/latest/libraries/nxd-training/tutorials/hf_llama3_8B_pretraining.html#download-the-dataset), beginnend mit Datensatz herunterladen.** 

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

1. 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
   ```

1. 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
     ```

1. [kubectl und eksctl einrichten](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html)

1. [Helm installieren](https://helm.sh/docs/intro/install/)

1. 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>]
   ```

1. Container: Der [Neuron-Container](https://github.com/aws-neuron/deep-learning-containers?tab=readme-ov-file#pytorch-training-neuronx)

## Starten Sie den Trainingsjob mit der SageMaker HyperPod CLI
<a name="sagemaker-hyperpod-trainium-launch-training-job-cli"></a>

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](https://github.com/aws-neuron/deep-learning-containers?tab=readme-ov-file#pytorch-training-neuronx).
+ `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
<a name="sagemaker-hyperpod-trainium-launch-training-job-recipes"></a>

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\_claims`k8s.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](#sagemaker-hyperpod-trainium-kubernetes-cluster-pretrain-tutorial).