💡Reinforcement Learning (RL) Anleitung

Lerne alles über Reinforcement Learning (RL) und wie du dein eigenes DeepSeek-R1 Reasoning-Modell mit Unsloth unter Verwendung von GRPO trainierst. Ein vollständiger Leitfaden von Anfänger bis Fortgeschrittene.

Reinforcement Learning ist, wenn ein "Agent" lernt, Entscheidungen zu treffen, indem er mit einer Umgebung interagiert und Feedback in Form von Belohnungen oder Strafen.

  • Aktion: Was das Modell erzeugt (z. B. ein Satz).

  • Belohnung: Ein Signal, das angibt, wie gut oder schlecht die Aktion des Modells war (z. B. hat die Antwort die Anweisungen befolgt? War sie hilfreich?).

  • Umgebung: Das Szenario oder die Aufgabe, an der das Modell arbeitet (z. B. Beantwortung einer Nutzerfrage).

🦥Was du lernen wirst

  1. Was ist RL? RLVR? PPO? GRPO? RLHF? RFT? Ist "Glück ist alles, was du brauchst?" für RL?

  2. Was ist eine Umgebung? Agent? Aktion? Belohnungsfunktion? Belohnungen?

Dieser Artikel behandelt alles (von Anfänger- bis Fortgeschrittenen-Level), was du über GRPO, Reinforcement Learning (RL) und Belohnungsfunktionen wissen musst, zusammen mit Tipps und den Grundlagen der Verwendung von GRPO mit Unslotharrow-up-right. Wenn du ein Schritt-für-Schritt-Tutorial zur Verwendung von GRPO suchst, siehe unseren Leitfaden hier.

circle-check

Was ist Reinforcement Learning (RL)?

Das Ziel von RL ist:

  1. Die Wahrscheinlichkeit zu erhöhen, "gute" Ergebnisse zu sehen.

  2. Die Wahrscheinlichkeit zu verringern, "schlechte" Ergebnisse zu sehen.

Das war's! Es gibt Feinheiten darin, was "gut" und "schlecht" bedeutet, oder wie wir es schaffen, dies zu "erhöhen" oder "verringern", oder was überhaupt "Ergebnisse" bedeutet.

Zum Beispiel, im Pacman-Spiel:

  1. Der ist die Umgebung die Spielwelt.

  2. Der Aktionen die du ausführen kannst sind OBEN, LINKS, RECHTS und UNTEN.

  3. Der Belohnungen sind gut, wenn du einen Keks isst, oder schlecht, wenn du einen der geschlängelten Gegner triffst.

  4. Im RL kannst du die "beste Aktion", die du ausführen kannst, nicht kennen, aber du kannst Zwischensteps oder den finalen Spielzustand (Gewinn oder Verlust) beobachten

Ein weiteres Beispiel: Stell dir vor, dir wird die Frage gestellt: "Was ist 2 + 2?" (4) Ein nicht angepasster Sprachmodell wird 3, 4, C, D, -10, buchstäblich irgendetwas ausspucken.

  1. Zahlen sind besser als C oder D, oder?

  2. 3 zu erhalten ist besser als sagen 8, oder?

  3. 4 zu erhalten ist definitiv korrekt.

Wir haben gerade ein Belohnungsfunktion!

🏃Von RLHF, PPO zu GRPO und RLVR

OpenAI popularisierte das Konzept von RLHFarrow-up-right (Reinforcement Learning from Human Feedback), bei dem wir einen "Agenten" trainieren, Ausgaben auf eine Frage (den Zustand) zu produzieren, die von Menschen als nützlicher bewertet werden.

Der Daumen hoch und runter in ChatGPT kann zum Beispiel im RLHF-Prozess verwendet werden.

PPO-Formel

Der clip(..., 1-e, 1+e)-Term wird verwendet, um PPO daran zu hindern, zu große Änderungen vorzunehmen. Es gibt auch einen KL-Term mit beta > 0, um das Modell daran zu hindern, zu stark abzuweichen.

Um RLHF durchzuführen, wurde PPOarrow-up-right (Proximal Policy Optimization) entwickelt. Der Agent ist in diesem Fall das Sprachmodell. Tatsächlich besteht es aus 3 Systemen:

  1. Der Generierende Policy (aktuell trainiertes Modell)

  2. Der Referenz-Policy (Originalmodell)

  3. Der Value Model (Durchschnitts-Belohnungs-Schätzer)

