

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.

# Direkte Präferenzoptimierung (DPO)
<a name="nova-dpo-smtj"></a>

## -Übersicht
<a name="nova-dpo-smtj-overview"></a>

Direct Preference Optimization (DPO) ist eine Alignment-Technik, bei der grundlegende Modelle mithilfe gepaarter Vergleichsdaten verfeinert werden, um die Modellergebnisse an den menschlichen Präferenzen auszurichten. Im Gegensatz zu Methoden des Reinforcement-Learnings optimiert DPO das Modellverhalten direkt auf der Grundlage von menschlichem Feedback darüber, welche Reaktionen wünschenswerter sind, und bietet so einen stabileren und skalierbareren Ansatz.

**Warum DPO verwenden**

Fundamentmodelle können zwar Ergebnisse liefern, die zwar sachlich korrekt sind, aber nicht den spezifischen Benutzerbedürfnissen, Unternehmenswerten oder Sicherheitsanforderungen entsprechen. DPO behebt dieses Problem, indem es Ihnen ermöglicht:
+ Passen Sie Modelle an die gewünschten Verhaltensmuster an
+ Reduzieren Sie unerwünschte oder schädliche Ergebnisse
+ Stimmen Sie die Antworten der Modelle mit den Richtlinien für Markensprache und Kommunikation ab
+ Verbessern Sie die Antwortqualität auf der Grundlage des Feedbacks von Fachexperten
+ Implementieren Sie Sicherheitsvorkehrungen durch bevorzugte Reaktionsmuster

**Wie funktioniert DPO**

DPO verwendet gepaarte Beispiele, bei denen menschliche Bewerter angeben, welche von zwei möglichen Antworten bevorzugt wird. Das Modell wird darauf trainiert, die Wahrscheinlichkeit der Generierung bevorzugter Antworten zu maximieren und gleichzeitig unerwünschte Antworten zu minimieren.

**Wann sollte DPO verwendet werden**

Verwenden Sie DPO in den folgenden Szenarien:
+ Optimierung für subjektive Ergebnisse, die eine Abstimmung mit bestimmten menschlichen Präferenzen erfordern
+ Anpassung der Tonalität, des Stils oder der inhaltlichen Merkmale des Modells
+ Vornahme gezielter Verbesserungen auf der Grundlage von Benutzerfeedback und Fehleranalysen
+ Aufrechterhaltung einer gleichbleibenden Ausgabequalität für verschiedene Anwendungsfälle
+ Training mit belohnungsfreiem Reinforcement-Learning, bei dem ausschließlich Präferenzdaten verwendet werden

## Unterstützte Modelle und Techniken
<a name="nova-dpo-smtj-models"></a>

DPO unterstützt sowohl die vollständige Parameter-Feinabstimmung als auch LoRa (Low-Rank Adaptation):


| Modell | Unterstützte Eingaben | Instance-Typ | Empfohlene Anzahl von Instances | Erlaubte Anzahl von Instances | 
| --- | --- | --- | --- | --- | 
| Amazon Nova Micro | Text | ml.p5.48xlarge | 2 | 2, 4, 8 | 
| Amazon Nova Lite | Text, Bild | ml.p5.48xlarge | 4 | 2, 4, 8, 16 | 
| Amazon Nova Pro | Text, Bild | ml.p5.48xlarge | 6 | 6, 12, 24 | 

**Trainingsansätze**
+ **DPO mit vollem Rang**: Aktualisiert alle Modellparameter. Bietet möglicherweise eine bessere Ausrichtungsqualität, erfordert jedoch mehr Rechenressourcen und produziert größere Modelle.
+ **LoRa DPO**: Verwendet leichte Adapter für eine parametereffiziente Feinabstimmung. Ermöglicht effizienteres Training und Einsatz mit Modellen mit kleinerem Output bei gleichzeitiger Beibehaltung einer guten Alignment-Qualität.

Für die meisten Anwendungsfälle bietet der LoRa-Ansatz ausreichende Anpassungsmöglichkeiten bei deutlich verbesserter Effizienz.

## Data format (Datenformat)
<a name="nova-dpo-smtj-data"></a>

DPO-Trainingsdaten folgen demselben Format wie SFT, mit der Ausnahme, dass die letzte Runde des Assistenten Präferenzpaare mit `preferred` und Labels enthalten muss. `non-preferred`

### Grundstruktur
<a name="nova-dpo-smtj-data-structure"></a>

Die letzte Runde des Assistenten verwendet ein `candidates` Array anstelle von`content`:

```
{
  "role": "assistant",
  "candidates": [
    {
      "content": [
        {
          "text": "This is the preferred response."
        }
      ],
      "preferenceLabel": "preferred"
    },
    {
      "content": [
        {
          "text": "This is the non-preferred response."
        }
      ],
      "preferenceLabel": "non-preferred"
    }
  ]
}
```

### Vollständiges Textbeispiel
<a name="nova-dpo-smtj-data-text-example"></a>

