Direkte Präferenzoptimierung (DPO) - Amazon SageMaker KI

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)

Die direkte Präferenzoptimierung (DPO) ist eine effiziente Methode zur Feinabstimmung von Basismodellen, bei der gepaarte Vergleichsdaten verwendet werden, um die Modellergebnisse mit den menschlichen Präferenzen in Einklang zu bringen. 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 für Full-Rank- als auch für LoRa-DPO ähneln die Anforderungen an das Trainingsdatenformat denen von SFT. Für DPO muss der letzte Zug jedoch Präferenzpaare haben. Hier ist 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 ist 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 ist ein vollständiges DPO-Bildbeispiel:

{ "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 Einschränkungen für Datensätze. 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 die Verwendung von DPO in den folgenden Szenarien:

  • 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 Sicherheitsvorkehrungen durch bevorzugte Reaktionsmuster.

  • Schulung mit belohnungsfreiem Reinforcement-Learning.

  • Es werden nur Präferenzdaten anstelle von benoteten oder gekennzeichneten Daten verwendet.

  • Verbesserung des Modells bei nuancierten Ausrichtungsaufgaben wie Hilfsbereitschaft, Harmlosigkeit oder Ehrlichkeit.

DPO mit vollem Rang

Die Amazon Nova-Parameter, die für DPO mit vollem Rang verfügbar sind, lauten wie folgt:

  • Konfiguration ausführen

    • name: Ein aussagekräftiger Name für Ihren Trainingsjob. Dies hilft dabei, Ihren Job in der AWS Management Console zu identifizieren.

    • model_type: Die zu verwendende Nova-Modellvariante. Die verfügbaren Optionen sindamazon.nova-micro-v1:0:128k,amazon.nova-lite-v1:0:300k, oderamazon.nova-pro-v1:0:300k.

    • model_name_or_path: Der Pfad zum Basismodell. Wählen Sie das Modell, das ausnova-micro/prod, nova-lite/prodnova-pro/prod, oder dem S3-Pfad für den Checkpoint nach dem Training () s3://<escrow bucket>/<job id>/outputs/checkpoints verwendet werden soll.

    • replicas: Die Anzahl der Recheninstanzen, die für verteiltes Training verwendet werden sollen. Die verfügbaren Werte variieren je nach ausgewähltem 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, bei dem es sich um eine JSONL-Datei handelt. Diese Datei muss sich in demselben 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, bei dem es sich um eine JSONL-Datei handelt. Diese Datei muss sich in derselben Region wie der AWS-Konto Cluster befinden. Alle angegebenen S3-Standorte müssen sich im selben Konto und in derselben Region befinden.

  • Konfiguration der Schulung

    • max_length: Die maximale Sequenzlänge in Tokens. 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 max_length Parameter an Ihre Datenverteilung anzupassen.

  • Trainer-Einstellungen

    • max_epochs: Die Anzahl der vollständigen Durchläufe, die deinen Trainingsdatensatz durchlaufen haben. Der Höchstwert ist 5.

      Im Allgemeinen benötigen größere Datensätze weniger Epochen, um zu konvergieren, während kleinere Datensätze mehr Epochen erfordern, um zu konvergieren. Wir empfehlen, dass Sie die Anzahl der Epochen an die Größe Ihrer Daten anpassen.

  • Modell-Einstellungen

    • hidden_dropout: Die Wahrscheinlichkeit, dass ausgeblendete Ausgaben verloren gehen. Erhöhen Sie diesen Wert um etwa 0,0-0,2, um eine Überanpassung bei kleineren Datensätzen zu vermeiden. Gültige Werte liegen zwischen 0 und 1 (einschließlich).

    • attention_dropout: Die Wahrscheinlichkeit, dass die Aufmerksamkeit nachlässt, wird gewichtet. Dieser Parameter kann bei der Generalisierung helfen. Gültige Werte liegen zwischen 0 und 1 (einschließlich).

    • ffn_dropout: Die Wahrscheinlichkeit, dass Feed-Forward-Netzwerkausgänge ausfallen. Gültige Werte liegen zwischen 0 und 1 (einschließlich).

  • 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-1e-4. Gültige Werte liegen zwischen 0 und 1 (einschließlich).

    • 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 Stabilität des Trainings. Gültige Werte liegen zwischen 1 und 20 (einschließlich).

    • min_lr: Die minimale Lernrate am Ende des Zerfalls. Gültige Werte liegen zwischen 0 und 1 (einschließlich), 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. Gültige Werte liegen zwischen 0,001 und 0,5 (einschließlich).

      Geben Sie größere Werte an (z. B. 0,5), um mehr vom Verhalten des Referenzmodells beizubehalten und gleichzeitig neue Einstellungen 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.

DPO-Rezept mit vollem Rang

Im Folgenden finden Sie ein Rezept mit vollem Rang 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

Adapter DPO mit niedrigem Rang

Die Amazon Nova-Parameter, die für Low-Rank Adapter DPO verfügbar sind, lauten wie folgt:

  • Konfiguration ausführen

    • name: Ein aussagekräftiger Name für Ihren Trainingsjob. Dies hilft dabei, Ihren Job in der AWS Management Console zu identifizieren.

    • model_type: Die zu verwendende Nova-Modellvariante. Die verfügbaren Optionen sindamazon.nova-micro-v1:0:128k,amazon.nova-lite-v1:0:300k, oderamazon.nova-pro-v1:0:300k.

    • model_name_or_path: Der Pfad zum Basismodell. Wählen Sie das Modell, das ausnova-micro/prod, nova-lite/prodnova-pro/prod, oder dem S3-Pfad für den Checkpoint nach dem Training () s3://<escrow bucket>/<job id>/outputs/checkpoints verwendet werden soll.

    • replicas: Die Anzahl der Recheninstanzen, die für verteiltes Training verwendet werden sollen. Die verfügbaren Werte variieren je nach ausgewähltem 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 der Schulung

    • max_length: Die maximale Sequenzlänge in Tokens. 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 max_length Parameter an Ihre Datenverteilung anzupassen.

  • Trainer-Einstellungen

    • max_epochs: Die Anzahl der vollständigen Durchläufe, die deinen Trainingsdatensatz durchlaufen haben. Der Höchstwert ist 5.

      Im Allgemeinen benötigen größere Datensätze weniger Epochen, um zu konvergieren, während kleinere Datensätze mehr Epochen erfordern, um zu konvergieren. Wir empfehlen, dass Sie die Anzahl der Epochen an die Größe Ihrer Daten anpassen.

  • Modell-Einstellungen

    • hidden_dropout: Die Wahrscheinlichkeit, dass ausgeblendete Ausgaben verloren gehen. Erhöhen Sie diesen Wert um etwa 0,0-0,2, um eine Überanpassung bei kleineren Datensätzen zu vermeiden. Gültige Werte liegen zwischen 0 und 1 (einschließlich).

    • attention_dropout: Die Wahrscheinlichkeit, dass die Aufmerksamkeit nachlässt, wird gewichtet. Dieser Parameter kann bei der Generalisierung helfen. Gültige Werte liegen zwischen 0 und 1 (einschließlich).

    • ffn_dropout: Die Wahrscheinlichkeit, dass Feed-Forward-Netzwerkausgänge ausfallen. Gültige Werte liegen zwischen 0 und 1 (einschließlich).

  • 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-1e-4. Gültige Werte liegen zwischen 0 und 1 (einschließlich).

    • 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 Stabilität des Trainings. Gültige Werte liegen zwischen 1 und 20 (einschließlich).

    • min_lr: Die minimale Lernrate am Ende des Zerfalls. Gültige Werte liegen zwischen 0 und 1 (einschließlich), 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. Gültige Werte liegen zwischen 0,001 und 0,5 (einschließlich).

      Geben Sie größere Werte an (z. B. 0,5), um mehr vom Verhalten des Referenzmodells beizubehalten und gleichzeitig neue Einstellungen 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: Wird auf eingestellt, lora um die Low-Rank Adaptation zu aktivieren, wodurch ein effizienteres, kleineres Ausgangsmodell generiert wird. Diese LoRa-spezifischen Eigenschaften sind ebenfalls verfügbar:

      • alpha: Der Skalierungsfaktor für LoRa-Gewichte. 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

DPO hat die folgenden Einschränkungen:

  • Zwischenprüfpunkte werden nicht zur Auswertung gespeichert, und Sie können nicht von einem Zwischenprüfpunkt aus weitermachen. Nur der letzte Checkpoint wird gespeichert.

  • MLflow Die Protokollierung wird nicht unterstützt.

  • Folgen Sie den Anweisungen unter Hyperparameter auswählen, um die Hyperparameter anzupassen.