Wir verwenden das Reward Model um die Belohnung für die aktuelle Umgebung zu berechnen, und unser Ziel ist es, dies zu maximieren!

Die Formel für PPO sieht ziemlich kompliziert aus, weil sie stabil gestaltet wurde. Sieh dir unser AI Engineer Talkarrow-up-right den wir 2025 über RL gehalten haben, für tiefergehende mathematische Herleitungen zu PPO an.

DeepSeek entwickelte GRPOarrow-up-right (Group Relative Policy Optimization) um ihre R1-Reasoning-Modelle zu trainieren. Die Hauptunterschiede zu PPO sind:

  1. Der Das Value Model wird entfernt, ersetzt durch Statistiken aus mehrfachem Aufrufen des Reward Models.

  2. Der Das Reward Model wird entfernt und ersetzt durch nur eine benutzerdefinierte Belohnungsfunktion, welche RLVR verwendet werden kann.

Das bedeutet, GRPO ist extrem effizient. Zuvor musste PPO mehrere Modelle trainieren – jetzt, da Reward Model und Value Model entfernt sind, können wir Speicher sparen und alles beschleunigen.

RLVR (Reinforcement Learning mit verifizierbaren Belohnungen) erlaubt es uns, das Modell basierend auf Aufgaben zu belohnen, deren Lösungen leicht verifizierbar sind. Zum Beispiel:

  1. Mathematische Gleichungen können einfach verifiziert werden. Z.B. 2+2 = 4.

  2. Code-Ausgaben können daraufhin überprüft werden, ob sie korrekt ausgeführt wurden oder nicht.

  3. Das Entwerfen verifizierbarer Belohnungsfunktionen kann schwierig sein, daher sind die meisten Beispiele Mathematik oder Code.

  4. Anwendungsfälle für GRPO sind nicht nur für Code oder Mathematik – sein Reasoning-Prozess kann Aufgaben wie E-Mail-Automatisierung, Datenbankabfragen, Recht und Medizin verbessern und die Genauigkeit stark erhöhen, basierend auf deinem Datensatz und deiner Belohnungsfunktion – der Trick ist, ein Rubrum - d.h. eine Liste kleinerer verifizierbarer Belohnungen zu definieren und nicht eine finale alles verzehrende einzelne Belohnung. OpenAI popularisierte dies in ihrem Reinforcement Learning-Finetuning (RFT)arrow-up-right Angebot zum Beispiel.

Warum "Group Relative"?

GRPO entfernt das Value Model vollständig, aber wir müssen trotzdem das "Durchschnitts-Belohnung" für den aktuellen Zustand schätzen.

Der Der Trick ist, das LLM zu sampeln! Wir berechnen dann die durchschnittliche Belohnung durch Statistiken des Sampling-Prozesses über mehrere verschiedene Fragen.

Zum Beispiel für "Was ist 2+2?" sampeln wir 4 Mal. Wir könnten 4, 3, D, C erhalten. Wir berechnen dann die Belohnung für jede dieser Antworten und berechnen dann die Durchschnitts-Belohnung und Standardabweichung, dann Z-Score standardisieren das!

Das erzeugt die Advantage A, die wir anstelle des Value Models verwenden werden. Das spart viel Speicher!

GRPO Advantage-Berechnung

🤞Glück (naja Geduld) ist alles, was du brauchst

Der Trick von RL ist, dass du nur 2 Dinge brauchst:

  1. Eine Frage oder Anweisung z. B. "Was ist 2+2?" "Erstelle ein Flappy Bird-Spiel in Python"

  2. Eine Belohnungsfunktion und einen Verifizierer, um zu prüfen, ob die Ausgabe gut oder schlecht ist.

Mit nur diesen 2 können wir im Grunde genommen ein Sprachmodell unendlich oft aufrufen bis wir eine gute Antwort erhalten. Zum Beispiel bei "Was ist 2+2?" wird ein untrainiertes schlechtes Sprachmodell ausgeben:

