进阶 unsloth.ai 2026-10-07 22:27:00 · 6 阅读

第26章 用 Unsloth 在本地训练你自己的 R1 推理模型(GRPO)

Unsloth 下载 ☰ 下载 博客 使用 Unsloth 训练你自己的 R1 推理模型 (GRPO) 2025 年 2 月 6 日 • 作者 Daniel & Michael 2025 年 2 月 6 日•作者 Daniel & Michael 2025 年 2 月 20 日更新:现在使用 Unsloth 只需 5GB 显存(从 7GB 降低)即可训练你自己的推理模型,且支持上下文长度延长 10 倍!在此阅读更新详情! 在此查看我们文档中的分步教程! 今天,我们很高兴介绍在 Unsloth 中加入推理功能!DeepSeek 的 R1 研究揭示了一个“顿悟时刻”,R1-Zero 通过采用组相对策略优化 (GRPO),在没有人类反馈的情况下自主学会了分配更多的思考时间。 我们优化了整个 GRPO 流程,使其显存使用量比 Hugging Face + FA2 减少 80%。这使得你仅使用 7GB 显存和 Qwen2.5 (1.5B) 即可复现 R1-Zero 的“顿悟时刻”。 试试我们免费的 GRPO notebook:Llama 3.1 (8B) 或用于获得更好结果的高级 GRPO notebook:Qwen3 (4),支持在 Colab 上运行。 ❤️ 附注:感谢大家上周对我们 R1 Dynamic 1.58-bit GGUF 的喜爱,别忘了 ⭐Star 我们:github.com/unslothai/unsloth 💡 核心详情 拥有 15GB 显存时,Unsloth 允许你将任何参数量高达 15B 的模型(如 Llama 3.1 (8B)、Phi-4 (14B)、Mistral (7B) 或 Qwen2.5 (7B))转化为推理模型 最低要求:仅 7GB 显存即可在本地训练你自己的推理模型。 Tiny-Zero 的优秀团队曾证明,使用 Qwen2.5 (1.5B) 也能实现自己的“顿悟时刻”——但这需要 2 张 A100 GPU (160GB 显存)。现在,使用 Unsloth,你仅用一张 7GB 显存的 GPU 即可实现同样的“顿悟” 此前,GRPO 仅支持全量微调,但我们已使其支持 QLoRA 和 LoRA 请注意,这不是微调 DeepSeek 的 R1 蒸馏模型,也不是使用 R1 的蒸馏数据进行微调(Unsloth 已支持这些功能)。这是使用 GRPO 将标准模型转化为成熟的推理模型。 GRPO 的应用场景包括:如果你想制作带有奖励机制的定制模型(例如用于法律、医学等领域),GRPO 可以提供帮助。 如果你只有输入和输出数据(比如问题和答案),没有思维链或推理过程,GRPO 可以神奇地帮你生成推理过程!还有更多妙用🤔 GRPO 与"aha 时刻"DeepSeek 的研究人员在纯强化学习(RL)训练 R1-Zero 时观察到了"aha 时刻"。模型在没有人为引导或预设指令的情况下,学会了通过重新审视自己的初始思路来延长思考时间。

在一个测试示例中,我们只用 GRPO 训练了 Phi-4 100 步,效果就已经很明显:没有用 GRPO 的模型不会输出思考标记,而用了 GRPO 的模型不仅有思考标记,还得出了正确答案。这种魔力可以通过 GRPO 重现。GRPO 是一种强化学习算法,能高效优化响应,而不像 Proximal Policy Optimization(PPO)那样需要依赖价值函数。在我们的 notebook 中,我们用 GRPO 训练模型,目标是让它自主发展出自我验证和搜索能力——也就是创造一个小型"aha 时刻"。
工作原理:模型生成一组响应。每个响应根据正确性或由固定奖励函数定义的其他指标进行评分,而不是用 LLM 奖励模型。计算这一组响应的平均分。将每个响应的得分与组内平均分比较。强化模型,让它倾向于得分更高的响应。举个例子,假设我们想让模型解决:
1+1 等于几? >> 思维链/推导过程 >> 答案是 2。
2+2 等于几? >> 思维链/推导过程 >> 答案是 4。

过去,人们需要收集大量数据来填充推导过程/思维链。但 GRPO(DeepSeek 使用的算法)或其他 RL 算法可以引导模型自动展现推理能力并生成推理轨迹。我们要做的只是设计好的奖励函数或验证器。比如,答案正确就给 1 分,有拼写错误就扣 0.1 分,等等!我们可以用很多很多函数来奖励这个过程。🦥 在 Unsloth 中使用 GRPO如果你在本地配合 Unsloth 使用 GRPO,还需要"pip install diffusers",因为它是依赖项。

