Proximale Richtlinienoptimierung (PPO) - 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.

Proximale Richtlinienoptimierung (PPO)

Proximale Politikoptimierung (PPO) ist der Prozess, bei dem mehrere Modelle des maschinellen Lernens verwendet werden, um ein Modell zu trainieren und zu bewerten. Die folgenden Modelle sind Teil des PPO-Prozesses:

  • Akteursausbildung oder politisches Modell: Ein Modell der überwachten Feinabstimmung (SFT), das in jeder Epoche verfeinert und aktualisiert wird. Die Aktualisierungen erfolgen durch Stichproben von Eingabeaufforderungen, Generierung von Vervollständigungen und Aktualisierung der Gewichtungen unter Verwendung eines abgeschnittenen Ersatzziels. Dadurch wird die Veränderung der Log-Rentabilität pro Token begrenzt, sodass jeder politische Schritt dem vorherigen entspricht, wodurch die Stabilität des Trainings gewahrt bleibt.

  • Modell zur Generierung von Akteuren: Ein Modell, das schnelle Ergebnisse oder Antworten generiert, die anhand des Belohnungs- und des Kritikermodells bewertet werden. Die Gewichte dieses Modells werden in jeder Epoche anhand des Akteurszugs- oder Politikmodells aktualisiert.

  • Prämienmodell: Ein Modell mit eingefrorenen Gewichten, das zur Bewertung des Modells der Schauspielergeneration verwendet wird.

  • Kritikermodell: Ein Modell mit nicht eingefrorenen Gewichten, das zur Bewertung des Modells der Schauspielergeneration verwendet wird. Diese Punktzahl wird oft als Schätzung der Gesamtvergütung angesehen, die der Schauspieler erhält, wenn er die verbleibenden Tokens generiert.

  • Ankermodell: Ein SFT-Modell mit eingefrorenen Gewichten, das zur Berechnung der KL-Divergenz zwischen dem Schauspieler-Zugmodell 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 }
  • turnsist ein Array von Konversationszeichenfolgen-Arrays, die die Dialogsequenz darstellen. Diese Zeile enthält Systemaufforderungen, Benutzermeldungen und Bot-Antworten. Benutzernachrichten enden normalerweise mit „Bot:“, um anzugeben, wo die Modellausgabe beginnt. Beispiel, [["System prompt"], ["User: Question Bot:"], ["Bot response"]].

  • turns_to_maskist ein Array von auf 0 basierenden Indizes, die angeben, für welche Kurven keine Gradientenaktualisierungen vorgenommen werden sollen. Bei den maskierten Kantenübergängen handelt es sich in der Regel um Systemaufforderungen und Benutzerübergänge. [0, 1, 3]Maskiert beispielsweise die Systemaufforderung und Benutzermeldungen (die erste und dritte Meldung).

  • reward_categoryist eine Zeichenfolge, die angibt, welche Aspekte der Modellleistung bewertet werden sollen. Es wird verwendet, um während des Trainings die passende Belohnungsmodellkategorie auszuwählen. Die Prämienkategorie ist für die folgenden Prämienkategorien verfügbar: default mathcoding,if,rag,, undrai.

  • meta_dataist 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 für die 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, einfache Antworten auf Fragen und Fragen zu nicht spezialisiertem Wissen 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 Aufgaben zum numerischen Denken. 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 Anfragen im Zusammenhang mit 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 präzise prozedurale 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 Prämienkategorie für Aufgaben, die die Beantwortung von Anfragen erfordern, die speziell auf abgerufenen Kontextinformationen basieren. Wird verwendet, wenn Antworten direkt aus bereitgestellten Referenzmaterialien abgeleitet werden sollen, wobei sachliche Inhalte zusammengefaßt werden sollen, ohne den Umfang der abgerufenen Informationen zu überschreiten, und sicherzustellen, 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 verantwortungsvoller KI-Prinzipien wie Fairness, Transparenz und Ethik erfordern. Wird verwendet, um mögliche Vorurteile in KI-Systemen zu bewerten, Datenschutzaspekte sicherzustellen, ethische Dilemmas anzugehen und integrative 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" }
Kurven maskieren