0, Katze, -10, 1928, 3, A, B, 122, 17, 182, 172, A, C, BAHS, %$, #, 9, -192, 12.31**** und dann plötzlich 4.

Das Belohnungssignal war 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0**** und dann plötzlich 1.

Also durch Glück und Zufall hat RL die korrekte Antwort über mehrere Rolloutsgefunden. Unser Ziel ist, die gute Antwort 4 öfter zu sehen und den Rest (die schlechten Antworten) viel seltener.

Das Ziel von RL ist also, geduldig zu sein – im Grenzwert, wenn die Wahrscheinlichkeit der korrekten Antwort wenigstens eine kleine Zahl (nicht null) ist, ist es nur ein Wartespiel – du wirst im Grenzwert mit 100%iger Sicherheit die korrekte Antwort begegnen.

Deshalb nenne ich es gern "Glück ist alles, was du brauchst" für RL.

Eine bessere Formulierung ist allerdings "Geduld ist alles, was du brauchst" für RL.

RL bietet uns im Wesentlichen einen Trick – anstatt einfach auf die Unendlichkeit zu warten, erhalten wir "schlechte Signale", also schlechte Antworten, und wir können das Modell im Grunde genommen "anleiten", bereits zu versuchen, keine schlechten Lösungen zu generieren. Das bedeutet, obwohl du sehr lange gewartet hast, bis eine "gute" Antwort auftaucht, wurde das Modell bereits so verändert, dass es sein Bestes versucht, keine schlechten Antworten auszugeben.

Im "Was ist 2+2?"-Beispiel - 0, Katze, -10, 1928, 3, A, B, 122, 17, 182, 172, A, C, BAHS, %$, #, 9, -192, 12.31**** und dann plötzlich 4.

Da wir schlechte Antworten erhalten haben, wird RL das Modell beeinflussen, NICHT schlechte Antworten auszugeben. Das bedeutet, im Laufe der Zeit "beschneiden" oder verschieben wir vorsichtig die Ausgabeverteilung des Modells weg von schlechten Antworten. Das bedeutet, RL ist effizient, da wir NICHT einfach auf die Unendlichkeit warten, sondern aktiv versuchen, das Modell so weit wie möglich in den "korrekten Antwortraum" zu "drängen".

triangle-exclamation

🦥Was Unsloth für RL anbietet

  • Mit 15GB VRAM ermöglicht Unsloth dir, jedes Modell bis zu 17B Parametern wie Llama 3.1 (8B), Phi-4 (14B), Mistral (7B) oder Qwen2.5 (7B) in ein Reasoning-Modell zu verwandeln

  • Unsloth unterstützt jetzt RL für Vision/multimodale Modelle!

  • Mindestanforderung: Nur 5GB VRAM reichen aus, um lokal dein eigenes Reasoning-Modell zu trainieren (für jedes Modell mit 1,5B Parametern oder weniger)

circle-info

Für erweiterte GRPO Dokumentation zu Batch-Verarbeitung, Generierung und Trainingsparametern, lesen Sie unseren Leitfaden!

GRPO-Notebooks:

circle-check
  • Wenn du keine Reasoning-Ergebnisse erhältst, stelle sicher, dass du genügend Trainingsschritte hast und dass deine Belohnungsfunktion/Verifizierer funktioniert. Wir stellen Beispiele für Belohnungsfunktionen bereit hier.

  • Frühere Demonstrationen zeigen, dass du deinen eigenen "Aha"-Moment mit Qwen2.5 (3B) erreichen könntest – aber es erforderte 2x A100 GPUs (160GB VRAM). Jetzt kannst du mit Unsloth denselben "Aha"-Moment mit nur einer einzigen 5GB-VRAM-GPU erreichen.

  • Früher wurde GRPO nur für Full-Finetuning unterstützt, aber wir haben es so angepasst, dass es mit QLoRA und LoRA funktioniert

  • Bei 20K Kontextlängen zum Beispiel mit 8 Generierungen pro Prompt verwendet Unsloth nur 54,3GB VRAM für Llama 3.1 (8B), während Standardimplementierungen (+ Flash Attention 2) 510,8GB (90% weniger für Unsloth).

  • Bitte beachten: Dies ist nicht das Finetuning von DeepSeeks R1-distillierten Modellen oder die Verwendung distillierter Daten von R1 zum Tuning, was Unsloth bereits unterstützte. Dies ist die Umwandlung eines Standardmodells in ein vollwertiges Reasoning-Modell mittels GRPO.