```
{
  "schemaVersion": "bedrock-conversation-2024",
  "system": [
    {
      "text": "You are a helpful assistant."
    }
  ],
  "messages": [
    {
      "role": "user",
      "content": [
        {
          "text": "What is the capital of France?"
        }
      ]
    },
    {
      "role": "assistant",
      "content": [
        {
          "text": "The capital of France is Paris."
        }
      ]
    },
    {
      "role": "user",
      "content": [
        {
          "text": "Tell me more about it."
        }
      ]
    },
    {
      "role": "assistant",
      "candidates": [
        {
          "content": [
            {
              "text": "Paris is the capital and largest city of France, known for the Eiffel Tower, world-class museums like the Louvre, and its rich cultural heritage."
            }
          ],
          "preferenceLabel": "preferred"
        },
        {
          "content": [
            {
              "text": "Paris is a city in France."
            }
          ],
          "preferenceLabel": "non-preferred"
        }
      ]
    }
  ]
}
```

### Beispiel mit Bildern
<a name="nova-dpo-smtj-data-image-example"></a>

```
{
  "schemaVersion": "bedrock-conversation-2024",
  "system": [
    {
      "text": "You are a helpful assistant."
    }
  ],
  "messages": [
    {
      "role": "user",
      "content": [
        {
          "text": "Describe this image."
        },
        {
          "image": {
            "format": "jpeg",
            "source": {
              "s3Location": {
                "uri": "s3://{{your-bucket}}/{{your-path}}/image.jpg",
                "bucketOwner": "{{your-aws-account-id}}"
              }
            }
          }
        }
      ]
    },
    {
      "role": "assistant",
      "candidates": [
        {
          "content": [
            {
              "text": "The image shows a detailed description with relevant context and observations."
            }
          ],
          "preferenceLabel": "preferred"
        },
        {
          "content": [
            {
              "text": "This is a picture."
            }
          ],
          "preferenceLabel": "non-preferred"
        }
      ]
    }
  ]
}
```

### Datensatzanforderungen
<a name="nova-dpo-smtj-data-requirements"></a>
+ **Format**: Einzelne JSONL-Datei für das Training, einzelne JSONL-Datei für die Validierung (optional)
+ **Mindestgröße**: 1.000 Präferenzpaare werden für ein effektives Training empfohlen
+ **Qualität**: Hochwertige Präferenzdaten führen zu effektiveren Ergebnissen
+ **Andere Einschränkungen**: Wie bei SFT. Weitere Informationen finden Sie unter Datensatzeinschränkungen.

**Daten werden hochgeladen**

```
aws s3 cp /path/to/training-data/ s3://{{your-bucket}}/train/ --recursive
aws s3 cp /path/to/validation-data/ s3://{{your-bucket}}/val/ --recursive
```

## Konfiguration des Rezepts
<a name="nova-dpo-smtj-recipe"></a>

### Allgemeine Laufkonfiguration
<a name="nova-dpo-smtj-recipe-run"></a>

```
run:
  name: "my-dpo-run"
  model_type: "amazon.nova-lite-v1:0:300k"
  model_name_or_path: "nova-lite/prod"
  replicas: 4
```


| Parameter | Description | 
| --- | --- | 
| name | Beschreibender Name für deinen Ausbildungsjob | 
| model\_type | Nova-Modellvariante (nicht modifizieren) | 
| model\_name\_or\_path | Pfad des Basismodells (nicht ändern) | 
| replicas | Anzahl der Recheninstanzen für verteiltes Training | 

### Konfiguration des Trainings
<a name="nova-dpo-smtj-recipe-training"></a>

```
training_config:
  max_length: 16384
  global_batch_size: 32

  trainer:
    max_epochs: 3

  model:
    hidden_dropout: 0.0
    attention_dropout: 0.0
    ffn_dropout: 0.0
```


| Parameter | Description | Bereich | 
| --- | --- | --- | 
| max\_length | Maximale Sequenzlänge in Token | 1024—32768 | 
| global\_batch\_size | Beispiele pro Optimierungsschritt | Micro/Lite/Pro: 16, 32, 64, 128. Micro/Lite: 256 | 
| max\_epochs | Das Training durchläuft den Datensatz | Minimum: 1 | 
| hidden\_dropout | Aussteiger für versteckte Staaten | 0,0 bis 1,0 | 
| attention\_dropout | Aussteiger wegen Aufmerksamkeitsgewichten | 0,0 bis 1,0 | 
| ffn\_dropout | Aussteiger für Feed-Forward-Schichten | 0,0 bis 1,0 | 

### Konfiguration des Optimierers
<a name="nova-dpo-smtj-recipe-optimizer"></a>

```
model:
  optim:
    lr: 1e-5
    name: distributed_fused_adam
    adam_w_mode: true
    eps: 1e-08
    weight_decay: 0.0
    betas:
      - 0.9
      - 0.999
    sched:
      warmup_steps: 10
      constant_steps: 0
      min_lr: 1e-6
```


| Parameter | Description | Bereich | 
| --- | --- | --- | 
| lr | Lernrate | 0—1 (typischerweise 1e-6 bis 1e-4) | 
| weight\_decay | Stärke der L2-Regularisierung | 0,0 bis 1,0 | 
| warmup\_steps | Schritte zur schrittweisen Erhöhung der Lernrate | 0—20 | 
| min\_lr | Minimale Lernrate am Ende des Zerfalls | 0—1 (muss < lr sein) | 