In Trainingsdatensätzen ist der turns_to_mask Parameter entscheidend, um zu steuern, welche Konversationszüge während des Trainings mit dem Verlauf aktualisiert werden. Diese Reihe von Indizes bestimmt, welche Teile des Dialogs das Modell lernen soll, zu erzeugen, und welche Teile nicht nur als Kontext behandelt werden sollen. Durch die richtige Maskierung wird sichergestellt, dass das Modell geeignete Reaktionsmuster lernt und gleichzeitig das Training aufgrund von Systemaufforderungen oder Benutzereingaben, die die Leistung beeinträchtigen könnten, vermieden wird.

Wir empfehlen die folgenden Hinweise zur Maskierung:

  • Index 0 immer maskieren — Systemaufforderungen sollten niemals Gradientenaktualisierungen erhalten.

  • Benutzerwechsel immer maskieren — Damit 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 Multi-Turn-Dialoge.

  • 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 — Maskiert qualitativ minderwertige Assistentenantworten, um Leistungseinbußen vorzubeugen.

  • Kontextoptimierung — Stellen Sie sicher, dass durch maskierte Wendungen 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 und gleichzeitig die Gradientenaktualisierungen auf die gewünschten Modellergebnisse konzentriert.

Aktivieren Sie den KL-Divergenzverlust

