> For the complete documentation index, see [llms.txt](https://unsloth.ai/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://unsloth.ai/docs/de/loslegen/reinforcement-learning-rl-guide/tutorial-train-your-own-reasoning-model-with-grpo.md).

# Tutorial: Trainiere dein eigenes Reasoning-Modell mit GRPO

DeepSeek entwickelte [GRPO](https://unsloth.ai/blog/grpo) (Group Relative Policy Optimization), um ihre R1-Reasoning-Modelle zu trainieren.

### Schnellstart

Diese Anweisungen sind für unsere vorgefertigten Google-Colab [Notebooks](/docs/de/loslegen/unsloth-notebooks.md). Wenn Sie Unsloth lokal installieren, können Sie unsere Notebooks auch in Ihren bevorzugten Code-Editor kopieren. Wir werden eines dieser Notebooks verwenden:

| [**Qwen3.5 (4B)**](https://colab.research.google.com/github/unslothai/notebooks/blob/main/nb/Qwen3_5_\(4B\)_Vision_GRPO.ipynb) **- Vision - neu** | [**gpt-oss-20b**](https://colab.research.google.com/github/unslothai/notebooks/blob/main/nb/gpt-oss-\(20B\)-GRPO.ipynb) **-** GSPO       | [Gemma 3 (4B)](https://colab.research.google.com/github/unslothai/notebooks/blob/main/nb/Gemma3_\(4B\)-Vision-GRPO.ipynb) - Vision GSPO          |
| ------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
| [**Qwen3 (4B)**](https://colab.research.google.com/github/unslothai/notebooks/blob/main/nb/Qwen3_\(4B\)-GRPO.ipynb) - Erweitert                   | [Qwen3-VL-8B](https://colab.research.google.com/github/unslothai/notebooks/blob/main/nb/Qwen3_VL_\(8B\)-Vision-GRPO.ipynb) - Vision GSPO | [Llama 3.2 (3B)](https://colab.research.google.com/github/unslothai/notebooks/blob/main/nb/Advanced_Llama3_2_\(3B\)_GRPO_LoRA.ipynb) - Erweitert |

{% stepper %}
{% step %}

#### Unsloth installieren

Wenn Sie unser Colab-Notebook verwenden, klicken Sie auf **Runtime > Run all**. Wir empfehlen Ihnen dringend, sich vor dem Start unseren [Fine-Tuning-Leitfaden](/docs/de/loslegen/fine-tuning-llms-guide.md) anzusehen.

Wenn Sie lokal installieren, stellen Sie sicher, dass Sie die richtigen [Abhängigkeiten](/docs/de/loslegen/fine-tuning-for-beginners/unsloth-requirements.md) haben, und verwenden Sie `pip install unsloth` unter Linux oder folgen Sie unserer [Windows-Installations ](/docs/de/loslegen/install/windows-installation.md)anleitung.

<figure><img src="/files/b745962efaea373db155e8c91e3406c1369d2931" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

#### Erfahren Sie mehr über GRPO und Belohnungsfunktionen

Bevor wir anfangen, empfiehlt es sich, mehr über GRPO, Belohnungsfunktionen und deren Funktionsweise zu lernen. Lesen Sie mehr darüber, einschließlich [Tipps & Tricks](/docs/de/loslegen/reinforcement-learning-rl-guide.md#basics-tips)[ hier](/docs/de/loslegen/reinforcement-learning-rl-guide.md#basics-tips).

Sie benötigen außerdem ausreichend VRAM. Im Allgemeinen gilt: Modellparameter = die Menge an VRAM, die Sie benötigen werden. In Colab verwenden wir deren kostenlose GPUs mit 16 GB VRAM, auf denen jedes Modell mit bis zu 16 Milliarden Parametern trainiert werden kann.
{% endstep %}

{% step %}

#### Gewünschte Einstellungen konfigurieren

Wir haben bereits optimale Einstellungen für die besten Ergebnisse für Sie vorausgewählt, und Sie können das Modell auf eines der von uns in unseren [unterstützten Modellen](/docs/de/loslegen/unsloth-model-catalog.md)aufgelisteten Modelle ändern. Für Anfänger würden wir davon abraten, andere Einstellungen zu ändern.

{% hint style="success" %}
Für **fortgeschrittenes GRPO** Dokumentation zu Batching, Generierungs- und Trainingsparametern, [lesen Sie unseren Leitfaden!](/docs/de/loslegen/reinforcement-learning-rl-guide/advanced-rl-documentation.md)
{% endhint %}

<figure><img src="/files/241c85fe7499d58f865e27f5a2126e751dd42bc1" alt="" width="563"><figcaption></figcaption></figure>
{% endstep %}

{% step %}

#### Datenaufbereitung

Wir haben vorab OpenAIs [GSM8K](https://huggingface.co/datasets/openai/gsm8k) Datensatz ausgewählt, der Mathematikaufgaben für die Grundschule enthält, aber Sie könnten ihn durch Ihren eigenen oder einen beliebigen öffentlichen auf Hugging Face ersetzen. Mehr über [Datensätze finden Sie hier](/docs/de/loslegen/fine-tuning-llms-guide/datasets-guide.md).

Ihr Datensatz sollte weiterhin mindestens 2 Spalten für Frage- und Antwortpaare haben. Allerdings darf die Antwort nicht offenlegen, wie die Antwort aus der Frage hergeleitet wurde. Siehe unten ein Beispiel:

<figure><img src="/files/e02c91576262d3478775facd0c6fba31f67833d2" alt=""><figcaption></figcaption></figure>

Wir strukturieren die Daten so, dass das Modell dazu angeregt wird, seine Schlussfolgerung zu formulieren, bevor es eine Antwort liefert. Zunächst legen wir ein klares Format für Prompts und Antworten fest.

```
# Definieren Sie den System-Prompt, der das Modell anweist, ein bestimmtes Format zu verwenden
SYSTEM_PROMPT = """
Antworten Sie im folgenden Format:
<reasoning>
...
</reasoning>
<answer>
...
</answer>
"""

XML_COT_FORMAT = """\
<reasoning>
{reasoning}
</reasoning>
<answer>
{answer}
</answer>
"""
```

Nun zur Vorbereitung des Datensatzes:

```
import re
from datasets import load_dataset, Dataset


# Hilfsfunktionen zum Extrahieren von Antworten aus verschiedenen Formaten
def extract_xml_answer(text: str) -> str:
    answer = text.split("<answer>")[-1]
    answer = answer.split("</answer>")[0]
    return answer.strip()


def extract_hash_answer(text: str) -> str | None:
    if "####" not in text:
        return None
    return text.split("####")[1].strip()


# Funktion zur Vorbereitung des GSM8K-Datensatzes
def get_gsm8k_questions(split="train") -> Dataset:
    data = load_dataset("openai/gsm8k", "main")[split]
    data = data.map(
        lambda x: {
            "prompt": [
                {"role": "system", "content": SYSTEM_PROMPT},
                {"role": "user", "content": x["question"]},
            ],
            "answer": extract_hash_answer(x["answer"]),
        }
    )
    return data


dataset = get_gsm8k_questions()
```

Der Datensatz wird vorbereitet, indem die Antworten extrahiert und als strukturierte Zeichenfolgen formatiert werden.
{% endstep %}

{% step %}

#### Belohnungsfunktionen/Prüfer

[Belohnungsfunktionen/Prüfer](/docs/de/loslegen/reinforcement-learning-rl-guide.md#reward-functions-verifier) zeigt uns, ob das Modell gemäß dem von Ihnen bereitgestellten Datensatz gut oder schlecht abschneidet. Jeder Generierungsdurchlauf wird danach bewertet, wie er im Vergleich zum Durchschnitt der übrigen Generierungen abschneidet. Sie können eigene Belohnungsfunktionen erstellen, wir haben jedoch bereits vorab welche für Sie ausgewählt mit [Wills GSM8K](/docs/de/loslegen/reinforcement-learning-rl-guide.md#gsm8k-reward-functions) Belohnungsfunktionen. Damit haben wir 5 verschiedene Möglichkeiten, jede Generierung zu belohnen.

Sie können Ihre Generierungen in ein LLM wie ChatGPT 4o oder Llama 3.1 (8B) eingeben und eine Belohnungsfunktion sowie einen Prüfer entwerfen, um sie zu bewerten. Geben Sie zum Beispiel Ihre Generierungen in ein LLM Ihrer Wahl ein und legen Sie eine Regel fest: "Wenn die Antwort zu roboterhaft klingt, ziehe 3 Punkte ab." Das hilft, Ausgaben anhand von Qualitätskriterien zu verfeinern. **Sehen Sie Beispiele** dafür, wie sie aussehen können [hier](/docs/de/loslegen/reinforcement-learning-rl-guide.md#reward-function-examples).

**Beispiel für eine Belohnungsfunktion für eine E-Mail-Automatisierungsaufgabe:**

* **Frage:** Eingehende E-Mail
* **Antwort:** Ausgehende E-Mail
* **Belohnungsfunktionen:**
  * Wenn die Antwort ein erforderliches Schlüsselwort enthält → **+1**
  * Wenn die Antwort genau der idealen Antwort entspricht → **+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**

<figure><img src="/files/ca2960a7efc87937260508d7ac2374c1467420ab" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

#### Trainieren Sie Ihr Modell

Wir haben Hyperparameter für die bestmöglichen Ergebnisse vorausgewählt, Sie können sie jedoch ändern. Lesen Sie alles über [Parameter hier](/docs/de/loslegen/fine-tuning-llms-guide/lora-hyperparameters-guide.md). Für **fortgeschrittenes GRPO** Dokumentation zu Batching, Generierungs- und Trainingsparametern, [lesen Sie unseren Leitfaden!](/docs/de/loslegen/reinforcement-learning-rl-guide/advanced-rl-documentation.md)

<figure><img src="/files/2b0dc088b596ad4778901def196686a116184812" alt="" width="563"><figcaption></figcaption></figure>

Der **GRPOConfig** definiert wichtige Hyperparameter für das Training:

* `use_vllm`: Aktiviert schnelle Inferenz mit vLLM.
* `learning_rate`: Bestimmt die Lernrate des Modells.
* `num_generations`: Gibt die Anzahl der pro Prompt generierten Vervollständigungen an.
* `max_steps`: Legt die Gesamtzahl der Trainingsschritte fest.

{% hint style="success" %}
**NEU!** Wir unterstützen jetzt DAPO, Dr. GRPO und die meisten anderen neuen GRPO-Techniken. Sie können mit den folgenden Argumenten in GRPOConfig experimentieren, um Folgendes zu aktivieren:

```python
epsilon=0.2,
epsilon_high=0.28, # einseitig
delta=1.5 # zweiseitig

loss_type='bnpo',
# oder:
loss_type='grpo',
# oder:
loss_type='dr_grpo',
# oder:
loss_type='dapo',

mask_truncated_completions=True,
```

{% endhint %}

Sie sollten sehen, wie die Belohnung im Laufe der Zeit steigt. Wir empfehlen, mindestens 300 Schritte zu trainieren, was etwa 30 Minuten dauern kann; für optimale Ergebnisse sollten Sie jedoch länger trainieren.

{% hint style="warning" %}
Wenn Sie Probleme damit haben, dass Ihr GRPO-Modell nicht lernt, empfehlen wir Ihnen dringend, unsere [fortgeschrittenen GRPO-Notebooks](/docs/de/loslegen/unsloth-notebooks.md#grpo-reasoning-notebooks) zu verwenden, da sie eine wesentlich bessere Belohnungsfunktion haben und Sie schneller und häufiger Ergebnisse sehen sollten.
{% endhint %}

Sie werden außerdem Beispielantworten sehen, die es Ihnen ermöglichen, zu erkennen, wie das Modell lernt. Einige können Schritte, XML-Tags, Versuche usw. enthalten, und die Idee ist, dass es beim Trainieren immer besser wird, weil es immer höher bewertet wird, bis wir mit langen Reasoning-Ketten die von uns gewünschten Ausgaben erhalten.

<figure><img src="/files/8a8fef942091038e70b6c916d0758eed17d37798" alt="" width="563"><figcaption></figcaption></figure>
{% endstep %}

{% step %}

#### Modell ausführen und bewerten

Führen Sie Ihr Modell aus, indem Sie auf die Wiedergabetaste klicken. Im ersten Beispiel gibt es normalerweise kein Reasoning in der Antwort, und um das Reasoning zu sehen, müssen wir zunächst die LoRA-Gewichte speichern, mit denen wir gerade mit GRPO trainiert haben, und zwar mit:

<pre><code><strong>model.save_lora("grpo_saved_lora")
</strong></code></pre>

<figure><img src="/files/53540343bf8cd87c8817f345ad8785fde06effa3" alt=""><figcaption><p>Der erste Inferenzdurchlauf hat kein Reasoning. Sie müssen die LoRA laden und testen, um das Reasoning sichtbar zu machen.</p></figcaption></figure>

Dann laden wir die LoRA und testen sie. Unser Reasoning-Modell ist deutlich besser – es ist nicht immer korrekt, da wir es nur etwa eine Stunde lang trainiert haben – es wird besser, wenn wir die Sequenzlänge verlängern und länger trainieren!

Anschließend können Sie Ihr Modell nach GGUF, Ollama usw. speichern, indem Sie unserem [Leitfaden hier](https://unsloth.ai/docs/de/loslegen/reinforcement-learning-rl-guide/pages/44aed34263310d67280841ab6b72ea1e5648761f#id-7.-running--saving-the-model).

<figure><img src="/files/d47988773ce0bb39d6a6c43b7e91d07dd3e59fa8" alt=""><figcaption></figcaption></figure>

folgen. Wenn Sie immer noch kein Reasoning erhalten, haben Sie möglicherweise entweder zu wenige Schritte trainiert oder Ihre Belohnungsfunktion/Ihr Prüfer war nicht optimal.
{% endstep %}

{% step %}

#### Speichern Sie Ihr Modell

Wir haben mehrere Optionen zum Speichern Ihres feinabgestimmten Modells, aber wir konzentrieren uns auf die einfachsten und beliebtesten Ansätze, über die Sie mehr lesen können [hier](/docs/de/grundlagen/inference-and-deployment.md)

**Speichern in 16-Bit-Präzision**

Sie können das Modell mit 16-Bit-Präzision mit dem folgenden Befehl speichern:

```python
# In 16-Bit-Präzision speichern
model.save_pretrained_merged("model", tokenizer, save_method="merged_16bit")
```

**Auf den Hugging Face Hub hochladen**

Um Ihr Modell zu teilen, laden wir es mit der `push_to_hub_merged` Methode auf den Hugging Face Hub hoch. Dies ermöglicht das Speichern des Modells in mehreren Quantisierungsformaten.

```python
# Auf den Hugging Face Hub hochladen (erfordert ein Token)
model.push_to_hub_merged(
    "your-username/model-name", tokenizer, save_method="merged_16bit", token="your-token"
)
```

**Speichern im GGUF-Format für llama.cpp**

Unsloth unterstützt auch das Speichern im **GGUF-Format**, wodurch es kompatibel ist mit **llama.cpp** und **Ollama**.

```python
model.push_to_hub_gguf(
    "your-username/model-name",
    tokenizer,
    quantization_method=["q4_k_m", "q8_0", "q5_k_m"],
    token="your-token",
)
```

Einmal im GGUF-Format gespeichert, kann das Modell mithilfe von **llama.cpp** oder in anderen Inferenz-Engines verwendet werden.
{% endstep %}
{% endstepper %}

## Video-Tutorials

Hier sind einige Video-Tutorials von großartigen YouTubern, die wir für fantastisch halten!

{% embed url="<https://www.youtube.com/watch?v=9t-BAjzBWj8>" %}

{% columns %}
{% column width="50%" %}
{% embed url="<https://www.youtube.com/watch?t=3289s&v=bbFEYPx9Hpo>" %}
Toll, um zu lernen, wie man den Datensatz vorbereitet, und Erklärungen zu den Grundlagen von Reinforcement Learning + GRPO
{% endembed %}

{% embed url="<https://www.youtube.com/watch?v=oF0_eMhzRaQ>" %}
{% endcolumn %}

{% column width="50%" %}
{% embed url="<https://www.youtube.com/watch?v=juOh1afy-IE>" %}

{% embed url="<https://www.youtube.com/watch?v=SoPE1cUz3Hs>" %}
Lokales GRPO auf Ihrem eigenen Gerät
{% endembed %}
{% endcolumn %}
{% endcolumns %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://unsloth.ai/docs/de/loslegen/reinforcement-learning-rl-guide/tutorial-train-your-own-reasoning-model-with-grpo.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