In einem Testbeispiel, obwohl wir Phi-4 nur mit 100 Schritten mit GRPO trainiert haben, sind die Ergebnisse bereits klar. Das Modell ohne GRPO hat nicht das Thinking-Token, während das mit GRPO trainierte es hat und außerdem die korrekte Antwort.

💻Training mit GRPO

Für ein Tutorial, wie man jedes offene LLM mit Unsloth & GRPO in ein Reasoning-Modell verwandelt, siehe hier.

circle-check

Wie GRPO ein Modell trainiert

  1. Für jedes Frage-Antwort-Paar erzeugt das Modell mehrere mögliche Antworten (z. B. 8 Variationen).

  2. Jede Antwort wird mithilfe von Belohnungsfunktionen bewertet.

  3. Training-Schritte:

    • Wenn du 300 Datenzeilen hast, sind das 300 Trainingsschritte (oder 900 Schritte bei 3 Epochen).

    • Du kannst die Anzahl der generierten Antworten pro Frage erhöhen (z. B. von 8 auf 16).

  4. Das Modell lernt, indem es bei jedem Schritt seine Gewichte aktualisiert.

circle-exclamation

Grundlagen/Tipps

  • Warte mindestens 300 Schritte damit die Belohnung tatsächlich steigt. Um vernünftige Ergebnisse zu erzielen, musst du möglicherweise mindestens 12 Stunden investieren (so funktioniert GRPO), aber bedenke, dass dies nicht zwingend ist, da du jederzeit stoppen kannst.

  • Für optimale Ergebnisse habe zumindest 500 Datenzeilen. Du kannst es auch mit nur 10 Datenzeilen versuchen, aber es ist besser, mehr zu haben.

  • Jeder Trainingslauf wird immer unterschiedlich sein, abhängig von deinem Modell, den Daten, der Belohnungsfunktion/Verifizierer usw. — obwohl 300 Schritte als Minimum angegeben sind, kann es manchmal 1000 Schritte oder mehr sein. Es hängt also von verschiedenen Faktoren ab.

  • Wenn du GRPO lokal mit Unsloth verwendest, bitte zusätzlich "pip install diffusers", falls du einen Fehler erhältst. Bitte verwende auch die neueste Version von vLLM.

  • Es wird empfohlen, GRPO auf ein Modell mit mindestens 1,5B Parametern anzuwenden, um korrekt Thinking-Tokens zu generieren, da kleinere Modelle dies möglicherweise nicht tun.

  • Für GRPOs GPU-VRAM-Anforderungen für QLoRA 4-bitgilt die allgemeine Regel: Die Modellparameter entsprechen ungefähr dem benötigten VRAM (du kannst weniger VRAM verwenden, dies ist jedoch konservativ gerechnet). Je länger die Kontextlänge, desto mehr VRAM wird benötigt. LoRA in 16-bit benötigt mindestens das 4-fache an VRAM.

  • Kontinuierliches Fine-Tuning ist möglich und du kannst GRPO einfach im Hintergrund laufen lassen.

  • In den Beispiel-Notebooks verwenden wir das GSM8K-Dataset, die derzeit beliebteste Wahl für R1-ähnliches Training.

  • Wenn du ein Basismodell verwendest, stelle sicher, dass du eine Chat-Template hast.

  • Je mehr du mit GRPO trainierst, desto besser. Der beste Teil von GRPO ist, dass du nicht einmal so viele Daten brauchst. Alles, was du brauchst, ist eine großartige Belohnungsfunktion/Verifizierer, und je mehr Zeit du dem Training widmest, desto besser wird dein Modell. Erwarte, dass deine Belohnung im Verhältnis zu den Schritten im Laufe der Zeit wie folgt steigt:

  • Das Tracking des Trainingsverlusts für GRPO ist nun direkt in Unsloth integriert, wodurch externe Tools wie wandb usw. nicht mehr nötig sind. Es enthält jetzt vollständige Protokolldetails für alle Belohnungsfunktionen einschließlich der insgesamt aggregierten Belohnungsfunktion selbst.