Um KL-Divergence Loss 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 Politik abweicht, was zu geringeren Änderungen der allgemeinen Leistung führt. Niedrigere Koeffizientenwerte ermöglichen größere Abweichungen von der bisherigen Politik, 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 das kritische Modell und das politische Modell kann angepasst werden, wobei 3e-6 die voreingestellte ausgewogene Wahl ist. Höhere Lernquoten führen in der Regel zu Instabilitäten in der Ausbildung, die sich anhand von Spitzenwerten der KL-Divergenz und unberechenbarem politischem Verhalten erkennen lassen. Niedrigere Lernquoten können zu Konvergenzproblemen und langsamem Lernen führen, was sich in stagnierenden Belohnungen und minimalen politischen Aktualisierungen äußert. Die regelmäßige Überwachung der Unterschiede zwischen den Lernergebnissen, des Belohnungspunkts und des Wertverlusts hilft bei der Entscheidung, ob die Lernrate während der Ausbildung 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 Chargen im Allgemeinen die Trainingsstabilität und die Gradientenschätzung verbessern und gleichzeitig eine effizientere Parallelverarbeitung ermöglichen. Sehr große Chargengrößen können jedoch zu sinkenden Renditen führen und können durch den verfügbaren Speicherplatz eingeschränkt werden, sodass ein sorgfältiges Abwägen 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:

  • Konfiguration ausführen

    • actor_train_replicas: Die Anzahl der Recheninstanzen, die für das Actor Train-Modell verwendet werden sollen. Die verfügbaren Werte variieren je nach ausgewähltem 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 Compute-Instances, die für das Prämienmodell verwendet wurden. Wir empfehlen, für jede Modellgröße ein Replikat zu verwenden.

    • cm_replicas: Die Anzahl der Recheninstanzen, die für das kritische Modell verwendet wurden. Wir empfehlen, für jede Modellgröße ein Replikat zu verwenden.

    • actor_generation_replicas: Die Anzahl der Recheninstanzen, die für die Actor-Generierung verwendet wurden. Die verfügbaren Werte variieren je nach ausgewähltem 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 Recheninstanzen, die für das Ankermodell verwendet werden. Wir empfehlen, für jede Modellgröße ein Replikat zu verwenden.

  • Konfiguration „Actor Train“ (Richtlinienkonfiguration)

    • max_steps: Die maximale Anzahl von Schritten zur Feinabstimmung oder zum Trainieren des Actor Train-Modells. Hier wird ein Schritt als Rollout definiert, gefolgt vom Training des Schauspieler-Trainmodells anhand einer global_batch_size Anzahl von Stichproben. Eine Epoche ist definiert als. global_batch_size * trajectory_buffer_scale

      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 von entspricht. trajectory_buffer_scale 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 Prämienmodells und die durchschnittliche Aktionsdauer, anhand der ML-Flow-Konsole ermittelt werden, dabei helfen, die optimalen Bewertungspunkte zu ermitteln.

    • actor_model_max_length: Die maximale Länge der Eingabedaten, die an die Komponente zur Akteurgenerierung gesendet werden, um Vervollständigungen zu generieren.

    • reward_model_max_length: Die maximale Länge der Eingabedaten, die an den Prämienserver gesendet werden, um Abschlüsse zu bewerten.

    • trajectory_buffer_scale: Dieser Puffer stellt die Anzahl der Rollouts dar, die mit dem alten Actor Train-Modell (Policy) generiert wurden, bevor die Gewichtungen aktualisiert und die neuen Rollouts generiert wurden. Die unterstützten Werte sind 1, 2, 4, 8 und 16.

      Wenn 1 trajectory_buffer_scale ist, entspricht die Schulung den Richtlinien. Das bedeutet, dass die Rollouts mit den aktuellsten Modellgewichten generiert werden, aber der Durchsatz leidet darunter. Bei einem Wert von 16 liegt das Modell leicht außerhalb der Richtlinien, der Durchsatz ist jedoch höher. Wir empfehlen, für jedes Modell mit 8 zu beginnen.

    • kl_reward_penalty_coeff: Dies ist der KL-Divergenzbegriff, der sicherstellt, 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 Referenzverteilungen berechnet werden soll. Die kl_loss_types verfügbaren Optionen sind kl (Standard-KL-Divergenz), mse (Mittlerer quadratischer Fehler), (Absolute Differenz zwischen logarithmischen Wahrscheinlichkeiten) und abs low_var_kl (KL-Approximation mit niedriger Varianz).

    • model.clip_ratio: Das Actor Clip Ratio (⌘) 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 Schauspielermodell verwendet wird.

    • model.lam: Teil des Prozesses zur Schätzung des Vorteils. Ein höherer Wert von λ verleiht längerfristigen Belohnungen mehr Gewicht, jedoch mit höherer Varianz, während ein niedrigeres λ 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 er die Politik bestraft, wenn sie zu deterministisch wird (d. h. immer dieselben Aktionen mit großer Zuversicht auswählt).

  • Konfiguration des Belohnungsmodells

    • global_batch_size: Die Batchgröße für die Bewertung der Abschlüsse anhand des Prämienmodells. Wenn ppo_actor_train.model.global_batch_size der Wert größer als istppo_reward.model.global_batch_size, werden sie in mehreren Batches verarbeitet. Beachten Sie, dass dieser Wert 0 entsprechen ppo_actor_train.model.global_batch_size % ppo_reward.model.global_batch_size muss.

    • max_length: Die maximale Kontextlänge des Belohnungsmodells. Dies sollte dasselbe sein wieppo_actor_train.model.max_length.

  • Konfiguration des kritischen Modells

    • global_batch_size: Die Batchgröße des kritischen Modellwerts. Das Kritikermodell liefert Wertschätzungen für jedes Token in den Antworten, die das Akteurmodell liefert. Die Batchgröße wird sowohl für Inferenz als auch für Training verwendet.

      Beachten Sie, dass dies 0 und ppo_actor_train.model.global_batch_size * ppo_actor_train.model.trajectory_buffer_size % ppo_critic.model.global_batch_size == 0 entsprechen ppo_actor_train.model.global_batch_size % ppo_critic.model.global_batch_size muss.

    • max_length: Die maximale Kontextlänge des kritischen Modells. Dies sollte dasselbe sein wieppo_actor_train.model.max_length.

    • model.optim.lr: Die Lernrate, die für das Verlusttraining des Ersatzmodells im Schauspielermodell verwendet wird.

  • Konfiguration des Ankermodells

    • global_batch_size: Die Batchgröße für die Generierung des Logos des eingefrorenen SFT- oder Ankermodells. Beachten Sie, dass dieser Wert 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 dasselbe sein wieppo_actor_train.model.max_length.

  • Modellkonfiguration der Akteurgenerierung

    • actor_model_max_length: Die maximale Kontextlänge der Komponente zur Generierung des Schauspielermodells. Dies sollte dasselbe sein wieppo_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

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

  • Multimodale Datensätze werden nicht unterstützt.

  • Trainingsjobs werden nicht automatisch beendet. Sie müssen den Job mit der HyperPod CLI beenden.

  • MLflow Die Protokollierung wird nicht unterstützt.

  • Trainingsmetriken für Kritiker werden auf TensorBoard nicht unterstützt.

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