

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.

# Feinabstimmung der Amazon Nova-Modelle auf SageMaker HyperPod
<a name="nova-hp-fine-tune"></a>

Die folgenden Techniken zeigen Ihnen, wie Sie Amazon Nova 2-Modelle optimieren können. SageMaker HyperPod

**Topics**
+ [Überwachte Optimierung (SFT)](nova-fine-tune.md)
+ [Direct Preference Optimization (DPO)](nova-dpo.md)
+ [Proximal Policy Optimization (PPO)](nova-ppo.md)

# Überwachte Optimierung (SFT)
<a name="nova-fine-tune"></a>

Der SFT-Trainingsprozess besteht aus zwei Hauptphasen:
+ **Datenvorbereitung**: Folgen Sie den festgelegten Richtlinien, um Datensätze zu erstellen, zu bereinigen oder neu zu formatieren, sodass sie die erforderliche Struktur erhalten. Stellen Sie sicher, dass Eingaben, Ausgaben und Zusatzinformationen (wie Argumentationsspuren oder Metadaten) richtig aufeinander abgestimmt und formatiert sind.
+ **Trainingskonfiguration**: Definieren Sie, wie das Modell trainiert werden soll. Bei der Verwendung wird diese Konfiguration in eine YAML-Rezeptdatei geschrieben, die Folgendes beinhaltet:
  + Datenquellenpfade (Trainings- und Validierungsdatensätze)
  + Wichtige Hyperparameter (Epochen, Lernrate, Batchgröße)
  + Optionale Komponenten (verteilte Trainingsparameter usw.)

## Vergleich und Auswahl von Nova-Modellen
<a name="nova-model-comparison"></a>

Amazon Nova 2.0 ist ein Modell, das auf einem größeren und vielfältigeren Datensatz als Amazon Nova 1.0 trainiert wurde. Zu den Verbesserungen gehören:
+ **Verbesserte Argumentationsfähigkeiten** mit Unterstützung für den Modus „Explizites Denken“
+ **Umfassendere mehrsprachige Leistung** in weiteren Sprachen
+ **Verbesserte Leistung bei komplexen Aufgaben**, einschließlich Codierung und Verwendung von Tools
+ **Erweiterte Kontexthandhabung** mit besserer Genauigkeit und Stabilität bei längeren Kontextlängen

## Wann sollte Nova 1.0 im Vergleich zu Nova 2.0 verwendet werden
<a name="nova-model-selection"></a>

Wählen Sie Amazon Nova 1.0, wenn:
+ Der Anwendungsfall erfordert Standardsprachenkenntnisse ohne fortgeschrittene Argumentation
+ Die Leistung wurde bereits auf Amazon Nova 1.0 validiert und zusätzliche Funktionen sind nicht erforderlich

# SFT auf Nova 1.0
<a name="nova-sft-1"></a>

Die überwachte Optimierung (SFT, Supervised Fine-Tuning) ist ein Prozess, bei dem eine Sammlung von Prompt-Antwort-Paaren für ein Basismodell bereitgestellt wird, um die Leistung eines vortrainierten Basismodells für eine bestimmte Aufgabe zu verbessern. Die gekennzeichneten Beispiele sind als Prompt-Antwort-Paare formatiert und als Anweisungen formuliert. Durch diesen Feinabstimmungsprozess werden die Gewichtungen des Modells geändert.

Sie sollten SFT verwenden, wenn Sie über domainspezifische Daten verfügen, die für optimale Ergebnisse die Bereitstellung bestimmter Prompt-Antwort-Paare erfordern.

Beachten Sie, dass sich Ihre Trainings- und Validierungs-Eingabedatensätze in kundeneigenen Buckets befinden müssen, nicht in Escrow- oder serviceverwalteten S3-Buckets.

## Datenvoraussetzungen
<a name="nova-sft-1-data-requirements"></a>