建议至少训练 300 步,奖励指标才会开始显著提升,同时请确保使用 vLLM 的最新版本。请注意,我们在 Colab 上的示例仅训练了一小时,因此效果欠佳。为了获得良好结果,至少需要训练 12 小时(这是 GRPO 的特性),但这也并非强制要求,你可以随时停止训练。

建议对参数量至少 1.5B 的模型应用 GRPO,以确保正确生成思维(thinking)tokens,较小的模型可能无法做到这一点。如果使用基座模型,请确保配置了聊天模板(chat template)。Unsloth 现已内置 GRPO 训练损失追踪功能,无需再使用 wandb 等外部工具。除了支持 GRPO,我们还支持 Online DPO、PPO 和 RLOO!更多详情可参阅 Keith 的文章及博客(包含他在 GitHub 上的分叉,展示如何让 Online DPO 运行)。此外,Joey 的推文中展示了 GRPO 改动在 Google Colab 上的初始草稿。正是得益于他们的贡献,我们才得以支持其他基于生成的强化学习方法。下图展示了 Unsloth 的 Online DPO 与标准 Hugging Face + FA2 的显存占用对比。✨ Unsloth x vLLM20 倍吞吐量,50% 显存节省:现在你可以在微调流程中直接使用 vLLM,从而大幅提高吞吐量,并实现模型微调与推理同时进行!在使用 Unsloth 的动态 4bit 量化微调 Llama 3.2 3B Instruct 时,单张 A100 40GB 显卡预计可达 4000 tokens/s。而在 16GB 显存的 Tesla T4(免费 Colab GPU)上,也可达到 300 tokens/s。

我们还巧妙消除了同时加载 vLLM 和 Unsloth 时的双重显存占用,对于 Llama 3.1 8B 可节省约 5GB 显存,对于 Llama 3.2 3B 可节省 3GB(灵感来自 Boris)。原本 Unsloth 单张 48GB 显卡即可微调 Llama 3.3 70B Instruct,其中模型权重占用 40GB 显存。若未消除双重显存占用,同时加载 Unsloth 和 vLLM 时将需要 80GB 以上的显存。

而使用 Unsloth,你可以在 48GB 显存内实现微调并享受快速推理的双重优势。若要启用快速推理,请先安装 vllm,并在实例化 Unsloth 时设置 fast_inference:pip install unsloth vllm
from unsloth import FastLanguageModel
model, tokenizer = FastLanguageModel.from_pretrained(
model_name = "unsloth/Llama-3.2-3B-Instruct",
fast_inference = True,
)
```html model.fast_generate(["Hello!"]) vLLM 在 Unsloth 中的发现 vLLM 现在可以加载 Unsloth 动态 4-bit 量化模型。正如我们在 1.58-bit 动态 R1 GGUF 中展示的那样,动态地将某些层量化为 4-bit,而其他层量化为 16-bit,可以在保持模型小巧的同时显著提升准确性。 我们自动选择多项参数,以兼顾 RAM 和 VRAM 效率以及最大吞吐量(例如分块预填充 token 数量、最大序列数等)。我们在 vLLM 中默认启用 -O3 优化和前缀缓存。我们发现,在旧款 GPU 上,Flashinfer 实际上会让速度变慢 10%。虽然 FP8 KV 缓存会使速度变慢 10%,但能将潜在吞吐量翻倍。 我们通过在 vLLM 中解析 state dict 而非从磁盘加载的方式,实现了 LoRA 的加载功能——这可以让你的 GRPO 训练速度快 1.5 倍。目前的一个研究热点是探索如何在 vLLM 中直接编辑 LoRA 适配器(我目前还不确定具体方法)。如果实现这一点,速度还能大幅提升,因为我们现在存在不必要的 GPU 数据搬运。 vLLM 会出现奇怪的 VRAM 峰值,尤其是在批量生成期间。我们添加了一个批量生成函数来减少内存峰值。 💕 谢谢大家! 特别感谢 Keith、Edd、Datta、MrDragonFox 和 Joey 在本项目中的出色帮助。当然,也要感谢 Hugging Face 的同仁们,尤其是 TRL 团队、vLLM 团队以及开源社区,他们的贡献让这一切成为可能。一如既往,感谢大家使用并分享 Unsloth。🙏 老规矩,欢迎加入我们的 Reddit 页面和 Discord 服务器获取帮助或表达支持!你也可以通过 Twitter 和新闻简报关注我们。 感谢阅读! Daniel & Michael Han 🦥
2025 年 2 月 6 日 立即微调视觉模型!免费开始 加入我们的 Discord ```

评论 (0)