📋Belohnungsfunktionen / Verifizierer

Im Reinforcement Learning dienen eine Belohnungsfunktion und ein Verifizierer unterschiedlichen Rollen bei der Bewertung der Ausgabe eines Modells. Allgemein kann man sie als dasselbe interpretieren, technisch sind sie es jedoch nicht, aber es ist meist nicht so wichtig, da sie normalerweise zusammen verwendet werden.

Verifizierer:

  • Bestimmt, ob die generierte Antwort korrekt oder inkorrekt ist.

  • Es weist keine numerische Punktzahl zu — es verifiziert lediglich die Korrektheit.

  • Beispiel: Wenn ein Modell "5" für "2+2" generiert, prüft der Verifizierer und kennzeichnet es als "falsch" (da die korrekte Antwort 4 ist).

  • Verifizierer können auch Code ausführen (z. B. in Python), um Logik, Syntax und Korrektheit zu validieren, ohne manuelle Bewertung zu benötigen.

Belohnungsfunktion:

  • Konvertiert Verifikationsergebnisse (oder andere Kriterien) in eine numerische Bewertung.

  • Beispiel: Wenn eine Antwort falsch ist, könnte eine Strafe (-1, -2, etc.) vergeben werden, während eine richtige Antwort eine positive Punktzahl (+1, +2) erhalten könnte.

  • Sie kann auch Strafen basierend auf Kriterien jenseits der Korrektheit verhängen, wie z. B. übermäßige Länge oder schlechte Lesbarkeit.

Wesentliche Unterschiede:

  • Eine Verifizierer prüft Korrektheit, vergibt jedoch keine Punktzahl.

  • Eine Belohnungsfunktion weist eine Punktzahl zu, prüft aber nicht unbedingt selbst die Korrektheit.

  • Eine Belohnungsfunktion können kann einen Verifizierer verwenden, aber technisch sind sie nicht identisch.

Verständnis von Belohnungsfunktionen

Das primäre Ziel von GRPO ist es, Belohnung zu maximieren und zu lernen, wie eine Antwort abgeleitet wurde, anstatt einfach Antworten aus seinen Trainingsdaten zu memorieren und zu reproduzieren.

  • Mit jedem Trainingsschritt passt GRPO die Modellgewichte an um die Belohnung zu maximieren. Dieser Prozess verfeinert das Modell schrittweise.

  • Reguläres Fine-Tuning (ohne GRPO) maximiert nur die Next-Word-Prediction-Wahrscheinlichkeit optimiert aber nicht für eine Belohnung. GRPO optimiert für eine Belohnungsfunktion anstatt nur das nächste Wort vorherzusagen.

  • Du kannst wiederverwendet Daten über mehrere Epochen.

  • Standard-Belohnungsfunktionen können vordefiniert sein, um in einer Vielzahl von Anwendungsfällen verwendet zu werden, oder du kannst ChatGPT/local model bitten, sie für dich zu generieren.

  • Es gibt keinen einzigen richtigen Weg, Belohnungsfunktionen oder Verifizierer zu gestalten – die Möglichkeiten sind endlos. Sie müssen jedoch gut gestaltet und sinnvoll sein, da schlecht gestaltete Belohnungen unbeabsichtigt die Modellleistung verschlechtern können.

🪙Beispiele für Belohnungsfunktionen

Du kannst dich auf die Beispiele unten beziehen. Du kannst deine Generierungen in ein LLM wie ChatGPT 4o oder Llama 3.1 (8B) einspeisen und eine Belohnungsfunktion und einen Verifizierer entwerfen, um sie zu bewerten. Zum Beispiel: Füttere deine Generierungen in ein LLM deiner Wahl und setze eine Regel: "Wenn die Antwort zu robotisch klingt, ziehe 3 Punkte ab." Das hilft, Ausgaben anhand von Qualitätskriterien zu verfeinern.

Beispiel #1: Einfache arithmetische Aufgabe

  • Frage: "2 + 2"

  • Antwort: "4"

  • Belohnungsfunktion 1:

    • Wenn eine Zahl erkannt wird → +1

    • Wenn keine Zahl erkannt wird → -1

  • Belohnungsfunktion 2:

    • Wenn die Zahl mit der korrekten Antwort übereinstimmt → +3

    • Wenn falsch → -3

  • Gesamtbelohnung: Summe aller Belohnungsfunktionen