Bei der Full-Rank-SFT und der Low-Rank Adapter (LoRA)-SFT sollten die Daten dem [Operationsformat von Amazon Bedrock Converse](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_Converse.html) entsprechen. Beispiele und Einschränkungen dieses Formats finden Sie unter [Vorbereiten von Daten für die Optimierung von Modellen mit Verständnisfunktion](https://docs.aws.amazon.com/nova/latest/userguide/fine-tune-prepare-data-understanding.html).

Um Ihr Datensatzformat vor der Einreichung zu überprüfen, empfehlen wir, [das Validierungsskript aus dem Beispielrepository von Amazon Bedrock](https://github.com/aws-samples/amazon-nova-samples/blob/main/customization/bedrock-finetuning/understanding/dataset_validation/nova_ft_dataset_validator.py) zu verwenden. Mit diesem Validierungstool können Sie sicherstellen, dass Ihre JSONL-Dateien den erforderlichen Formatspezifikationen entsprechen, und mögliche Probleme identifizieren, bevor Sie Ihren Optimierungsjob einreichen.

Die Amazon-Nova-Parameter, die für die Optimierung mit SFT verfügbar sind, lauten wie folgt:
+ **Ausführungskonfiguration**
  + `name`: Ein aussagekräftiger Name für Ihren Trainingsjob. Dies hilft bei der Identifizierung Ihres Jobs in der AWS-Managementkonsole.
  + `model_type`: Die zu verwendende Amazon-Nova-Modellvariante. Die verfügbaren Optionen sind `amazon.nova-micro-v1:0:128k`, `amazon.nova-lite-v1:0:300k` oder `amazon.nova-pro-v1:0:300k`.
  + `model_name_or_path`: Der Pfad zum Basismodell, das Sie für Ihr Training verwenden. Wählen Sie das Modell aus `nova-micro/prod`, `nova-lite/prod`, `nova-pro/prod` oder dem S3-Pfad für den Checkpoint nach dem Training (`s3://<escrow bucket>/<job id>/outputs/checkpoints`) aus.
  + `replicas`: die Anzahl der Datenverarbeitungs-Instances, die für das verteilte Training verwendet werden sollen. Die verfügbaren Werte variieren abhängig vom ausgewählten Modell. Amazon Nova Micro unterstützt 2, 4 oder 8 Replikate. Amazon Nova Lite unterstützt 4, 8, 16 oder 32 Replikate. Amazon Nova Pro unterstützt 6, 12 oder 24 Replikate.
  + `data_s3_path`: Der S3-Speicherort des Trainingsdatensatzes, der eine JSONL-Datei ist. Diese Datei muss sich in derselben AWS-Konto Region wie der Cluster befinden. Alle S3-Standorte innerhalb des angegebenen S3-Pfads müssen sich im selben Konto und in derselben Region befinden.
  + `validation_data_s3_path`: (Optional) Der S3-Speicherort des Validierungsdatensatzes, der eine JSONL-Datei ist. Diese Datei muss sich im selben Konto und derselben Region wie der Cluster befinden. Alle S3-Standorte innerhalb des angegebenen S3-Pfads müssen sich im selben Konto und in derselben Region befinden.
  + `output_s3_path`: Der S3-Speicherort, an dem das Manifest und die TensorBoard Protokolle gespeichert sind. Alle S3-Standorte innerhalb des angegebenen S3-Pfads müssen sich im selben Konto und in derselben Region befinden.
+ **Konfiguration des Trainings**
  + `max_length`: Die maximale Sequenzlänge in Token. Dies bestimmt die Größe des Kontextfensters für das Training. Der maximal unterstützte Wert beträgt 65 536 Token für SFT.

    Längere Sequenzen verbessern die Trainingseffizienz auf Kosten eines erhöhten Speicherbedarfs. Wir empfehlen Ihnen, den Parameter `max_length` an Ihre Datenverteilung anzupassen. 
+ **Trainer-Einstellungen**
  + `max_epochs`: die Anzahl abgeschlossener Durchläufe durch Ihren Trainingsdatensatz

    Im Allgemeinen benötigen größere Datensätze weniger Epochen zum Konvergieren und kleinere Datensätze mehr Epochen. Wir empfehlen, dass Sie die Anzahl der Epochen an die Größe der Daten anpassen.
+ **Modelleinstellungen**
  + `hidden_dropout`: Die Wahrscheinlichkeit, dass versteckte Zustandsausgaben verloren gehen. Erhöhen Sie diesen Wert um etwa 0,0 bis 0,2, um eine Überanpassung bei kleineren Datensätzen zu vermeiden. Zulässig sind alle Werte zwischen 0 und 1, beide inklusive.
  + `attention_dropout`: Die Wahrscheinlichkeit, dass Aufmerksamkeitsgewichtungen verloren gehen. Dieser Parameter kann bei der Generalisierung helfen. Zulässig sind alle Werte zwischen 0 und 1, beide inklusive.
  + `ffn_dropout`: Die Wahrscheinlichkeit, dass Ausgaben eines Feed-Forward-Netzwerks verloren gehen. Zulässig sind alle Werte zwischen 0 und 1, beide inklusive.
+ **Konfiguration des Optimierers**
  + `lr`: Die Lernrate, die die Schrittgröße während der Optimierung steuert. Gültige Werte liegen zwischen 1e-6 und 1e-3, beide inklusive. Für eine gute Leistung empfehlen wir Werte zwischen 1e-6 und 1e-4.
  + `name`: Der Optimierer-Algorithmus. Derzeit wird nur `distributed_fused_adam` unterstützt.
  + `weight_decay`: Die Stärke der L2-Regularisierung. Höhere Werte (zwischen 0,01 und 0,1) erhöhen die Regularisierung.
  + `warmup_steps`: Die Anzahl der Schritte zur schrittweisen Erhöhung der Lernrate. Dies verbessert die Trainingsstabilität. Zulässig sind alle Werte zwischen 1 und 20, beide inklusive.
  + `min_lr`: Die minimale Lernrate am Ende des Rückgangs. Gültige Werte liegen zwischen 0 und 1 (beide inklusive), müssen jedoch unter der Lernrate liegen.

## Schnellstart mit umfassendem SFT-Rezept
<a name="nova-sft-1-quick-start"></a>

Im Folgenden finden Sie ein Rezept für SFT mit vollem Rang, mit dem Sie schnell einen SFT-Job in einem Cluster starten können. SageMaker HyperPod Bei diesem Rezept wird auch davon ausgegangen, dass Sie mit den richtigen Anmeldeinformationen eine Verbindung zu Ihrem SageMaker HyperPod Cluster hergestellt haben. AWS 

```
run:
  name: "my-sft-micro-job" # gets appended with a unique ID for HP jobs
  model_type: "amazon.nova-micro-v1:0:128k"
  model_name_or_path: "nova-micro/prod"
  replicas: 2
  data_s3_path: s3:Replace with your S3 bucket name/input.jsonl
  validation_data_s3_path: [OPTIONAL] s3:your S3 bucket name/input.jsonl
  output_s3_path: [S3_PATH_TO_STORE_MANIFEST]

## training specific configs
training_config:
  max_length: 32768
  save_steps: 100000
  replicas: ${recipes.run.replicas}
  micro_batch_size: 1
  task_type: sft
  global_batch_size: 64
  weights_only: True
  allow_percentage_invalid_samples: 10

  exp_manager:
    exp_dir: null
    create_wandb_logger: False
    create_tensorboard_logger: True
      project: null
      name: null
    checkpoint_callback_params:
      monitor: step
      save_top_k: 10
      mode: max
      every_n_train_steps: ${recipes.training_config.save_steps}
      save_last: True
    create_early_stopping_callback: True
    early_stopping_callback_params:
      min_delta: 0.001
      mode: min
      monitor: "val_loss"
      patience: 2

  trainer:
    log_every_n_steps: 1
    max_epochs: -1
    max_steps: 16
    limit_test_batches: 0
    gradient_clip_val: 1.0
    num_nodes: ${recipes.training_config.replicas}

  model:
    hidden_dropout: 0.0 # Dropout probability for hidden state transformer.
    attention_dropout: 0.0 # Dropout probability in the attention layer.
    ffn_dropout: 0.0 # Dropout probability in the feed-forward layer.
    sequence_parallel: True
    optim:
      lr: 1e-5
      name: distributed_fused_adam
      bucket_cap_mb: 10
      contiguous_grad_buffer: False
      overlap_param_sync: False
      contiguous_param_buffer: False
      overlap_grad_sync: False
      adam_w_mode: true
      eps: 1e-06
      weight_decay: 0.0
      betas:
        - 0.9
        - 0.999
      sched:
        name: CosineAnnealing
        warmup_steps: 10
        constant_steps: 0
        min_lr: 1e-6

    mm_cfg:
      llm:
        freeze: false
      image_projector:
        freeze: true
        require_newline: true
      video_projector:
        freeze: true
        require_newline: false

    peft:
      peft_scheme: null

    training_validation:
      loader:
        args:
          data_loader_workers: 1
          prefetch_factor: 2
      collator:
        args:
          force_image_at_turn_beginning: false
```

## Beispiel für ein Full-Rank-Rezept
<a name="nova-sft-1-sample-recipe"></a>

Im Folgenden finden Sie ein Beispiel für ein Full-Rank-Rezept für SFT, bei dem alle Komponenten ordnungsgemäß konfiguriert sind.

```
## Run config
run:
    name: "my-sft-run"              # A descriptive name for your training job
    model_type: "amazon.nova-lite-v1:0:300k"  # Model variant specification
    model_name_or_path: "nova-lite/prod"      # Base model path
    replicas: 4                     # Number of compute instances for training
    data_s3_path: s3:Replace with your S3 bucket name/input.jsonl
    validation_data_s3_path: [OPTIONAL] s3:your S3 bucket name/input.jsonl
    output_s3_path: [S3_PATH_TO_STORE_MANIFEST]

## Training specific configs
training_config:
    max_length: 32768               # Maximum context window size (tokens)

    trainer:
        max_epochs: 2               # Number of training epochs

    model:
        hidden_dropout: 0.0          # Dropout for hidden states
        attention_dropout: 0.0       # Dropout for attention weights
        ffn_dropout: 0.0             # Dropout for feed-forward networks

        optim:
            lr: 1e-5                 # Learning rate
            name: distributed_fused_adam  # Optimizer algorithm
            adam_w_mode: true        # Enable AdamW mode
            eps: 1e-06               # Epsilon for numerical stability
            weight_decay: 0.0        # L2 regularization strength
            betas:                   # Adam optimizer betas
                - 0.9
                - 0.999
            sched:
                warmup_steps: 10     # Learning rate warmup steps
                constant_steps: 0    # Steps at constant learning rate
                min_lr: 1e-6         # Minimum learning rate

        peft:
            peft_scheme: null        # Set to null for full-parameter fine-tuning
```

## Einschränkungen
<a name="nova-sft-1-limitations"></a>

Das Veröffentlichen von Metriken in Weights & Biases wird nicht unterstützt.

Folgen Sie den Anweisungen unter [Auswählen von Hyperparametern](https://docs.aws.amazon.com/nova/latest/userguide/customize-fine-tune-hyperparameters.html), um die Hyperparameter anzupassen.

## Parametereffiziente Optimierung (PEFT)
<a name="nova-fine-tune-peft"></a>

Bei der parametereffizienten Optimierung (PEFT) wird eine kleine Anzahl zusätzlicher Gewichtungen neu trainiert, um ein Basismodell an neue Aufgaben oder Domains anzupassen. Insbesondere beim Low-Rank Adapter (LoRA)-PEFT werden Basismodelle effizient optimiert, indem trainierbare Gewichtsmatrizen mit niedrigem Rang in spezifische Modellebenen eingeführt werden, wodurch die Anzahl der trainierbaren Parameter reduziert wird und gleichzeitig die Modellqualität erhalten bleibt.

Ein LoRA-PEFT-Adapter erweitert das Basismodell durch die Integration leichter Adapterschichten, die die Gewichtungen des Modells während der Inferenz modifizieren und gleichzeitig die ursprünglichen Modellparameter beibehalten. Dieser Ansatz wird auch als eine der kostengünstigsten Optimierungstechniken angesehen. Weitere Informationen finden Sie unter [Optimieren von Modellen mit Adapter-Inferenzkomponenten](https://docs.aws.amazon.com/sagemaker/latest/dg/realtime-endpoints-adapt.html).

Sie sollten LoRA PEFT in den folgenden Szenarien verwenden:
+ Sie möchten mit einem schnellen Trainingsverfahren beginnen.
+ Die Leistung des Basismodells ist bereits zufriedenstellend. In diesem Fall besteht das Ziel von LoRA PEFT darin, dessen Fähigkeiten für mehrere verwandte Aufgaben wie Textzusammenfassung oder Sprachübersetzung zu verbessern. Die Regularisierungseigenschaften von LoRA PEFT tragen dazu bei, Überanpassungen zu verhindern und das Risiko zu minimieren, dass das Modell die Quelldomain „vergisst“. Dadurch wird sichergestellt, dass das Modell vielseitig und an verschiedene Anwendungen anpassbar bleibt.
+ Sie möchten Szenarien zur Optimierung von Anweisungen mit relativ kleinen Datensätzen durchführen. LoRA PEFT schneidet bei kleineren, aufgabenspezifischen Datensätzen besser ab als bei breiteren, größeren Datensätzen.
+ Sie haben große, beschriftete Datensätze, die die Grenzwerte für Amazon-Bedrock-Anpassungsdaten überschreiten. In diesem Fall können Sie LoRa PEFT auf SageMaker KI verwenden, um bessere Ergebnisse zu erzielen.
+ Wenn Sie durch die Feinabstimmung von Amazon Bedrock bereits vielversprechende Ergebnisse erzielt haben, kann LoRa PEFT in SageMaker KI dazu beitragen, die Modell-Hyperparameter weiter zu optimieren.

Zu den Amazon-Nova-Parametern, die mit LoRA PEFT verfügbar sind, gehören:
+ **Ausführungskonfiguration**
  + `name`: Ein aussagekräftiger Name für Ihren Trainingsjob. Dies hilft Ihnen dabei, Ihren Job in der zu identifizieren. AWS-Managementkonsole
  + `model_type`: Die zu verwendende Nova-Modellvariante. Die verfügbaren Optionen sind `amazon.nova-micro-v1:0:128k`, `amazon.nova-lite-v1:0:300k` oder `amazon.nova-pro-v1:0:300k`.
  + `model_name_or_path`: Der Pfad zum Basismodell, das Sie für Ihr Training verwenden. Wählen Sie das Modell aus, das Sie verwenden möchten. Die verfügbaren Optionen sind `nova-micro/prod`, `nova-lite/prod`, `nova-pro/prod`, oder der S3-Pfad für den Checkpoint nach dem Training (`s3://<escrow bucket>/<job id>/outputs/checkpoints`).
  + `replicas`: Die Anzahl der Datenverarbeitungs-Instances, die für das verteilte Training verwendet werden sollen. Die verfügbaren Werte variieren abhängig vom verwendeten Modell. Amazon Nova Micro unterstützt 2, 4 oder 8 Replikate. Amazon Nova Lite unterstützt 4, 8, 16 oder 32 Replikate. Amazon Nova Pro unterstützt 6, 12 oder 24 Replikate.
  + `output_s3_path`: Der S3-Speicherort, an dem das Manifest und die TensorBoard Protokolle gespeichert sind. Alle S3-Standorte innerhalb des angegebenen S3-Pfads müssen sich im selben Konto und in derselben Region befinden.
+ **Konfiguration des Trainings**
  + `max_length`: Die maximale Sequenzlänge in Token. Dies bestimmt die Größe des Kontextfensters für das Training. Der maximal unterstützte Wert beträgt 65 536 Token für LoRA PEFT.

    Längere Sequenzen verbessern die Trainingseffizienz auf Kosten eines erhöhten Speicherbedarfs. Wir empfehlen Ihnen, den Parameter `max_length` an Ihre Datenverteilung anzupassen.
+ **Trainer-Einstellungen**
  + `max_epochs`: die Anzahl abgeschlossener Durchläufe durch Ihren Trainingsdatensatz Sie können entweder `max_steps` oder `max_epochs` festlegen, wir empfehlen jedoch nicht, beide Werte festzulegen. Der Höchstwert ist 5.

    Im Allgemeinen benötigen größere Datensätze weniger Epochen zum Konvergieren und kleinere Datensätze mehr Epochen. Wir empfehlen, dass Sie die Anzahl der Epochen an die Größe der Daten anpassen.
+ **Modelleinstellungen**
  + `hidden_dropout`: Die Wahrscheinlichkeit, dass versteckte Zustandsausgaben verloren gehen. Erhöhen Sie diesen Wert um etwa 0,0 bis 0,2, um eine Überanpassung bei kleineren Datensätzen zu vermeiden. Zulässig sind alle Werte zwischen 0 und 1, beide inklusive.
  + `attention_dropout`: Die Wahrscheinlichkeit, dass Aufmerksamkeitsgewichtungen verloren gehen. Dieser Parameter kann bei der Generalisierung helfen. Zulässig sind alle Werte zwischen 0 und 1, beide inklusive.
  + `ffn_dropout`: Die Wahrscheinlichkeit, dass Ausgaben eines Feed-Forward-Netzwerks verloren gehen. Zulässig sind alle Werte zwischen 0 und 1, beide inklusive.
+ **Konfiguration des Optimierers**
  + `lr`: Die Lernrate, die die Schrittgröße während der Optimierung steuert. Für eine gute Leistung empfehlen wir Werte zwischen 1e-6 und 1e-4. Zulässig sind alle Werte zwischen 0 und 1, beide inklusive.
  + `name`: Der Optimierer-Algorithmus. Derzeit wird nur `distributed_fused_adam` unterstützt.
  + `weight_decay`: Die Stärke der L2-Regularisierung. Höhere Werte (zwischen 0,01 und 0,1) erhöhen die Regularisierung.
  + `warmup_steps`: Die Anzahl der Schritte zur schrittweisen Erhöhung der Lernrate. Dies verbessert die Trainingsstabilität. Zulässig sind alle Werte zwischen 1 und 20, beide inklusive.
  + `min_lr`: Die minimale Lernrate am Ende des Rückgangs. Gültige Werte liegen zwischen 0 und 1 (beide inklusive), müssen jedoch unter der Lernrate liegen.
+ **LoRA-Konfigurationsparameter**
  + `peft_scheme`: Wird auf `lora` gesetzt, um eine Anpassung auf niedrigen Rängen zu ermöglichen. 
  + `alpha`: Der Skalierungsfaktor für LoRA-Gewichtungen. Dieser Wert ist in der Regel auf denselben Wert wie `adapter_dim` gesetzt.
  + `adaptor_dropout`: Der Regularisierungsparameter für LoRA.

### PEFT-Rezept
<a name="nova-sft-1-peft-recipe"></a>

Das Folgende ist ein Rezept für LoRA PEFT.

```
## Run config
run:
    name: "my-lora-run"             # A descriptive name for your training job
    model_type: "amazon.nova-lite-v1:0:300k"  # Model variant specification
    model_name_or_path: "nova-lite/prod"      # Base model path
    replicas: 4                     # Number of compute instances for training
    output_s3_path: [S3_PATH_TO_STORE_MANIFEST]

## Training specific configs
training_config:
    max_length: 32768               # Maximum context window size (tokens)

    trainer:
        max_epochs: 2               # Number of training epochs

    model:
        hidden_dropout: 0.0          # Dropout for hidden states
        attention_dropout: 0.0       # Dropout for attention weights
        ffn_dropout: 0.0             # Dropout for feed-forward networks

        optim:
            lr: 1e-5                 # Learning rate
            name: distributed_fused_adam  # Optimizer algorithm
            adam_w_mode: true        # Enable AdamW mode
            eps: 1e-06               # Epsilon for numerical stability
            weight_decay: 0.0        # L2 regularization strength
            betas:                   # Adam optimizer betas
                - 0.9
                - 0.999
            sched:
                warmup_steps: 10     # Learning rate warmup steps
                constant_steps: 0    # Steps at constant learning rate
                min_lr: 1e-6         # Minimum learning rate

        peft:
            peft_scheme: "lora"      # Enable LoRA for parameter-efficient fine-tuning
            lora_tuning:
                loraplus_lr_ratio: 8.0  # LoRA+ learning rate scaling factor
                alpha: 32            # Scaling factor for LoRA weights
                adapter_dropout: 0.01  # Regularization for LoRA parameters
```

### Fehlerbehebung
<a name="nova-sft-1-troubleshooting"></a>

Verwenden Sie die folgenden Informationen, um Probleme zu lösen, die auftreten könnten:
+ Der Eingabedatensatz für Training und Validierung sollte sich in kundeneigenen Buckets befinden, nicht in Escrow- oder serviceverwalteten S3-Buckets.
+ Wenn Sie in der den Fehler Region nicht gefunden erhalten AWS CLI, senden Sie den Job erneut, wobei die Region dem Befehl start-job vorangestellt wird. Beispiel: `AWS_REGION=us-east-1 hyperpod start-job ...Job Parameters`.
+ Folgen Sie den Anweisungen unter [Auswählen von Hyperparametern](https://docs.aws.amazon.com/nova/latest/userguide/customize-fine-tune-hyperparameters.html), um die Hyperparameter anzupassen.

# Direct Preference Optimization (DPO)
<a name="nova-dpo"></a>

Direct Preference Optimization (DPO) ist eine effiziente Methode zur Optimierung von Basismodellen, bei der gepaarte Vergleichsdaten verwendet werden, um die Modellergebnisse an den menschlichen Präferenzen auszurichten. Dieser Ansatz ermöglicht eine direkte Optimierung des Modellverhaltens auf der Grundlage von menschlichem Feedback darüber, welche Reaktionen wünschenswerter sind.

Sowohl Full-Rank-DPO als auch Low-Rank Adapter (LoRA)-DPO sind verfügbar.

**Anforderungen an das Datenformat**  
Sowohl bei Full-Rank- als auch bei LoRA-DPO ähneln die Anforderungen an das Trainingsdatenformat denen von SFT. Bei DPO muss der letzte Zug jedoch Präferenzpaare haben. Hier ein Beispiel für das DPO-Datenformat:

```
// N-1 turns same as SFT format
{
    "role": "assistant",
    "candidates": [
        {
            "content": [
                {
                    "text": "..."
                } // content list can contain multiple 'text' objects
            ],
            "preferenceLabel": "preferred"
        },
        {
            "content": [
                {
                    "text": "..."
                } // content list can contain multiple 'text' objects
            ],
            "preferenceLabel": "non-preferred"
        }
    ]
}
```

Hier ein weiteres vollständiges DPO-Textbeispiel:

```
{
    "system": [
        {
            "text": "..."
        }
    ],
    "messages":[
        {
            "role": "user",
            "content": [
                {
                    "text": "..."
                }
            ]
        },
        {
            "role": "assistant",
            "content": [
                {
                    "text": "..."
                }
            ]
        },
        {
            "role": "user",
            "content": [
                {
                    "text": "..."
                }
            ]
        },
        {
            "role": "assistant",
            "candidates": [
                {
                    "content": [
                        {
                            "text": "..."
                        }
                    ],
                    "preferenceLabel": "preferred"
                },
                {
                    "content": [
                        {
                            "text": "..."
                        }
                    ],
                    "preferenceLabel": "non-preferred"
                }
            ]
        }
    ],
}
```

Hier ein vollständiges DPO-Image-Beispiel:

```
{
    "system": [
        {
            "text": "..."
        }
    ],
    "messages":[
        {
            "role": "user",
            "content": [
                {
                    "text": "..."
                },
                {
                    "text": "..."
                },
                {
                    "image": {
                        "format": "jpeg",
                        "source": {
                            "s3Location": {
                                "uri": "s3://your-bucket/your-path/your-image.jpg",
                                "bucketOwner": "your-aws-account-id"
                            }
                        }
                    }
                } // "content" can have multiple "text" and "image" objects.
                 // max image count is 10
            ]
        },
        {
            "role": "assistant",
            "content": [
                {
                    "text": "..."
                }
            ]
        },
        {
            "role": "user",
            "content": [
                {
                    "text": "..."
                },
                {
                    "text": "..."
                },
                {
                    "image": {
                        "format": "jpeg",
                        "source": {
                            "s3Location": {
                                "uri": "s3://your-bucket/your-path/your-image.jpg",
                                "bucketOwner": "your-aws-account-id"
                            }
                        }
                    }
                } // "content" can have multiple "text" and "image" objects.
                 // max image count is 10
            ]
        },
        {
            "role": "assistant",
            "candidates": [
                {
                    "content": [
                        {
                            "text": "..."
                        }
                    ],
                    "preferenceLabel": "preferred"
                },
                {
                    "content": [
                        {
                            "text": "..."
                        }
                    ],
                    "preferenceLabel": "non-preferred"
                }
            ]
        }
    ],
}
```

Es gelten weitere Einschränkungen für die Eingabedatensätze. Weitere Informationen finden Sie unter [Datensatzeinschränkungen](https://docs.aws.amazon.com/nova/latest/userguide/fine-tune-prepare-data-understanding.html#custom-fine-tune-constraints). Wir empfehlen, dass Sie mindestens 1 000 Präferenzpaare angeben, um ein effektives Training zu gewährleisten. Hochwertige Präferenzdaten führen zu effizienteren Ergebnissen.

Wir empfehlen, in den folgenden Szenarien DPO zu verwenden:
+ Optimierung für subjektive Ergebnisse, die eine Anpassung an spezifische menschliche Präferenzen erfordern
+ Anpassung der Tonalität, des Stils oder der inhaltlichen Merkmale des Modells an die gewünschten Reaktionsmuster
+ Vornahme gezielter Verbesserungen an einem bestehenden Modell auf der Grundlage von Benutzerfeedback und Fehleranalysen
+ Beibehaltung einer gleichbleibenden Ausgabequalität in verschiedenen Anwendungsfällen
+ Implementierung von Integritätsschutz durch bevorzugte Reaktionsmuster
+ Training mit belohnungsfreiem bestärkenden Lernen
+ Ausschließliche Verwendung von Präferenzdaten anstelle von bewerteten oder gekennzeichneten Daten
+ Verbesserung des Modells bei differenzierten Ausrichtungsaufgaben wie Nützlichkeit, Harmlosigkeit oder Ehrlichkeit

## Full-Rank-DPO
<a name="customize-fine-tune-hyperpod-dpo-fr"></a>

Die Amazon-Nova-Parameter, die für Full-Rank-DPO verfügbar sind, lauten wie folgt:
+ **Ausführungskonfiguration**
  + `name`: Ein aussagekräftiger Name für Ihren Trainingsjob. Dies hilft Ihnen dabei, Ihren Job in der zu identifizieren. AWS-Managementkonsole
  + `model_type`: Die zu verwendende Nova-Modellvariante. Die verfügbaren Optionen sind `amazon.nova-micro-v1:0:128k`, `amazon.nova-lite-v1:0:300k` oder `amazon.nova-pro-v1:0:300k`.
  + `model_name_or_path`: Der Pfad zum Basismodell. Wählen Sie das Modell aus `nova-micro/prod`, `nova-lite/prod`, `nova-pro/prod` oder dem S3-Pfad für den Checkpoint nach dem Training (`s3://<escrow bucket>/<job id>/outputs/checkpoints`) aus.
  + `replicas`: die Anzahl der Datenverarbeitungs-Instances, die für das verteilte Training verwendet werden sollen. Die verfügbaren Werte variieren abhängig vom ausgewählten Modell. Amazon Nova Micro unterstützt 2, 4 oder 8 Replikate. Amazon Nova Lite unterstützt 4, 8, 16 oder 32 Replikate. Amazon Nova Pro unterstützt 6, 12 oder 24 Replikate.
  + `data_s3_path`: Der S3-Speicherort des Trainingsdatensatzes, der eine JSONL-Datei ist. Diese Datei muss sich im selben Konto und derselben Region wie der Cluster befinden. Alle angegebenen S3-Standorte müssen sich im selben Konto und in derselben Region befinden.
  + `validation_data_s3_path`: Der S3-Speicherort des Validierungsdatensatzes, der eine JSONL-Datei ist. Diese Datei muss sich im selben AWS-Konto und derselben AWS-Region wie der Cluster befinden. Alle angegebenen S3-Standorte müssen sich im selben Konto und in derselben Region befinden.
+ **Konfiguration des Trainings**
  + `max_length`: Die maximale Sequenzlänge in Token. Dies bestimmt die Größe des Kontextfensters für das Training. Der maximal unterstützte Wert beträgt 32 768 Token für DPO.

    Längere Sequenzen verbessern die Trainingseffizienz auf Kosten eines erhöhten Speicherbedarfs. Wir empfehlen Ihnen, den Parameter `max_length` an Ihre Datenverteilung anzupassen.
+ **Trainer-Einstellungen**
  + `max_epochs`: die Anzahl abgeschlossener Durchläufe durch Ihren Trainingsdatensatz

    Im Allgemeinen benötigen größere Datensätze weniger Epochen zum Konvergieren und kleinere Datensätze mehr Epochen. Wir empfehlen, dass Sie die Anzahl der Epochen an die Größe der Daten anpassen.
+ **Modelleinstellungen**
  + `hidden_dropout`: Die Wahrscheinlichkeit, dass versteckte Zustandsausgaben verloren gehen. Erhöhen Sie diesen Wert um etwa 0,0 bis 0,2, um eine Überanpassung bei kleineren Datensätzen zu vermeiden. Zulässig sind alle Werte zwischen 0 und 1, beide inklusive.
  + `attention_dropout`: Die Wahrscheinlichkeit, dass Aufmerksamkeitsgewichtungen verloren gehen. Dieser Parameter kann bei der Generalisierung helfen. Zulässig sind alle Werte zwischen 0 und 1, beide inklusive.
  + `ffn_dropout`: Die Wahrscheinlichkeit, dass Ausgaben eines Feed-Forward-Netzwerks verloren gehen. Zulässig sind alle Werte zwischen 0 und 1, beide inklusive.
+ **Konfiguration des Optimierers**
  + `lr`: Die Lernrate, die die Schrittgröße während der Optimierung steuert. Für eine gute Leistung empfehlen wir Werte zwischen 1e-6 und 1e-4. Zulässig sind alle Werte zwischen 0 und 1, beide inklusive.
  + `name`: Der Optimierer-Algorithmus. Derzeit wird nur `distributed_fused_adam` unterstützt.
  + `weight_decay`: Die Stärke der L2-Regularisierung. Höhere Werte (zwischen 0,01 und 0,1) erhöhen die Regularisierung.
  + `warmup_steps`: Die Anzahl der Schritte zur schrittweisen Erhöhung der Lernrate. Dies verbessert die Trainingsstabilität. Zulässig sind alle Werte zwischen 1 und 20, beide inklusive.
  + `min_lr`: Die minimale Lernrate am Ende des Rückgangs. Gültige Werte liegen zwischen 0 und 1 (beide inklusive), müssen jedoch unter der Lernrate liegen.
+ **DPO-Konfiguration**
  + `beta`: Legt fest, wie genau das Modell an die Trainingsdaten oder das Originalmodell angepasst werden soll. Zulässig sind alle Werte zwischen 0,001 und 0,5, beide inklusive.

    Geben Sie größere Werte an (z. B. 0,5), um mehr vom Verhalten des Referenzmodells beizubehalten und neue Präferenzen langsamer zu erlernen. Geben Sie kleinere Werte an (z. B. 0,01–0,05), um neue Präferenzen schneller zu erlernen, auch wenn die Gefahr besteht, dass sie vom Verhalten des Referenzmodells abweichen.

**Full-Rank-Rezept für DPO**  
Im Folgenden finden Sie ein Full-Rank-Rezept für DPO

```
## Run config
run:
  name: "my-dpo-micro-job"             # A descriptive name for your training job
  model_type: "amazon.nova-micro-v1:0:128k"  # Model variant specification, do not change
  model_name_or_path: "nova-micro/prod"      # Base model path, do not change
  replicas: 2                     # Number of compute instances for training, allowed values are 2, 4, 8
  data_s3_path: s3:Replace with your S3 bucket name/input.jsonl
  validation_data_s3_path: [OPTIONAL] s3:your S3 bucket name/input.jsonl
  output_s3_path: [S3_PATH_TO_STORE_MANIFEST]

## Training specific configs
training_config:
  max_length: 32768               # Maximum context window size (tokens).
  global_batch_size: 64           # Global batch size, allowed values are 16, 32, 64.

  trainer:
    max_epochs: 2                # Number of training epochs

  model:
    hidden_dropout: 0.0          # Dropout for hidden states, must be between 0.0 and 1.0
    attention_dropout: 0.0       # Dropout for attention weights, must be between 0.0 and 1.0
    ffn_dropout: 0.0             # Dropout for feed-forward networks, must be between 0.0 and 1.0

    optim:
      lr: 1e-5                 # Learning rate
      name: distributed_fused_adam  # Optimizer algorithm, do not change
      adam_w_mode: true        # Enable AdamW mode
      eps: 1e-06               # Epsilon for numerical stability
      weight_decay: 0.0        # L2 regularization strength, must be between 0.0 and 1.0
      betas:                   # Adam optimizer betas, must be between 0.0 and 1.0
        - 0.9
        - 0.999
      sched:
        warmup_steps: 10     # Learning rate warmup steps
        constant_steps: 0    # Steps at constant learning rate
        min_lr: 1e-6         # Minimum learning rate, must be lower than lr

    dpo_cfg:
        beta: 0.1               # Strength of preference enforcement. Limits: [0.001, 0.5]

    peft:
        peft_scheme: null        # Disable LoRA, trigger full rank fine tuning
```

## Low-Rank Adapter DPO
<a name="customize-fine-tune-hyperpod-dpo-lora"></a>

Die Amazon-Nova-Parameter, die für Low-Rank Adapter DPO verfügbar sind, lauten wie folgt:
+ **Ausführungskonfiguration**
  + `name`: Ein aussagekräftiger Name für Ihren Trainingsjob. Dies hilft bei der Identifizierung Ihres Jobs in der AWS-Managementkonsole.
  + `model_type`: Die zu verwendende Nova-Modellvariante. Die verfügbaren Optionen sind `amazon.nova-micro-v1:0:128k`, `amazon.nova-lite-v1:0:300k` oder `amazon.nova-pro-v1:0:300k`.
  + `model_name_or_path`: Der Pfad zum Basismodell. Wählen Sie das Modell aus `nova-micro/prod`, `nova-lite/prod`, `nova-pro/prod` oder dem S3-Pfad für den Checkpoint nach dem Training (`s3://<escrow bucket>/<job id>/outputs/checkpoints`) aus.
  + `replicas`: die Anzahl der Datenverarbeitungs-Instances, die für das verteilte Training verwendet werden sollen. Die verfügbaren Werte variieren abhängig vom ausgewählten Modell. Amazon Nova Micro unterstützt 2, 4 oder 8 Replikate. Amazon Nova Lite unterstützt 4, 8, 16 oder 32 Replikate. Amazon Nova Pro unterstützt 6, 12 oder 24 Replikate.
+ **Konfiguration des Trainings**
  + `max_length`: Die maximale Sequenzlänge in Token. Dies bestimmt die Größe des Kontextfensters für das Training. Der maximal unterstützte Wert beträgt 32 768 Token für DPO.

    Längere Sequenzen verbessern die Trainingseffizienz auf Kosten eines erhöhten Speicherbedarfs. Wir empfehlen Ihnen, den Parameter `max_length` an Ihre Datenverteilung anzupassen.
+ **Trainer-Einstellungen**
  + `max_epochs`: die Anzahl abgeschlossener Durchläufe durch Ihren Trainingsdatensatz

    Im Allgemeinen benötigen größere Datensätze weniger Epochen zum Konvergieren und kleinere Datensätze mehr Epochen. Wir empfehlen, dass Sie die Anzahl der Epochen an die Größe der Daten anpassen.
+ **Modelleinstellungen**
  + `hidden_dropout`: Die Wahrscheinlichkeit, dass versteckte Zustandsausgaben verloren gehen. Erhöhen Sie diesen Wert um etwa 0,0 bis 0,2, um eine Überanpassung bei kleineren Datensätzen zu vermeiden. Zulässig sind alle Werte zwischen 0 und 1, beide inklusive.
  + `attention_dropout`: Die Wahrscheinlichkeit, dass Aufmerksamkeitsgewichtungen verloren gehen. Dieser Parameter kann bei der Generalisierung helfen. Zulässig sind alle Werte zwischen 0 und 1, beide inklusive.
  + `ffn_dropout`: Die Wahrscheinlichkeit, dass Ausgaben eines Feed-Forward-Netzwerks verloren gehen. Zulässig sind alle Werte zwischen 0 und 1, beide inklusive.
+ **Konfiguration des Optimierers**
  + `lr`: Die Lernrate, die die Schrittgröße während der Optimierung steuert. Für eine gute Leistung empfehlen wir Werte zwischen 1e-6 und 1e-4. Zulässig sind alle Werte zwischen 0 und 1, beide inklusive.
  + `name`: Der Optimierer-Algorithmus. Derzeit wird nur `distributed_fused_adam` unterstützt.
  + `weight_decay`: Die Stärke der L2-Regularisierung. Höhere Werte (zwischen 0,01 und 0,1) erhöhen die Regularisierung.
  + `warmup_steps`: Die Anzahl der Schritte zur schrittweisen Erhöhung der Lernrate. Dies verbessert die Trainingsstabilität. Zulässig sind alle Werte zwischen 1 und 20, beide inklusive.
  + `min_lr`: Die minimale Lernrate am Ende des Rückgangs. Gültige Werte liegen zwischen 0 und 1 (beide inklusive), müssen jedoch unter der Lernrate liegen.
+ **DPO-Konfiguration**
  + `beta`: Legt fest, wie genau das Modell an die Trainingsdaten oder das Originalmodell angepasst werden soll. Zulässig sind alle Werte zwischen 0,001 und 0,5, beide inklusive.

    Geben Sie größere Werte an (z. B. 0,5), um mehr vom Verhalten des Referenzmodells beizubehalten und neue Präferenzen langsamer zu erlernen. Geben Sie kleinere Werte an (z. B. 0,01–0,05), um neue Präferenzen schneller zu erlernen, auch wenn die Gefahr besteht, dass sie vom Verhalten des Referenzmodells abweichen.
+ **LoRA-Konfigurationsparameter**
  + `peft_scheme`: Setzen Sie diesen Wert auf `lora`, um Low-Rank Adaptation zu aktivieren, wodurch ein effizienteres, kleineres Ausgabemodell generiert wird. Diese LoRA-spezifischen Eigenschaften sind ebenfalls verfügbar:
    + `alpha`: Der Skalierungsfaktor für LoRA-Gewichtungen. Dieser Wert ist in der Regel auf denselben Wert wie `adapter_dim` gesetzt.
    + `adapter_dropout`: Der Regularisierungsparameter für die LoRA-Parameter.

**LoRA-DPO-Rezept**  
Das Folgende ist ein Rezept für LoRA DPO.

```
## Run config
run:
    name: "my-lora-run"             # A descriptive name for your training job
    model_type: "amazon.nova-lite-v1:0:300k"  # Model variant specification, do not change
    model_name_or_path: "nova-lite/prod"      # Base model path, do not change
    replicas: 4                     # Number of compute instances for training. All supported values: {4, 8, 16}
    data_s3_path: s3:Replace with your S3 bucket name/input.jsonl
    validation_data_s3_path: [OPTIONAL] s3:your S3 bucket name/input.jsonl
    output_s3_path: [S3_PATH_TO_STORE_MANIFEST]

## Training specific configs
training_config:
    max_length: 16384               # Maximum context window size (tokens). Should be between [1024, 32768] and multiple of 1024.
                                    # Note: Image dataset for DPO has a limit on 20k samples and 16384 max_length
    global_batch_size: 64           # Total samples per step. Limits: {16, 32, 64, 128, 256}

    trainer:
        max_epochs: 2               # Number of training epochs

    model:
        hidden_dropout: 0.0          # Dropout for hidden states. Limits: [0.0, 1.0]
        attention_dropout: 0.0       # Dropout for attention weights. Limits: [0.0, 1.0]
        ffn_dropout: 0.0             # Dropout for feed-forward networks. Limits: [0.0, 1.0]

        optim:
            lr: 1e-5                 # Learning rate
            name: distributed_fused_adam  # Optimizer algorithm, do not change
            adam_w_mode: true        # Enable AdamW mode
            eps: 1e-08               # Epsilon for numerical stability
            weight_decay: 0.01       # L2 regularization strength
            betas:                   # Adam optimizer betas. Limits: [0.0, 1.0]
                - 0.9
                - 0.999
            sched:
                warmup_steps: 10     # Learning rate warmup steps
                constant_steps: 0    # Steps at constant learning rate
                min_lr: 1e-6         # Minimum learning rate

        dpo_cfg:
            beta: 0.01               # Strength of preference enforcement. Limits: [0.001, 0.5]

        peft:
            peft_scheme: "lora"      # Enable LoRA for parameter-efficient fine-tuning
            lora_tuning:
                loraplus_lr_ratio: 20.0  # LoRA+ learning rate scaling factor. Limits: [0.0, 100.0]
                alpha: 64            # Scaling factor for LoRA weights. [32, 64, 96, 128, 160, 192]
                adapter_dropout: 0.01  # Regularization for LoRA parameters. Limits: [0.0, 1.0]
```

**Einschränkungen**  
Für DPO gelten folgende Einschränkungen:
+ Zwischen-Checkpoints werden nicht zur Bewertung gespeichert und Sie können nicht von einem Zwischen-Checkpoint aus fortfahren. Nur der letzte Checkpoint wird gespeichert.
+ Folgen Sie den Anweisungen unter [Auswählen von Hyperparametern](https://docs.aws.amazon.com/nova/latest/userguide/customize-fine-tune-hyperparameters.html), um die Hyperparameter anzupassen.

# Proximal Policy Optimization (PPO)
<a name="nova-ppo"></a>

Proximal Policy Optimization (PPO) ist der Prozess, bei dem mehrere Machine-Learning-Modelle verwendet werden, um ein Modell zu trainieren und zu bewerten. Die folgenden Modelle sind Teil des PPO-Prozesses:
+ **Akteurtrainings- oder Richtlinienmodell**: Ein Modell der überwachten Optimierung (SFT), das in jeder Epoche optimiert und aktualisiert wird. Die Aktualisierungen erfolgen durch Stichproben von Prompts, Generierung von Vervollständigungen und Aktualisierung der Gewichtungen unter Verwendung eines beschnittenen Ersatzziels. Dadurch wird die Veränderung der Protokollrentabilität pro Token begrenzt, sodass jeder Richtlinienschritt *nahe am vorherigen* liegt und die Stabilität des Trainings gewahrt bleibt.
+ **Modell zur Akteurgenerierung**: Ein Modell, das Prompt-Ausführungen oder -Antworten generiert, die anhand des Belohnungs- und des kritischen Modells bewertet werden. Die Gewichtungen dieses Modells werden in jeder Epoche anhand des Akteurtrainings- oder Richtlinienmodells aktualisiert.
+ **Belohnungsmodell**: Ein Modell mit eingefrorenen Gewichtungen, das zur Bewertung des Modells zur Akteurgenerierung verwendet wird.
+ **Kritisches Modell**: Ein Modell mit nicht eingefrorenen Gewichtungen, das zur Bewertung des Modells zur Akteurgenerierung verwendet wird. Diese Bewertung wird oft als Schätzung der Gesamtbelohnung angesehen, die der Akteur erhält, wenn er die verbleibenden Token generiert.
+ **Ankermodell**: Ein SFT-Modell mit eingefrorenen Gewichtungen, das zur Berechnung der KL-Divergenz zwischen dem Akteurtrainingsmodell und dem Basismodell verwendet wird. Das Ankermodell stellt sicher, dass die Aktualisierungen des Akteurmodells im Vergleich zum Basismodell nicht zu drastisch ausfallen. Drastische Änderungen können zu Instabilität oder Leistungseinbußen führen.

Die Trainingsdaten müssen im JSONL-Format vorliegen, wobei jede Zeile ein einzelnes JSON-Objekt enthält, das ein Trainingsbeispiel darstellt. Ein Beispiel:

```
{
    "turns": ["string", "string", ...], // Required
    "turns_to_mask": [integer, integer, ...], // Required
    "reward_category": "string", // Required
    "meta_data": {} // Optional
}
```
+ `turns` ist ein Array von Konversationszeichenfolgen-Arrays, die die Dialogsequenz darstellen. Diese Zeile enthält System-Prompts, Benutzernachrichten und Bot-Antworten. Benutzernachrichten enden normalerweise mit „Bot:“, um anzugeben, wo die Modellausgabe beginnt. Beispiel, `[["System prompt"], ["User: Question Bot:"], ["Bot response"]]`.
+ `turns_to_mask` ist ein Array von 0-basierten Indizes, die angeben, für welche Züge keine Gradientenaktualisierungen vorgenommen werden sollen. Bei den maskierten Zügen handelt es sich in der Regel um System-Prompts und Benutzerzüge. `[0, 1, 3]` maskiert beispielsweise System-Prompts und Benutzernachrichten (die erste und dritte Nachricht).
+ `reward_category` ist eine Zeichenfolge, die angibt, welche Aspekte der Modellleistung bewertet werden sollen. Sie wird verwendet, um während des Trainings die passende Belohnungsmodellkategorie auszuwählen. Die folgenden Belohnungskategorien sind verfügbar: `default`, `math`, `coding`, `if`, `rag` und `rai`.
+ `meta_data` ist ein optionales Objekt, das zusätzliche Kontext- oder Ground-Truth-Informationen enthält. Dies kann Identifikatoren, Quellinformationen oder Konversationskontext beinhalten. Die Struktur ist je nach Ihren Datensatzanforderungen flexibel.

Hier ist ein Beispieldatensatz:

```
{
    "turns": ["You are a helpful AI assistant.",
        "User: What is ML? Bot:",
        "Machine learning is...", "User: Examples? Bot:",
        "Email spam filtering is..."
    ],
    "turns_to_mask": [0, 1, 3],
    "reward_category": "default",
    "meta_data": {
        "messages": [{
                "role": "system",
                "content": "You are a helpful AI assistant."
            },
            {
                "role": "user",
                "content": "What is ML?"
            },
            {
                "role": "assistant",
                "content": "Machine learning is..."
            },
            {
                "role": "user",
                "content": "Examples?"
            },
            {
                "role": "assistant",
                "content": "Email spam filtering is..."
            }
        ]
    }
}
```

Das Framework für die Belohnungsmodellierung implementiert eine mehrdimensionale Optimierung für unterschiedliche kategoriale Ziele, um eine robuste Modellkonvergenz zu ermöglichen. Die Belohnungskategorie sollte auf der Grundlage der Aufgabe ausgewählt werden, für die das Modell optimiert werden muss. 

Wir empfehlen die folgenden Richtlinien zur Auswahl des richtigen Frameworks für Ihre Aufgaben:
+ `default`: Ein Allzweck-Optimierer für Standard-Konversationsaufgaben und grundlegende Interaktionen. Wird für allgemeine Konversationen und Diskussionen, grundlegende Schreibaufgaben, die Beantwortung einfacher Fragen und nicht spezialisierte Wissensabfragen verwendet. 

  Ein Beispiel:

  ```
  {
      "turns": ["Write a summary of climate change"],
      "turns_to_mask": [0],
      "reward_category": "default"
  }
  ```
+ `math`: Ein spezialisierter Optimierer für mathematische Berechnungen und numerische Überlegungen. Wird für mathematische Problemlösungen, arithmetische Berechnungen, algebraische Gleichungen, geometrische Probleme und statistische Analysen verwendet.

  Ein Beispiel:

  ```
  {
      "turns": ["Calculate the derivative of x²"],
      "turns_to_mask": [0],
      "reward_category": "math"
  }
  ```
+ `coding`: Eine spezielle Kategorie für Abfragen im Zusammenhang mit der Programmierung und Softwareentwicklung. Wird für Codeimplementierung, Unterstützung beim Debuggen, Algorithmusdesign, technische Dokumentation und Fragen zur Systemarchitektur verwendet.

  Ein Beispiel:

  ```
  {
      "turns": ["Write a function to check if a string is palindrome"],
      "turns_to_mask": [0],
      "reward_category": "coding"
  }
  ```
+ `if`: Eine Kategorie für Aufgaben, die eine genaue verfahrenstechnische Ausführung und step-by-step Anleitung erfordern. Wird für mehrstufige Verfahren, sequentielle Anweisungen, die Zerlegung komplexer Aufgaben und die Prozessdokumentation verwendet.

  Ein Beispiel:

  ```
  {
      "turns": ["Provide steps to deploy a web application"],
      "turns_to_mask": [0],
      "reward_category": "if"
  }
  ```
+ `rag`: Eine Belohnungskategorie für Aufgaben, bei denen Abfragen speziell auf der Grundlage von abgerufenen Kontextinformationen beantwortet werden müssen. Wird verwendet, wenn Antworten direkt aus bereitgestellten Referenzmaterialien abgeleitet werden sollen, indem sachliche Inhalte zusammengefasst werden, ohne über die abgerufenen Informationen hinauszugehen. Dadurch wird sichergestellt, dass die Antworten auf dem bereitgestellten Kontext und nicht auf allgemeinem Wissen basieren.

  Ein Beispiel:

  ```
  {
              "turns": ["The Synthesis Report integrates findings from all six IPCC assessment cycles, revealing that global surface temperature has increased 1.1°C from 1850-1900 to 2011-2020, with human activities unequivocally identified as the cause of this warming. Alarmingly, current policies put the world on track for 3.2°C warming by 2100. The document identifies 5 key climate system "tipping points" approaching and emphasizes that greenhouse gas emissions must decline 43% by 2030 (compared to 2019 levels) to limit warming to 1.5°C. Climate-related risks will escalate with every increment of warming, with loss and damage disproportionately affecting vulnerable populations. Despite some progress, climate adaptation remains uneven with significant gaps, and financial flows continue to fall below levels needed for mitigation goals.",
              "What were the key findings of the latest IPCC climate report?"],
              "turns_to_mask": [0, 0],
              "reward_category": "rag"
              }
  ```
+ `rai`: Eine Belohnungskategorie für Aufgaben, die die Anwendung von Prinzipien verantwortungsvoller KI wie Fairness, Transparenz und Ethik erfordern. Wird verwendet, um mögliche Vorurteile in KI-Systemen zu bewerten, Datenschutzaspekte sicherzustellen, ethische Dilemmas anzugehen und inklusive Gestaltungsprinzipien zu fördern.

  Ein Beispiel:

  ```
  {
              "turns": ["Identify potential bias concerns when developing a loan approval algorithm and suggest mitigation strategies"],
              "turns_to_mask": [0],
              "reward_category": "rai"
              }
  ```

**Maskierung von Zügen**  
In Trainingsdatensätzen ist der Parameter `turns_to_mask` entscheidend, um zu steuern, welche Konversationszüge während des Trainings Gradientenaktualisierungen erhalten. Dieses Array von Indizes bestimmt, welche Teile des Dialogs das Modell generieren lernen soll und welche Teile nur als Kontext behandelt werden sollen. Durch die richtige Maskierung wird sichergestellt, dass das Modell geeignete Reaktionsmuster lernt, während das Training aufgrund von System-Prompts oder Benutzereingaben, die die Leistung beeinträchtigen könnten, vermieden wird.

Wir empfehlen, beim Maskieren Folgendes zu beachten:
+ **Index 0 immer maskieren** – System-Prompts sollten niemals Gradientenaktualisierungen erhalten.
+ **Benutzerzüge immer maskieren** – So wird verhindert, dass das Modell lernt, Benutzereingaben zu generieren.
+ **Musterkonsistenz** – Verwenden Sie identische Maskierungsmuster für ähnliche Konversationsstrukturen, z. B. (0, 1, 3, 5) für Dialoge mit mehreren Zügen.
+ **Selektives Training** – Maskieren Sie frühe Bot-Antworten, um das Training auf verbesserte Endreaktionen zu konzentrieren.
+ **Chain-of-thought Konservierung** — Nur Maskensystem und Benutzer wechseln sich beim Training mit Argumentationssequenzen ab.
+ **Qualitätsfilterung** – Maskieren Sie qualitativ minderwertige Assistentenantworten, um Leistungseinbußen zu vermeiden.
+ **Kontextoptimierung** – Stellen Sie sicher, dass durch maskierte Züge nicht der für nachfolgende Antworten benötigte Kontext entfernt wird.

Der Schlüssel zu einer effektiven Maskierung liegt in der Überwachung der Trainingsmetriken und der Validierungsleistung, um festzustellen, ob Ihre Maskierungsstrategie den erforderlichen Kontext beibehält, während Gradientenaktualisierungen auf die gewünschten Modellergebnisse ausgerichtet werden.

**Aktivieren des KL-Divergenzverlusts**  
Um den KL-Divergenzverlust zu aktivieren, muss der Ankerserver aktiviert werden, um die Abweichung der aktuellen Richtlinie von der ursprünglichen Verteilung zu berechnen. Der KL-Verlusttyp muss angegeben werden und die Koeffizienten müssen einen anderen Wert als Null haben. Höhere Koeffizientenwerte tragen dazu bei, dass das Modell nicht wesentlich von der ursprünglichen Richtlinie abweicht, was zu geringeren Änderungen der allgemeinen Leistung führt. Niedrigere Koeffizientenwerte ermöglichen größere Abweichungen von der bisherigen Richtlinie, was zu einer besseren Leistung der Zielkennzahlen führt, sich jedoch auf die allgemeine Leistung auswirkt.

```
ppo_anchor:
  max_length: 8192
  trainer:
    num_nodes: ${recipes.run.cm_replicas}
  model:
    global_batch_size: 32

ppo_actor_train:
  model:
    ######## Use KL in actor loss ########
    kl_loss_type: low_var_kl
    kl_loss_coeff: 0.1

    ######## Use KL in reward model ######
    kl_reward_penalty_coeff: 0.1
```

**Lernrate**  
Die Lernrate für kritische und Richtlinienmodelle kann angepasst werden, wobei 3e-6 der ausgewogene Standardwert ist. Höhere Lernraten führen in der Regel zu Instabilitäten beim Training, die sich anhand von Spitzenwerten der KL-Divergenz und unregelmäßigem Richtlinienverhalten erkennen lassen. Niedrigere Lernraten können zu Konvergenzproblemen und langsamem Lernen führen, was sich in stagnierenden Belohnungen und minimalen Richtlinienaktualisierungen äußert. Die regelmäßige Überwachung von KL-Divergenz, Belohnungswert und Wertverlust hilft bei der Entscheidung, ob die Lernrate während des Trainings angepasst werden sollte.

```
ppo_critic:
  model:
    optim:
      lr: 3e-6

ppo_actor_train:
  model:
    optim:
      lr: 3e-06
```

**Globale Batch-Größe**  
Die globale Batchgröße wirkt sich erheblich auf die PPO-Leistung in Amazon Nova aus, wobei größere Batches im Allgemeinen die Trainingsstabilität und die Steigungsschätzung verbessern und gleichzeitig eine effizientere parallele Verarbeitung ermöglichen. Sehr große Batchgrößen können jedoch zu sinkenden Renditen führen und durch den verfügbaren Speicherplatz eingeschränkt sein, sodass ein sorgfältiges Gleichgewicht mit der Lernrate und anderen Hyperparametern erforderlich ist.

```
ppo_actor_train:
  model:
    global_batch_size: 160
```

Zu den Amazon-Nova-Parametern, die für die Optimierung mit PPO verfügbar sind, gehören:
+ **Ausführungskonfiguration**
  + `actor_train_replicas`: Die Anzahl der Datenverarbeitungs-Instances, die für das Akteurtrianingsmodell verwendet werden sollen. Die verfügbaren Werte variieren abhängig vom ausgewählten Modell. Amazon Nova Micro unterstützt 1 oder 2 Replikate. Amazon Nova Lite unterstützt 1, 2, oder 4 Replikate. Amazon Nova Pro unterstützt 3, 6 oder 12 Replikate.
  + `rm_replicas`: Die Anzahl der Datenverarbeitungs-Instances, die für das Belohnungsmodell verwendet werden sollen. Wir empfehlen, bei beliebiger Modellgröße ein Replikat zu verwenden.
  + `cm_replicas`: Die Anzahl der Datenverarbeitungs-Instances, die für das kritische Modell verwendet werden sollen. Wir empfehlen, bei beliebiger Modellgröße ein Replikat zu verwenden.
  + `actor_generation_replicas`: Die Anzahl der Datenverarbeitungs-Instances, die für das Modell zur Akteurgenerierung verwendet werden sollen. Die verfügbaren Werte variieren abhängig vom ausgewählten Modell. Amazon Nova Micro unterstützt 1 Replikat. Amazon Nova Lite unterstützt 1 oder 2 Replikate. Amazon Nova Pro unterstützt 1 oder 2 Replikate.
  + `am_replicas`: Die Anzahl der Datenverarbeitungs-Instances, die für das Ankermodell verwendet werden sollen. Wir empfehlen, bei beliebiger Modellgröße ein Replikat zu verwenden.
+ **Akteurtrainingskonfiguration (Richtlinienkonfiguration)**
  + `max_steps`: Die maximale Anzahl von Schritten zur Optimierung oder zum Trainieren des Akteurtrainingsmodells. Hier ist ein Schritt als Rollout definiert, gefolgt vom Training des Akteurtrainingsmodells anhand einer Anzahl von Stichproben gemäß `global_batch_size`. Eine Epoche ist als `global_batch_size * trajectory_buffer_scale` definiert.

    Der hier gewählte Wert hängt von Ihrem Anwendungsfall und der Komplexität des Datensatzes ab. Wir empfehlen, mit 65 Epochen oder 520 Schritten zu beginnen, was der Anzahl der Epochen multipliziert mit dem Wert für `trajectory_buffer_scale` entspricht. Einige Aufgaben erfordern jedoch eine längere PPO-Trainingszeit, um dieselbe Leistung zu erzielen.

    Bei PPO können die Trainingsmetriken, wie z. B. der Sättigungsgrad des Belohnungsmodells und die durchschnittliche Aktionsdauer aus der [ml-flow](https://docs.aws.amazon.com/sagemaker/latest/dg/mlflow-create-tracking-server.html)-Konsole, dabei helfen, die optimalen Bewertungspunkte zu ermitteln.
  + `actor_model_max_length`: Die maximale Länge der Eingabedaten, die an die Akteurgenerierungskomponente gesendet werden, um Vervollständigungen zu generieren.
  + `reward_model_max_length`: Die maximale Länge der Eingabedaten, die an den Belohnungsserver gesendet werden, um Abschlüsse zu bewerten.
  + `trajectory_buffer_scale`: Dieser Puffer stellt die Anzahl der mit dem alten Akteurtrainingsmodell (Richtlinienmodell) generierten Rollouts dar, bevor die Gewichtungen aktualisiert und die neuen Rollouts generiert wurden. Die unterstützten Werte sind 1, 2, 4, 8 und 16.

    Wenn `trajectory_buffer_scale` auf 1 festgelegt ist, entspricht das Training den Richtlinien. Das bedeutet, dass die Rollouts mit den neuesten Modellgewichtungen generiert werden, jedoch leidet der Durchsatz darunter. Bei einem Wert von 16 weicht das Modell leicht von der Richtlinie ab, der Durchsatz ist jedoch höher. Wir empfehlen, für jedes Modell mit 8 zu beginnen.
  + `kl_reward_penalty_coeff`: Dieser KL-Divergenzbegriff stellt sicher, dass Aktualisierungen nicht zu drastisch sind und die Richtlinie nicht vom Basis- oder SFT-Modell abgeleitet wird.
  + `kl_loss_coeff`: Dieser Wert bestimmt, wie stark sich die KL-Divergenzstrafe auf das allgemeine Trainingsziel in PPO auswirkt.
  + `kl_loss_type`: Dieser Wert gibt an, wie die Divergenz zwischen aktuellen und Referenzrichtlinienverteilungen berechnet werden soll. Die verfügbaren `kl_loss_types` sind `kl` (Standard-KL-Divergenz), `mse` (mittlerer quadratischer Fehler), `abs` (absolute Differenz zwischen logarithmischen Wahrscheinlichkeiten) und `low_var_kl` (KL-Approximation mit niedriger Varianz).
  + `model.clip_ratio`: Das Akteur-Clipping-Verhältnis (ε) in PPO ist ein Hyperparameter, der begrenzt, wie stark sich die Richtlinie bei jeder Aktualisierung ändern kann.
  + `model.optim.lr`: Die Lernrate, die für das Verlusttraining des Ersatzmodells im Akteurmodell verwendet wird. 
  + `model.lam`: Teil des Prozesses zur Schätzung des Vorteils. Ein höherer λ-Wert verleiht längerfristigen Belohnungen mit höherer Varianz mehr Gewicht, während ein niedrigerer λ-Wert sich mehr auf unmittelbare Belohnungen mit geringerer Varianz, aber stärkerer Verzerrung konzentriert.
  + `model.ent_coeff`: Der Entropieverlust bei PPO fördert die Exploration, indem die Richtlinie bestraft wird, wenn sie zu deterministisch wird (d. h. immer dieselben Aktionen mit hohem Konfidenzwert auswählt).
+ **Konfiguration des Belohnungsmodells**
  + `global_batch_size`: Die Batchgröße für die Bewertung der Abschlüsse anhand des Belohnungsmodells. Wenn `ppo_actor_train.model.global_batch_size` größer als `ppo_reward.model.global_batch_size` ist, werden sie in mehreren Batches verarbeitet. Beachten Sie, dass `ppo_actor_train.model.global_batch_size % ppo_reward.model.global_batch_size` 0 entsprechen muss.
  + `max_length`: Die maximale Kontextlänge des Belohnungsmodells. Dies sollte dieselbe sein wie `ppo_actor_train.model.max_length`.
+ **Konfiguration des kritischen Modells**
  + `global_batch_size`: Die Batchgröße des kritischen Modellwerts. Das kritische Modell liefert Werteinschätzungen für jedes Token in den Antworten, die das Akteurmodell liefert. Die Batchgröße wird für die Inferenz und das Training verwendet.

    Beachten Sie, dass `ppo_actor_train.model.global_batch_size % ppo_critic.model.global_batch_size` 0 und `ppo_actor_train.model.global_batch_size * ppo_actor_train.model.trajectory_buffer_size % ppo_critic.model.global_batch_size == 0` entsprechen muss.
  + `max_length`: Die maximale Kontextlänge des kritischen Modells. Dies sollte dieselbe sein wie `ppo_actor_train.model.max_length`.
  + `model.optim.lr`: Die Lernrate, die für das Verlusttraining des Ersatzmodells im Akteurmodell verwendet wird.
+ **Konfiguration des Ankermodells**
  + `global_batch_size`: Die Batchgröße für die Generierung des logp des eingefrorenen SFT- oder Ankermodells. Beachten Sie, dass `ppo_actor_train.model.global_batch_size % ppo_anchor.model.global_batch_size` 0 entsprechen muss.
  + `max_length`: Die maximale Kontextlänge des Belohnungsmodells. Dies sollte dieselbe sein wie `ppo_actor_train.model.max_length`.
+ **Konfiguration des Modells zur Akteurgenerierung**
  + `actor_model_max_length`: Die maximale Kontextlänge der Komponente zur Generierung des Akteurmodells. Dies sollte dieselbe sein wie `ppo_actor_train.model.max_length`.

**PPO-Rezept**  
Das Folgende ist ein Rezept für PPO.

```
## Run config
run:
  name: ndry-ppo-pro
  model_type: amazon.nova-pro-v1:0:300k
  model_name_or_path: nova-pro/prod
  data_s3_path: s3://testing/train.jsonl # Your training data S3 path

  actor_train_replicas: 6 # Actor train model replicas
  rm_replicas: 1 # Reward model replicas
  cm_replicas: 1 # Critic model replicas
  actor_generation_replicas: 2 # Actor generation model replicas
  am_replicas: 1 # Anchor model replicas

## Training config for each PPO component
ppo_reward:
  max_length: 8192 # model architecture max length
  trainer:
    num_nodes: ${recipes.run.rm_replicas}
  model:
    global_batch_size: 16

ppo_critic:
  max_length: 8192
  trainer:
    num_nodes: ${recipes.run.cm_replicas}
  model:
    global_batch_size: 16
    optim:
      lr: 3e-6
      name: distributed_fused_adam
      adam_w_mode: true
      eps: 1e-06
      weight_decay: 0.0
      betas:
        - 0.9
        - 0.999

ppo_anchor:
  max_length: 8192
  trainer:
    num_nodes: ${recipes.run.am_replicas}
  model:
    global_batch_size: 16

ppo_actor_generation:
  actor_model_max_length: 8192
  trainer:
    num_nodes: ${recipes.run.actor_generation_replicas}

ppo_actor_train:
  max_length: 8192
  max_steps: 520 # Stopping criteria Desired epoch num * trajectory_buffer_scale
  actor_model_max_length: 8192 # truncate input data to max length
  reward_model_max_length: 8192 # truncate input data to max length
  trajectory_buffer_scale: 8
  trainer:
    num_nodes: ${recipes.run.actor_train_replicas}
  model:
    global_batch_size: 160
    ent_coeff: 0
    clip_ratio: 0.2
    lam: 1
    kl_loss_coeff: 0.0
    kl_loss_type: low_var_kl
    kl_reward_penalty_coeff: 0.0
    hidden_dropout: 0.0 # Dropout probability for hidden state transformer.
    attention_dropout: 0.0 # Dropout probability in the attention layer.
    ffn_dropout: 0.0 # Dropout probability in the feed-forward layer.
    optim:
      lr: 3e-06
      name: distributed_fused_adam # only this one is available for p0.
      adam_w_mode: true
      eps: 1e-08
      weight_decay: 0.0
      betas:
        - 0.9
        - 0.999
```

**Einschränkungen**  
Für PPO gelten folgende Einschränkungen:
+ Zwischen-Checkpoints werden nicht zur Bewertung gespeichert und Sie können nicht von einem Zwischen-Checkpoint aus fortfahren. Nur der letzte Checkpoint wird gespeichert.
+ Multimodale Datensätze werden nicht unterstützt.
+ Trainingsjobs werden nicht automatisch beendet. Sie müssen den Job mit der SageMaker HyperPod CLI beenden.
+ Trainingsmetriken für Kritiker werden auf TensorBoard nicht unterstützt.
+ Folgen Sie den Anweisungen unter [Auswählen von Hyperparametern](https://docs.aws.amazon.com/nova/latest/userguide/customize-fine-tune-hyperparameters.html), um die Hyperparameter anzupassen.