🧩Erweiterte Dokumentation für Reinforcement Learning
Erweiterte Dokumentationseinstellungen bei der Verwendung von Unsloth mit GRPO.
Detaillierte Anleitungen zum Durchführen von GRPO mit Unsloth für Batch-, Generierungs- und Trainingsparameter:
Trainingsparameter
beta(float, Standardwert 0.0): KL-Koeffizient.0.0⇒ kein Referenzmodell geladen (geringerer Speicherverbrauch, schneller).Höhere
betabeschränkt die Policy darauf, näher an der Referenz-Policy zu bleiben.
num_iterations(int, Standardwert 1): PPO-Epochen pro Batch (μ im Algorithmus). Wiederholt Daten innerhalb jedes Gradientenakkumulationsschritts; z. B.2= zwei Forward-Pässe pro Akkumulationsschritt.epsilon(float, Standardwert 0.2): Clipping-Wert für Log-Prob-Ratios auf Token-Ebene (typischer Bereich des Verhältnisses ≈ [-1.2, 1.2] mit standardmäßigem ε).delta(float, optional): Aktiviert obere Clipping-Grenze für beidseitiges GRPO wenn gesetzt. WennNone, wird das standardmäßige GRPO-Clipping verwendet. Empfohlen> 1 + εwenn aktiviert (laut INTELLECT-2-Bericht).epsilon_high(float, optional): Obergrenzen-ε; standardmäßigepsilonfalls nicht gesetzt. DAPO empfiehlt 0.28.importance_sampling_level(„token“ | „sequence“, Standardwert "token"):"token": rohe Verhältnisse pro Token (ein Gewicht pro Token)."sequence": Mittelwert der Verhältnisse pro Token zu einem einzelnen Verhältnis auf Sequenzebene. GSPO zeigt, dass Sampling auf Sequenzebene oft stabileres Training für Belohnungen auf Sequenzebene liefert.
reward_weights(list[float], optional): Ein Gewicht pro Belohnung. WennNone, dann sind alle Gewichte = 1.0.scale_rewards(str|bool, Standardwert "group"):Trueoder"group": skalieren durch Std innerhalb jeder Gruppe (Einheitsvarianz in der Gruppe)."batch": skalieren durch Std über den gesamten Batch (laut PPO-Lite).Falseoder"none": keine Skalierung. Dr. GRPO empfiehlt, nicht zu skalieren, um eine Schwierigkeitsschrägheit durch Std-Skalierung zu vermeiden.
loss_type(str, Standardwert "dapo"):"grpo": normalisiert über die Sequenzlänge (Längenbias; nicht empfohlen)."dr_grpo": normalisiert durch eine globale Konstante (eingeführt in Dr. GRPO; entfernt Längenbias). Konstante ≈max_completion_length."dapo"(Standardwert): normalisiert durch aktive Tokens im global akkumulierten Batch (eingeführt in DAPO; entfernt Längenbias)."bnpo": normalisiert durch aktive Tokens nur im lokalen Batch (Ergebnisse können mit der lokalen Batchgröße variieren; entspricht GRPO, wennper_device_train_batch_size == 1).
mask_truncated_completions(bool, Standardwert False): WennTrue, werden abgeschnittene Komplettierungen vom Loss ausgeschlossen (von DAPO für Stabilität empfohlen). Hinweis: Es gibt einige KL-Probleme mit diesem Flag, daher empfehlen wir, es zu deaktivieren.# Wenn mask_truncated_completions aktiviert ist, abgeschnittene Komplettierungen in completion_mask auf null setzen if self.mask_truncated_completions: truncated_completions = ~is_eos.any(dim=1) completion_mask = completion_mask * (~truncated_completions).unsqueeze(1).int()Dies kann alle
completion_maskEinträge auf null setzen, wenn viele Komplettierungen abgeschnitten sind, wodurchn_mask_per_reward = 0und KL zu NaN wird. Siehevllm_importance_sampling_correction(bool, Standardwert True): Wendet Truncated Importance Sampling (TIS) an, um Off-Policy-Effekte zu korrigieren, wenn die Generierung (z. B. vLLM / fast_inference) sich vom Trainings-Backend unterscheidet. In Unsloth wird dies automatisch auf True gesetzt wenn Sie vLLM/fast_inference verwenden; andernfalls False.vllm_importance_sampling_cap(float, Standardwert 2.0): Trunkierungsparameter C für TIS; setzt eine obere Grenze für das Importance-Sampling-Verhältnis, um die Stabilität zu verbessern.dtypebei der Auswahl von float16 oder bfloat16, siehe FP16 vs. BF16 für RL
RL auf nicht unterstützten Modellen:
Sie können RL mit Unsloth auch auf Modellen ausführen, die von vLLM nicht unterstützt werden, wie z. B. Qwen3.5. Setzen Sie einfach fast_inference=False beim Laden des Modells.
Generierungsparameter
temperature (float, Standardwert 1.0):Temperatur für das Sampling. Je höher die Temperatur, desto zufälliger sind die Ausgaben. Achten Sie darauf, eine relativ hohe Temperatur (1.0) zu verwenden, um Vielfalt in den Generierungen zu haben, was das Lernen unterstützt.top_p (float, optional, Standardwert 1.0):Float, der die kumulative Wahrscheinlichkeit der Top-Token steuert, die berücksichtigt werden sollen. Muss in (0, 1] liegen. Setzen Sie ihn auf 1.0, um alle Token zu berücksichtigen.top_k (int, optional):Anzahl der Wörterbuch-Token mit der höchsten Wahrscheinlichkeit, die für das Top-k-Filtering beibehalten werden sollen. Wenn None, ist das Top-k-Filtering deaktiviert und alle Token werden berücksichtigt.min_p (float, optional):Mindest-Token-Wahrscheinlichkeit, die mit der Wahrscheinlichkeit des wahrscheinlichsten Tokens skaliert wird. Sie muss einen Wert zwischen 0.0 und 1.0 haben. Typische Werte liegen im Bereich 0.01-0.2.repetition_penalty (float, optional, Standardwert 1.0):Float, der neue Tokens bestraft, je nachdem, ob sie im Prompt und im bisher generierten Text vorkommen. Werte > 1.0 ermutigen das Modell, neue Tokens zu verwenden, während Werte < 1.0 das Modell dazu ermutigen, Tokens zu wiederholen.steps_per_generation: (int, optional):Anzahl der Schritte pro Generierung. Wenn None, ist der Standardwertgradient_accumulation_steps. Gegenseitig ausschließend mitgeneration_batch_size.
Es ist etwas verwirrend, an diesem Parameter herumzuexperimentieren; es wird empfohlen, per_device_train_batch_size und Gradient Accumulation für die Batchgrößen zu bearbeiten
Batch- und Durchsatzparameter
Parameter, die Batches steuern
train_batch_size: Anzahl der Samples pro Prozess pro Schritt. Wenn diese ganze Zahl kleiner alsnum_generationsist, wird standardmäßignum_generations.steps_per_generation: Anzahl der Mikrobatches die zu einer Generierung zur Berechnung des Loss beitragen (nur Forward-Pässe). Allesteps_per_generationSchritte wird ein neuer Datenbatch generiert; das Timing der Backpropagation hängt ab vongradient_accumulation_steps.num_processes: Anzahl verteilter Trainingsprozesse (z. B. GPUs / Worker).gradient_accumulation_steps(auch bekannt alsgradient_accumulation): Anzahl der Mikrobatches, die vor dem Anwenden von Backpropagation und Optimizer-Update akkumuliert werden.Effektive Batchgröße:
Gesamtzahl der Samples, die vor einem Update zu den Gradienten beitragen (über alle Prozesse und Schritte hinweg).
Optimizer-Schritte pro Generierung:
Beispiel:
4 / 2 = 2.num_generations: Anzahl der generierten pro Prompt (angewendet nach dem Berechnen voneffective_batch_size). Die Anzahl der eindeutigen Prompts in einem Generierungszyklus ist:Muss > 2 sein damit GRPO funktioniert.
GRPO-Batch-Beispiele
Die folgenden Tabellen veranschaulichen, wie Batches durch die Schritte fließen, wann Optimizer-Updates stattfinden und wie neue Batches generiert werden.
Beispiel 1
Generierungszyklus A
0
[0,0,0]
1
[1,1,1]
→ Optimizer-Update (Akkum = 2 erreicht)
2
[2,2,2]
3
[3,3,3]
Optimizer-Update
Generierungszyklus B
0
[4,4,4]
1
[5,5,5]
→ Optimizer-Update (Akkum = 2 erreicht)
2
[6,6,6]
3
[7,7,7]
Optimizer-Update
Beispiel 2
Generierungszyklus A
0
[0,0,0]
1
[1,1,1]
2
[2,2,2]
3
[3,3,3]
Optimizer-Update (Akkum = 4 erreicht)
Generierungszyklus B
0
[4,4,4]
1
[5,5,5]
2
[6,6,6]
3
[7,7,7]
Optimizer-Update (Akkum = 4 erreicht)
Beispiel 3
Generierungszyklus A
0
[0,0,0]
1
[0,1,1]
2
[1,1,3]
3
[3,3,3]
Optimizer-Update (Akkum = 4 erreicht)
Generierungszyklus B
0
[4,4,4]
1
[4,5,5]
2
[5,5,6]
3
[6,6,6]
Optimizer-Update (Akkum = 4 erreicht)
Beispiel 4
Generierungszyklus A
0
[0,0,0, 1,1,1]
1
[2,2,2, 3,3,3]
Optimizer-Update (Akkum = 2 erreicht)
Generierungszyklus B
0
[4,4,4, 5,5,5]
1
[6,6,6, 7,7,7]
Optimizer-Update (Akkum = 2 erreicht)
Schnelle Formelbezugnahme
Zuletzt aktualisiert
War das hilfreich?