Beispiel #2: E-Mail-Automatisierungsaufgabe

  • Frage: Eingehende E-Mail

  • Antwort: Ausgehende E-Mail

  • Reward-Funktionen:

    • Wenn die Antwort ein erforderliches Schlüsselwort enthält → +1

    • Wenn die Antwort genau mit der idealen Antwort übereinstimmt → +1

    • Wenn die Antwort zu lang ist → -1

    • Wenn der Name des Empfängers enthalten ist → +1

    • Wenn ein Signaturblock (Telefon, E-Mail, Adresse) vorhanden ist → +1

Unsloth Proximity-basierte Belohnungsfunktion

Wenn du unser Advanced GRPO Colab Notebookangeschaut hast, wirst du bemerken, dass wir eine benutzerdefinierte proximity-basierte Belohnungsfunktion komplett von Grund auf erstellt haben, die darauf abzielt, Antworten zu belohnen, die näher an der korrekten liegen. Diese flexible Funktion kann auf eine breite Palette von Aufgaben angewendet werden.

  • In unseren Beispielen aktivieren wir Reasoning in Qwen3 (Base) und leiten es zu spezifischen Aufgaben an

  • Wende Pre-Finetuning-Strategien an, um zu vermeiden, dass GRPO standardmäßig nur Formatierung lernt

  • Steigere die Bewertungsgenauigkeit mit regex-basierter Übereinstimmung

  • Erstelle benutzerdefinierte GRPO-Vorlagen über generische Prompts wie think, z. B. <start_working_out></end_working_out>

  • Wende proximity-basierte Bewertung an — Modelle erhalten mehr Belohnung für näher gelegene Antworten (z. B. ist 9 vorherzusagen statt 10 besser als 3), während Ausreißer bestraft werden

GSM8K-Belohnungsfunktionen

In unseren anderen Beispielen verwenden wir vorhandene GSM8K-Belohnungsfunktionen von @willccbbarrow-up-right die populär sind und sich als ziemlich effektiv erwiesen haben:

  • correctness_reward_func – Belohnt exakte Label-Übereinstimmungen.

  • int_reward_func – Ermutigt zu ganzzahligen Antworten.

  • soft_format_reward_func – Prüft die Struktur, erlaubt aber kleinere Newline-Abweichungen.

  • strict_format_reward_func – Stellt sicher, dass die Antwortstruktur dem Prompt entspricht, einschließlich Newlines.

  • xmlcount_reward_func – Stellt sicher, dass genau eines jeder XML-Tags in der Antwort vorhanden ist.

🧮Verwendung von vLLM

Du kannst jetzt vLLMarrow-up-right direkt in deinem Finetuning-Stack verwenden, was deutlich mehr Durchsatz ermöglicht und es dir erlaubt, gleichzeitig zu finetunen und Inferenz auf dem Modell durchzuführen! Auf 1x A100 40GB kannst du mit Unsloths dynamischer 4bit-Quantisierung von Llama 3.2 3B Instruct etwa 4000 Tokens/s erwarten. Auf einer 16GB Tesla T4 (freie Colab-GPU) kannst du etwa 300 Tokens/s erreichen. Wir haben außerdem magischerweise die doppelte Speichernutzung beim Laden von vLLM und Unsloth zusammen entfernt, was Einsparungen von etwa 5GB für Llama 3.1 8B und 3GB für Llama 3.2 3B ermöglicht. Unsloth konnte ursprünglich Llama 3.3 70B Instruct in 1x 48GB GPU finetunen, wobei die Llama 3.3 70B-Gewichte 40GB VRAM beanspruchten. Wenn wir die doppelte Speichernutzung nicht entfernen würden, bräuchten wir >= 80GB VRAM beim gleichzeitigen Laden von Unsloth und vLLM. Mit Unsloth kannst du jedoch weiterhin finetunen und die Vorteile schneller Inferenz in einem Paket unter 48GB VRAM erhalten! Um schnelle Inferenz zu nutzen, installiere zuerst vllm und instanziiere Unsloth mit fast_inference:

