> 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/jp/meru/reinforcement-learning-rl-guide/tutorial-train-your-own-reasoning-model-with-grpo.md).

# チュートリアル: GRPO で自分だけの推論モデルを訓練する方法

DeepSeek は開発しました [GRPO](https://unsloth.ai/blog/grpo) （Group Relative Policy Optimization）を、彼らの R1 推論モデルを訓練するために。

### クイックスタート

これらの手順は、あらかじめ用意された Google Colab の [ノートブック](/docs/jp/meru/unsloth-notebooks.md)用です。Unsloth をローカルにインストールしている場合は、お気に入りのコードエディタ内で当社のノートブックをコピーして使うこともできます。以下のいずれかのノートブックを使用します：

| [**Qwen3.5 (4B)**](https://colab.research.google.com/github/unslothai/notebooks/blob/main/nb/Qwen3_5_\(4B\)_Vision_GRPO.ipynb) **- ビジョン - 新規** | [**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) - ビジョン GSPO     |
| ---------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- |
| [**Qwen3 (4B)**](https://colab.research.google.com/github/unslothai/notebooks/blob/main/nb/Qwen3_\(4B\)-GRPO.ipynb) - 上級                       | [Qwen3-VL-8B](https://colab.research.google.com/github/unslothai/notebooks/blob/main/nb/Qwen3_VL_\(8B\)-Vision-GRPO.ipynb) - ビジョン GSPO | [Llama 3.2 (3B)](https://colab.research.google.com/github/unslothai/notebooks/blob/main/nb/Advanced_Llama3_2_\(3B\)_GRPO_LoRA.ipynb) - 上級 |

{% stepper %}
{% step %}

#### Unsloth をインストール

当社の Colab ノートブックを使用している場合は、 **ランタイム > すべて実行**をクリックしてください。開始する前に、ぜひ当社の [ファインチューニングガイド](/docs/jp/meru/fine-tuning-llms-guide.md) をご確認いただくことを強くおすすめします。

ローカルにインストールする場合は、正しい [要件](/docs/jp/meru/fine-tuning-for-beginners/unsloth-requirements.md) を確認し、Linux では `pip install unsloth` を使用するか、当社の [Windows インストール ](/docs/jp/meru/install/windows-installation.md)手順に従ってください。

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

{% step %}

#### GRPO と報酬関数について学ぶ

始める前に、GRPO、報酬関数、およびそれらの仕組みについてさらに学ぶことをおすすめします。以下を含め、詳細はこちらをご覧ください [ヒントとコツ](/docs/jp/meru/reinforcement-learning-rl-guide.md#basics-tips)[ こちら](/docs/jp/meru/reinforcement-learning-rl-guide.md#basics-tips).

また、十分な VRAM も必要です。一般に、モデルのパラメータ数 = 必要な VRAM 量です。Colab では、無料の 16GB VRAM GPU を使用しており、最大 16B パラメータまでの任意のモデルを訓練できます。
{% endstep %}

{% step %}

#### 希望する設定を構成する

最良の結果が得られるよう、最適な設定をすでに事前選択してあります。また、モデルは当社の [サポートされているモデル](/docs/jp/meru/unsloth-model-catalog.md)に記載されている任意のものに変更できます。初心者の方には、その他の設定を変更することはおすすめしません。

{% hint style="success" %}
については **高度な GRPO** バッチ処理、生成、トレーニングパラメータに関するドキュメントは、 [当社のガイドをお読みください！](/docs/jp/meru/reinforcement-learning-rl-guide/advanced-rl-documentation.md)
{% endhint %}

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

{% step %}

#### データ準備

OpenAI の [GSM8K](https://huggingface.co/datasets/openai/gsm8k) データセットを事前選択しています。これは小学校レベルの数学問題を含んでいますが、あなた自身のものや Hugging Face 上の公開データセットに変更することもできます。 [データセットについてはこちら](/docs/jp/meru/fine-tuning-llms-guide/datasets-guide.md).

あなたのデータセットには、質問と回答のペアとして少なくとも 2 列が必要です。ただし、回答には、質問からどのように答えを導いたかという推論過程を含めてはいけません。以下に例を示します：

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

モデルが回答を返す前に推論を明確に述べるよう促すため、データを構造化します。まず、プロンプトと応答の両方について明確な形式を定めます。

```
# モデルに特定の形式を使うよう指示するシステムプロンプトを定義する
SYSTEM_PROMPT = """
次の形式で応答してください：
<reasoning>
...
</reasoning>
<answer>
...
</answer>
"""

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

それでは、データセットを準備します：

```
import re
from datasets import load_dataset, Dataset


# さまざまな形式から回答を抽出するためのヘルパー関数
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()


# GSM8K データセットを準備する関数
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()
```

データセットは、回答を抽出し、それらを構造化文字列として整形することで準備されます。
{% endstep %}

{% step %}

#### 報酬関数/検証器

[報酬関数/検証器](/docs/jp/meru/reinforcement-learning-rl-guide.md#reward-functions-verifier) は、提供したデータセットに基づいてモデルがうまく機能しているかどうかを知らせてくれます。各生成実行は、他の生成の平均スコアと比較してどの程度うまく機能しているかで評価されます。独自の報酬関数を作成することもできますが、当社ではすでに [Will の GSM8K](/docs/jp/meru/reinforcement-learning-rl-guide.md#gsm8k-reward-functions) 報酬関数を事前選択しています。これにより、各生成に報酬を与える 5 つの異なる方法があります。

生成結果を ChatGPT 4o や Llama 3.1 (8B) のような LLM に入力し、それを評価するための報酬関数と検証器を設計できます。たとえば、生成結果を任意の LLM に入力して、「答えがあまりにも機械的に聞こえる場合は 3 点減点する」というルールを設定します。これにより、品質基準に基づいて出力を改善できます。 **例を見る** それらがどのようなものになり得るかの [こちら](/docs/jp/meru/reinforcement-learning-rl-guide.md#reward-function-examples).

**メール自動化タスクのための報酬関数の例：**

* **質問：** 受信メール
* **回答：** 送信メール
* **報酬関数：**
  * 回答に必須キーワードが含まれている場合 → **+1**
  * 回答が理想的な応答と完全に一致する場合 → **+1**
  * 応答が長すぎる場合 → **-1**
  * 受信者の名前が含まれている場合 → **+1**
  * 署名ブロック（電話、メール、住所）が存在する場合 → **+1**

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

{% step %}

#### モデルを訓練する

最適な結果を得るためのハイパーパラメータは事前選択されていますが、変更することもできます。 [パラメータの詳細はこちら](/docs/jp/meru/fine-tuning-llms-guide/lora-hyperparameters-guide.md)。 **高度な GRPO** バッチ処理、生成、トレーニングパラメータに関するドキュメントは、 [当社のガイドをお読みください！](/docs/jp/meru/reinforcement-learning-rl-guide/advanced-rl-documentation.md)

<figure><img src="/files/2520de9d09bb7acad26b32c663ef0b25ff15f893" alt="" width="563"><figcaption></figcaption></figure>

この **GRPOConfig** は、トレーニングの主要なハイパーパラメータを定義します：

* `use_vllm`：vLLM を使用した高速推論を有効化します。
* `learning_rate`：モデルの学習速度を決定します。
* `num_generations`：プロンプトごとに生成される完了数を指定します。
* `max_steps`：トレーニングの総ステップ数を設定します。

{% hint style="success" %}
**新機能！** 現在、DAPO、Dr. GRPO、およびその他ほとんどの新しい GRPO 技法をサポートしています。有効化するには、GRPOConfig 内で以下の引数を試せます：

```python
epsilon=0.2,
epsilon_high=0.28, # 片側
delta=1.5 # 両側

loss_type='bnpo',
# または：
loss_type='grpo',
# または：
loss_type='dr_grpo',
# または：
loss_type='dapo',

mask_truncated_completions=True,
```

{% endhint %}

時間の経過とともに報酬が増加していくはずです。少なくとも 300 ステップの訓練をおすすめします。これは 30 分ほどかかる場合がありますが、最適な結果を得るには、より長く訓練するべきです。

{% hint style="warning" %}
GRPO モデルが学習しない問題がある場合は、当社の [高度な GRPO ノートブック](/docs/jp/meru/unsloth-notebooks.md#grpo-reasoning-notebooks) を使用することを強くおすすめします。はるかに優れた報酬関数を備えており、結果がずっと速く、頻繁に見られるはずです。
{% endhint %}

サンプル回答も表示されるため、モデルがどのように学習しているかを確認できます。中にはステップ、XML タグ、試行などを含むものもありますが、訓練が進むにつれて、より高いスコアが与えられることでどんどん良くなっていき、最終的には長い推論連鎖を伴う望ましい出力が得られる、というのが狙いです。

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

{% step %}

#### モデルを実行して評価する

再生ボタンをクリックしてモデルを実行します。最初の例では、通常、回答に推論が含まれていません。推論を見るには、まず GRPO で訓練したばかりの LoRA 重みを次のように保存する必要があります：

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

<figure><img src="/files/29af4ba0ccbbe81e9664732c643a62524038de3a" alt=""><figcaption><p>最初の推論実行例には推論がありません。推論を明らかにするには、LoRA を読み込んでテストする必要があります。</p></figcaption></figure>

次に LoRA を読み込んでテストします。私たちの推論モデルはずっと良くなっています。ただし、1 時間ほどしか訓練していないため、常に正しいわけではありません。シーケンス長を延ばして、より長く訓練すれば、さらに良くなります！

その後、当社の [こちらのガイド](https://unsloth.ai/docs/jp/meru/reinforcement-learning-rl-guide/pages/ae7926a0f371a1f594e3344d85571edf864a5259#id-7.-running--saving-the-model).

<figure><img src="/files/7439b1df57033bd7e9b8451af8a5c535d4e7fcef" alt=""><figcaption></figcaption></figure>

に従うことで、モデルを GGUF や Ollama などに保存できます。それでも推論がまったく得られない場合は、訓練ステップ数が少なすぎるか、報酬関数/検証器が最適でなかった可能性があります。
{% endstep %}

{% step %}

#### モデルを保存する

ファインチューニング済みモデルを保存するための選択肢はいくつかありますが、ここでは最も簡単で人気のある方法に焦点を当てます。詳細はこちらをご覧ください [こちら](/docs/jp/ji-ben/inference-and-deployment.md)

**16 ビット精度で保存する**

次のコマンドを使用して、モデルを 16 ビット精度で保存できます：

```python
# 16 ビット精度で保存
model.save_pretrained_merged("model", tokenizer, save_method="merged_16bit")
```

**Hugging Face Hub へプッシュする**

モデルを共有するために、 `push_to_hub_merged` メソッドを使用して Hugging Face Hub へプッシュします。これにより、モデルを複数の量子化形式で保存できます。

```python
# Hugging Face Hub にプッシュする（トークンが必要）
model.push_to_hub_merged(
    "your-username/model-name", tokenizer, save_method="merged_16bit", token="your-token"
)
```

**llama.cpp 用に GGUF 形式で保存する**

Unsloth は **GGUF 形式**での保存もサポートしており、これにより **llama.cpp** および **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",
)
```

GGUF 形式で保存すると、モデルは **llama.cpp** を使用して軽量環境に簡単にデプロイしたり、他の推論エンジンで使用したりできます。
{% endstep %}
{% endstepper %}

## 動画チュートリアル

ここでは、私たちが素晴らしいと思う、すばらしい YouTuber たちが作成した動画チュートリアルをいくつか紹介します！

{% 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>" %}
データセットの準備方法や、強化学習 + 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>" %}
自分のデバイスでローカル GRPO
{% 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, and the optional `goal` query parameter:

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

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
