

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.

# SageMaker Tutorial für Trainingsjobs vor dem Training (GPU)
<a name="sagemaker-hyperpod-gpu-sagemaker-training-jobs-pretrain-tutorial"></a>

Dieses Tutorial führt Sie durch den Prozess der Einrichtung und Ausführung eines Vorbereitungsjobs mithilfe von SageMaker Trainingsjobs mit GPU-Instances.
+ So richten Sie Ihre Umgebung ein
+ Starte einen Trainingsjob mithilfe von Rezepten SageMaker HyperPod 

Bevor Sie beginnen, stellen Sie sicher, dass Sie die folgenden Voraussetzungen erfüllen.

**Voraussetzungen**  
Bevor Sie mit der Einrichtung Ihrer Umgebung beginnen, stellen Sie sicher, dass Sie über Folgendes verfügen:  
Amazon-FSx-Dateisystem oder einen Amazon-S3-Bucket, in den Sie die Daten laden und die Trainingsartefakte ausgeben können.
Für Amazon AI wurde ein Servicekontingent für 1 x ml.p4d.24xlarge und 1 x ml.p5.48xlarge angefordert. SageMaker Um eine Erhöhung der Servicekontingente zu beantragen, gehen Sie wie folgt vor:  
Navigieren Sie in der AWS Service AWS Quota-Konsole zu Services
Wählen Sie ** Amazon SageMaker AI**.
Wählen Sie eine ml.p4d.24xlarge- und eine ml.p5.48xlarge-Instance aus.
Erstellen Sie eine AWS Identity and Access Management(IAM-) Rolle mit den folgenden verwalteten Richtlinien, um der SageMaker KI Berechtigungen zur Ausführung der Beispiele zu erteilen.  
AmazonSageMakerFullAccess
AmazonEC2FullAccess
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 Vortraining oder die Feinabstimmung verwenden. Weitere Informationen zum Abrufen des Tokens finden Sie unter [Benutzerzugriffstoken](https://huggingface.co/docs/hub/en/security-tokens).

## Einrichtung der Umgebung für SageMaker GPU-Trainingsjobs
<a name="sagemaker-hyperpod-gpu-sagemaker-training-jobs-environment-setup"></a>

Bevor Sie einen SageMaker Trainingsjob ausführen, konfigurieren Sie Ihre AWS Anmeldeinformationen und Ihre bevorzugte Region, indem Sie den `aws configure` Befehl ausführen. Als Alternative zum Befehl configure können Sie Ihre Anmeldeinformationen über Umgebungsvariablen wie `AWS_ACCESS_KEY_ID``AWS_SECRET_ACCESS_KEY`, und angeben. `AWS_SESSION_TOKEN.` Weitere Informationen finden Sie unter [ SageMaker AI Python SDK](https://github.com/aws/sagemaker-python-sdk).

Wir empfehlen dringend, ein SageMaker AI-Jupyter-Notebook in SageMaker AI JupyterLab zu verwenden, um einen SageMaker Trainingsjob zu starten. Weitere Informationen finden Sie unter [SageMaker JupyterLab](studio-updated-jl.md).
+ (Optional) Richten Sie die virtuelle Umgebung und Abhängigkeiten ein. Wenn Sie ein Jupyter-Notebook in Amazon SageMaker Studio verwenden, können Sie diesen Schritt überspringen. 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
  # install dependencies after git clone.
  
  git clone --recursive git@github.com:aws/sagemaker-hyperpod-recipes.git
  cd sagemaker-hyperpod-recipes
  pip3 install -r requirements.txt
  # Set the aws region.
  
  aws configure set {{<your_region>}}
  ```
+ Installieren Sie das AI Python SDK SageMaker 

  ```
  pip3 install --upgrade sagemaker
  ```
+ `Container`: Der GPU-Container wird automatisch vom SageMaker AI Python SDK festgelegt. Sie können auch Ihren eigenen Container bereitstellen.
**Anmerkung**  
Wenn Sie einen multimodalen Trainingsjob mit Llama 3.2 ausführen, muss die `transformers`-Version `4.45.2 ` oder höher sein.

  Hängen Sie ihn `source_dir` nur `transformers==4.45.2` `requirements.txt` an, wenn Sie das SageMaker AI Python SDK verwenden. Hängen Sie es beispielsweise an, wenn Sie es in einem Notizbuch in SageMaker AI verwenden. JupyterLab

  Wenn Sie HyperPod Rezepte verwenden, um mithilfe des Clustertyps zu starten`sm_jobs`, erfolgt dies automatisch.

## Starten des Trainingsjobs mit einem Jupyter Notebook
<a name="sagemaker-hyperpod-gpu-sagemaker-training-jobs-launch-training-job-notebook"></a>

Sie können den folgenden Python-Code verwenden, um einen SageMaker Trainingsjob mit Ihrem Rezept auszuführen. Es nutzt das PyTorch ModelTrainer aus dem [ SageMaker AI Python SDK](https://sagemaker.readthedocs.io/en/stable/), um das Rezept einzureichen. Im folgenden Beispiel wird das llama3-8b-Rezept auf der AI Trainingsplattform gestartet. SageMaker 

```
import os
import boto3
from sagemaker.core.debugger import TensorBoardOutputConfig
from sagemaker.core.helper.session_helper import Session, get_execution_role
from sagemaker.train import ModelTrainer
from sagemaker.train.configs import Compute, InputData, OutputDataConfig

sagemaker_session = Session()
role = get_execution_role()

bucket = sagemaker_session.default_bucket() 
output = os.path.join(f"s3://{bucket}", "output")
output_path = "{{<s3-URI>}}"

recipe_overrides = {
    "run": {
        "results_dir": "/opt/ml/model",
    },
    "exp_manager": {
        "exp_dir": "",
        "explicit_log_dir": "/opt/ml/output/tensorboard",
        "checkpoint_dir": "/opt/ml/checkpoints",
    },   
    "model": {
        "data": {
            "train_dir": "/opt/ml/input/data/train",
            "val_dir": "/opt/ml/input/data/val",
        },
    },
}

tensorboard_output_config = TensorBoardOutputConfig(
    s3_output_path=os.path.join(output, 'tensorboard'),
    container_local_output_path=recipe_overrides["exp_manager"]["explicit_log_dir"]
)

model_trainer = ModelTrainer(
    output_data_config=OutputDataConfig(s3_output_path=output_path),
    base_job_name=f"llama-recipe",
    role=role,
    compute=Compute(instance_type="ml.p5.48xlarge", instance_count=1),
    training_recipe="training/llama/hf_llama3_8b_seq8k_gpu_p5x16_pretrain",
    recipe_overrides=recipe_overrides,
    tensorboard_output_config=tensorboard_output_config,
)

model_trainer.train(input_data_config=[
    InputData(channel_name="train", data_source="s3 or fsx input"),
    InputData(channel_name="val", data_source="s3 or fsx input")
], wait=True)
```

Der vorhergehende Code erstellt ein ModelTrainer Objekt mit dem Trainingsrezept und trainiert dann das Modell mit der Methode. `train()` Verwenden Sie den Parameter training\_recipe, um das Rezept anzugeben, das Sie für das Training verwenden möchten.

**Anmerkung**  
Wenn Sie einen multimodalen Trainingsjob mit Llama 3.2 ausführen, muss die Transformers-Version 4.45.2 oder höher sein.

Hängen Sie es `source_dir` nur `transformers==4.45.2` `requirements.txt` an, wenn Sie das SageMaker AI Python SDK direkt verwenden. Beispielsweise müssen Sie die Version an die Textdatei anfügen, wenn Sie ein Jupyter Notebook verwenden.

Wenn Sie den Endpunkt für einen SageMaker Trainingsjob bereitstellen, müssen Sie den Image-URI angeben, den Sie verwenden. Wenn Sie die Image-URI nicht angeben, ModelTrainer verwendet das Trainingsbild als Image für die Bereitstellung. Die bereitgestellten Trainingsbilder enthalten nicht die SageMaker HyperPod Abhängigkeiten, die für die Inferenz und Bereitstellung erforderlich sind. Im Folgenden finden Sie ein Beispiel dafür, wie ein Inferenz-Image für die Bereitstellung verwendet werden kann:

```
from sagemaker.serve import ModelBuilder
from sagemaker.core import image_uris

inference_image = image_uris.retrieve(framework='pytorch',region='us-west-2',version='2.0',py_version='py310',image_scope='inference', instance_type='ml.p4d.24xlarge')

model_builder = ModelBuilder(
    model=model_trainer,
    image_uri=inference_image,
    role_arn=role,
    instance_type='ml.p4d.24xlarge'
)
model = model_builder.build()
endpoint = model_builder.deploy(endpoint_name="my-endpoint")
```

**Anmerkung**  
Für die Ausführung des vorherigen Codes auf der Sagemaker-Notebook-Instance sind möglicherweise mehr als die von AI bereitgestellten Standardspeicher von 5 GB erforderlich. SageMaker JupyterLab Wenn Sie auf Probleme mit nicht verfügbarem Speicherplatz stoßen, erstellen Sie eine neue Notebook-Instance, in der Sie eine andere Notebook-Instance verwenden, und vergrößern Sie den Speicherplatz des Notebooks.

## Starten des Trainingsjobs mit dem Launcher für Rezepte
<a name="sagemaker-hyperpod-gpu-sagemaker-training-jobs-launch-training-job-recipes"></a>

Aktualisieren Sie die `./recipes_collection/cluster/sm_jobs.yaml`-Datei wie folgt:

```
sm_jobs_config:
  output_path: {{<s3_output_path>}}
  tensorboard_config:
    output_path: {{<s3_output_path>}}
    container_logs_path: /opt/ml/output/tensorboard  # Path to logs on the container
  wait: True  # Whether to wait for training job to finish
  inputs:  # Inputs to call fit with. Set either s3 or file_system, not both.
    s3:  # Dictionary of channel names and s3 URIs. For GPUs, use channels for train and validation.
      train: {{<s3_train_data_path>}}
      val: null
  additional_estimator_kwargs:  # All other additional args to pass to estimator. Must be int, float or string.
    max_run: 180000
    enable_remote_debug: True
  recipe_overrides:
    exp_manager:
      explicit_log_dir: /opt/ml/output/tensorboard
    data:
      train_dir: /opt/ml/input/data/train
    model:
      model_config: /opt/ml/input/data/train/config.json
    compiler_cache_url: "{{<compiler_cache_url>}}"
```

Aktualisieren Sie `./recipes_collection/config.yaml`, um `sm_jobs` im `cluster` und `cluster_type` anzugeben.

```
defaults:
  - _self_
  - cluster: sm_jobs  # set to `slurm`, `k8s` or `sm_jobs`, depending on the desired cluster
  - recipes: training/llama/hf_llama3_8b_seq8k_trn1x4_pretrain
cluster_type: sm_jobs  # bcm, bcp, k8s or sm_jobs. If bcm, k8s or sm_jobs, it must match - cluster above.
```

Starten des Jobs mit dem folgenden Befehl

```
python3 main.py --config-path recipes_collection --config-name config
```

Weitere Informationen zur Konfiguration von SageMaker Trainingsjobs finden Sie unter Einen Trainingsjob für Trainingsjobs ausführen. SageMaker 