GRPO-Anforderungsrichtlinien

Wenn du Unsloth für GRPO verwendest, reduzieren wir intelligent den VRAM-Verbrauch um über 90% im Vergleich zu Standardimplementierungen mit Flash Attention 2, indem wir mehrere Tricks anwenden! Bei 20K Kontextlängen beispielsweise mit 8 Generierungen pro Prompt verwendet Unsloth nur 54,3GB VRAM für Llama 3.1 8B, während Standardimplementierungen 510,8GB (90% weniger für Unsloth).

  1. Für GRPOs GPU-VRAM-Anforderungen für QLoRA 4-bitgilt die allgemeine Regel: Die Modellparameter entsprechen ungefähr dem benötigten VRAM (du kannst weniger VRAM verwenden, dies ist jedoch konservativ gerechnet). Je länger die Kontextlänge, desto mehr VRAM wird benötigt. LoRA in 16-bit benötigt mindestens das 4-fache an VRAM.

  2. Unsere neuen speichereffizienten linearen Kernel für GRPO reduzieren den Speicherverbrauch um das 8-fache oder mehr. Das spart 68,5GB Speicher und ist durch Hilfe von torch.compile tatsächlich sogar schneller!

  3. Wir nutzen unseren intelligenten Unsloth Gradient-Checkpointingarrow-up-right Algorithmus, den wir vor einiger Zeit veröffentlicht haben. Er offloaded Zwischenaktivierungen asynchron in den Systemspeicher und ist dabei nur 1% langsamer. Das spart 52GB Speicher.

  4. Unsloth verwendet außerdem denselben GPU-/CUDA-Speicherbereich wie die zugrunde liegende Inferenz-Engine (vLLM), im Gegensatz zu Implementierungen in anderen Paketen. Das spart 16GB Speicher.

Metriken
Unsloth
Standard + FA2

Trainingsspeicherkosten (GB)

42GB

414GB

GRPO-Speicherkosten (GB)

9,8GB

78,3GB

Inferenzkosten (GB)

0GB

16GB

Inference KV-Cache für 20K Kontextlänge (GB)

2,5GB

2,5GB

Gesamter Speicherverbrauch

54,33GB (90% weniger)

510,8GB

In typischen Standard-GRPO-Implementierungen muss man 2 Logits der Größe (8, 20K) erstellen, um den GRPO-Loss zu berechnen. Das benötigt 2 * 2 Bytes * 8 (Anzahl der Generierungen) * 20K (Kontextlänge) * 128256 (Vokabulargröße) = 78,3GB VRAM.

Unsloth reduziert die Speichernutzung für langkontextiges GRPO um das 8-fache, sodass wir nur zusätzliche 9,8GB VRAM für 20K Kontextlängen benötigen!

Wir müssen außerdem den KV-Cache in 16bit ablegen. Llama 3.1 8B hat 32 Schichten, und sowohl K als auch V haben die Größe 1024. Also ist der Speicherverbrauch für 20K Kontextlänge = 2 * 2 Bytes * 32 Schichten * 20K Kontextlänge * 1024 = 2,5GB pro Batch. Wir würden die Batch-Größe für vLLM auf 8 setzen, aber für unsere Berechnungen lassen wir sie auf 1, um VRAM zu sparen. Andernfalls benötigt man 20GB für den KV-Cache.

🎥 Unsloth RL 3-stündiges Workshop-Video

🎓Weiterführende Lektüre

  1. Yannic Kilchers GRPO-Video auf Youtube ist ebenfalls ein Muss! https://www.youtube.com/watch?v=bAWV_yrqx4warrow-up-right

  2. Wir haben 2025 einen 3-stündigen Workshop auf der AI Engineer World's Fair gehalten. Folien und anderes Material sind unter https://docs.unsloth.ai/ai-engineers-2025arrow-up-right

Video-Tutorials

Hier sind einige Video-Tutorials von großartigen YouTubern, die wir fantastisch finden!

Toll, um zu lernen, wie man den Datensatz vorbereitet und Erklärungen hinter Reinforcement Learning + GRPO-Grundlagen zu erhalten
Lokal GRPO auf Ihrem eigenen Gerät

Zuletzt aktualisiert

War das hilfreich?