Direct Preference Optimization (DPO) - Amazon SageMaker AI

Direct Preference Optimization (DPO)

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

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

    • 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 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.

  • 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

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

  • 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.

  • Die MLflow-Protokollierung wird nicht unterstützt.

  • Folgen Sie den Anweisungen unter Auswählen von Hyperparametern, um die Hyperparameter anzupassen.