### DPO-spezifische Konfiguration
<a name="nova-dpo-smtj-recipe-dpo"></a>

```
model:
  dpo_cfg:
    beta: 0.1
```


| Parameter | Description | Bereich | 
| --- | --- | --- | 
| beta | Ausgewogenheit zwischen Anpassung der Trainingsdaten und Annäherung an das Originalmodell | 0,001—0,5 | 
+ **Höheres Beta (0.1)**: Behält mehr Verhalten des Referenzmodells bei, lernt jedoch möglicherweise langsamer Präferenzen
+ **Niedrigeres Beta (0,01—0,05)**: Aggressiveres Präferenzlernen, es besteht jedoch die Gefahr, dass es von der Referenz abweicht

**Empfehlung**: Beginnen Sie mit dem Präferenzlernen `beta: 0.1` und passen Sie es nach unten an, wenn das Präferenzlernen unzureichend erscheint.

### LoRa PEFT-Konfiguration
<a name="nova-dpo-smtj-recipe-lora"></a>

```
model:
  peft:
    peft_scheme: "lora"
    lora_tuning:
      loraplus_lr_ratio: 64.0
      alpha: 32
      adapter_dropout: 0.01
```


| Parameter | Description | Zulässige Werte | 
| --- | --- | --- | 
| peft\_scheme | Methode zur Feinabstimmung | "lora"oder null (voller Rang) | 
| alpha | Skalierungsfaktor für LoRa-Gewichte | 32, 64, 96, 128, 160, 192 | 
| loraplus\_lr\_ratio | Skalierungsfaktor für die LoRa\+-Lernrate | 0,0—100,0 | 
| adapter\_dropout | Regularisierung für LoRa-Parameter | 0,0 bis 1,0 | 

## Einen Ausbildungsjob beginnen
<a name="nova-dpo-smtj-start"></a>

**Container-Bild**

```
708977205387.dkr.ecr.us-east-1.amazonaws.com/nova-fine-tune-repo:SM-TJ-DPO-latest
```

**Beispiel-Code**

```
from sagemaker.pytorch import PyTorch
from sagemaker.inputs import TrainingInput

instance_type = "ml.p5.48xlarge"
instance_count = 4

image_uri = "708977205387.dkr.ecr.us-east-1.amazonaws.com/nova-fine-tune-repo:SM-TJ-DPO-latest"

recipe_overrides = {
    "training_config": {
        "trainer": {"max_epochs": 2},
        "model": {
            "dpo_cfg": {"beta": 0.1},
            "peft": {
                "peft_scheme": "lora",
                "lora_tuning": {
                    "loraplus_lr_ratio": 64.0,
                    "alpha": 32,
                    "adapter_dropout": 0.01,
                },
            },
        },
    },
}

estimator = PyTorch(
    output_path=f"s3://{bucket_name}/{job_name}",
    base_job_name=job_name,
    role=role,
    instance_count=instance_count,
    instance_type=instance_type,
    training_recipe="fine-tuning/nova/nova_lite_p5_gpu_lora_dpo",
    recipe_overrides=recipe_overrides,
    max_run=18000,
    sagemaker_session=sagemaker_session,
    image_uri=image_uri,
    disable_profiler=True,
    debugger_hook_config=False,
)

train_input = TrainingInput(
    s3_data=train_dataset_s3_path,
    distribution="FullyReplicated",
    s3_data_type="Converse",
)

val_input = TrainingInput(
    s3_data=val_dataset_s3_path,
    distribution="FullyReplicated",
    s3_data_type="Converse",
)

estimator.fit(inputs={"train": train_input, "validation": val_input}, wait=True)
```

## Das Modell wird bereitgestellt
<a name="nova-dpo-smtj-deploy"></a>

Stellen Sie nach Abschluss der Schulung das benutzerdefinierte Modell mithilfe der Importfunktion für benutzerdefinierte Modelle in Amazon Bedrock bereit. Das Modell unterstützt sowohl den bereitgestellten Durchsatz als auch On-Demand-Inferenz. Mit LoRa trainierte Modelle unterstützen On-Demand-Inferenz.

Anweisungen zur Bereitstellung finden Sie unter [Bereitstellen](deploy-custom-model.md) benutzerdefinierter Modelle.

## Einschränkungen
<a name="nova-dpo-smtj-limitations"></a>
+ **Eingabemodalitäten**: DPO akzeptiert nur Text und Bilder. Die Videoeingabe wird nicht unterstützt.
+ **Ausgabemodalität**: Nur Text
+ **Präferenzpaare**: Der letzte Assistenten-Zug muss genau zwei Kandidaten mit den Labels `preferred` und `non-preferred` enthalten
+ **Bildlimit**: Maximal 10 Bilder pro Inhaltsblock
+ **Gemischte Modalitäten**: Text, Bild und Video können nicht in derselben Trainingsaufgabe kombiniert werden