今天,Unsloth 很高兴地介绍了 Unsloth 的推理功能!DeepSeek 的 R1 研究揭示了一个“顿悟时刻”,其中 R1-Zero 通过使用组相对策略优化 (GRPO) 自主学习分配更多的思考时间,而无需人工反馈。
Unsloth 增强了整个 GRPO 流程,使其使用的 VRAM 比 Hugging Face + FA2 少 80%。这使得用户可以使用 Qwen2.5 (1.5B) 在仅 7GB 的 VRAM 上重现 R1-Zero 的“顿悟时刻”。
试用 Unsloth 免费的 GRPO notebook:Llama 3.1 (8B) on Colab
有关 Phi-4 等其他模型的 GRPO notebooks,请访问 Unsloth 的文档
💡 主要细节
- 凭借 15GB VRAM,Unsloth 允许用户将任何高达 15B 参数的模型(如 Llama 3.1 (8B)、Phi-4 (14B)、Mistral (7B) 或 Qwen2.5 (7B))转换为推理模型
- 最低要求:只需 7GB VRAM 即可在本地训练您自己的推理模型。
- Tiny-Zero 的出色团队证明,用户可以使用 Qwen2.5 (1.5B) 实现自己的“顿悟”时刻——但这需要 2 个 A100 GPU (160GB VRAM)。现在,借助 Unsloth,用户只需一个 7GB VRAM GPU 即可实现相同的“顿悟”时刻
- 以前,GRPO 仅支持完全微调,但 Unsloth 使其适用于 QLoRA 和 LoRA
- 请注意,这不是微调 DeepSeek 的 R1 蒸馏模型,也不是使用 R1 的蒸馏数据进行调优(Unsloth 已经支持)。这是使用 GRPO 将标准模型转换为成熟的推理模型。
- GRPO 的用例包括:如果用户想创建一个具有奖励的定制模型(例如用于法律、医学等),那么 GRPO 可以提供帮助。
如果用户有输入和输出数据(如问题和答案),但没有思维链或推理过程,GRPO 可以神奇地为用户创建推理过程!+ 更多
🤔 GRPO + “顿悟”时刻
DeepSeek 的研究人员在使用纯强化学习 (RL) 训练 R1-Zero 时观察到一个“顿悟时刻”。该模型通过重新评估其初始方法来学习延长其思考时间,而无需任何人工指导或预定义指令。
在一个测试示例中,即使 Unsloth 仅使用 GRPO 用 100 步训练了 Phi-4,结果已经很明显。没有 GRPO 的模型没有思考 Token,而使用 GRPO 训练的模型有思考 Token,并且也有正确的答案。
这种魔力可以通过 GRPO 重现,GRPO 是一种 RL 算法,可以有效地优化响应,而不需要价值函数,这与依赖价值函数的近端策略优化 (PPO) 不同。在 Unsloth 的 notebooks 中,Unsloth 使用 GRPO 训练一个模型,旨在让它自主地发展自己的自我验证和搜索能力——创造一个迷你的“顿悟时刻”。
工作原理:
- 模型生成响应组。
- 每个响应都根据正确性或由某些奖励函数创建的其他指标进行评分,而不是由大语言模型奖励模型评分。
- 计算组的平均分数。
- 将每个响应的分数与组平均值进行比较。
- 模型得到加强,以支持得分较高的响应。
例如,假设 Unsloth 希望模型解决:
1+1 是多少? >> 思维链/计算过程 >> 答案是 2。
2+2 是多少? >> 思维链/计算过程 >> 答案是 4。
最初,人们必须收集大量数据来填充计算过程/思维链。但是 GRPO(DeepSeek 使用的算法)或其他 RL 算法可以引导模型自动展现推理能力并创建推理轨迹。相反,Unsloth 需要创建良好的奖励函数或验证器。例如,如果它得到正确的答案,给它 1 分。如果某些单词拼写错误,则减去 0.1。以此类推!Unsloth 可以提供许多函数来奖励这个过程。
🦥 Unsloth 中的 GRPO
如果用户在本地将 GRPO 与 Unsloth 一起使用,请同时“pip install diffusers”,因为它是依赖项。
至少等待 300 步,奖励才会真正增加,请使用最新版本的 vLLM。请记住,Unsloth 在 Colab 上的示例只是在一个小时内训练的,因此结果不理想。为了获得良好的结果,用户需要训练至少 12 个小时(这就是 GRPO 的工作方式),但请记住,这不是强制性的,因为用户可以随时停止。
建议 将 GRPO 应用于至少 1.5B 参数的模型,以正确生成思考 Token,因为较小的模型可能无法生成。如果用户使用的是基础模型,请确保用户有聊天模板。GRPO 的训练损失跟踪现在直接内置于 Unsloth 中,无需 wandb 等外部工具。
除了添加 GRPO 支持外,Unsloth 随后还支持 Online DPO、PPO 和 RLOO!有关 Unsloth 的 Online DPO VRAM 消耗与标准 Hugging Face + FA2 的比较图,请参见下文。
✨ Unsloth x vLLM
吞吐量提高 20 倍,VRAM 节省 50%:
用户现在可以在微调堆栈中直接使用 vLLM,这允许更大的吞吐量,并允许用户同时对模型进行微调和推理!在 1 个 A100 40GB 上,使用 Unsloth 的 Llama 3.2 3B Instruct 动态 4 位量化,预计 4000 tokens / s 左右。在 16GB Tesla T4(免费 Colab GPU)上,用户可以获得 300 tokens / s。
Unsloth 还神奇地 消除了 同时加载 vLLM 和 Unsloth 时的 双倍内存使用,从而为 Llama 3.1 8B 节省了大约 5GB,为 Llama 3.2 3B 节省了 3GB(感谢 Boris 的启发)。Unsloth 最初可以在 1 个 48GB GPU 中微调 Llama 3.3 70B Instruct,Llama 3.3 70B 权重占用 40GB VRAM。如果不消除双倍内存使用,那么在同时加载 Unsloth 和 vLLM 时,Unsloth 将需要 >= 80GB 的 VRAM。
但是使用 Unsloth,用户仍然可以在 48GB 以下的 VRAM 中进行微调并获得快速推理的好处!要使用快速推理,首先安装 vllm,并使用 fast_inference 实例化 Unsloth:
pip install unsloth vllm from unsloth import FastLanguageModel model, tokenizer = FastLanguageModel.from_pretrained( model_name = "unsloth/Llama-3.2-3B-Instruct", fast_inference = True, ) model.fast_generate(["Hello!"])
Unsloth 中的 vLLM 发现
- vLLM 现在可以加载 Unsloth Dynamic 4-bit 量化。就像 Unsloth 的 1.58bit Dynamic R1 GGUF 一样,Unsloth 表明将某些层动态量化为 4 位,将某些层动态量化为 16 位可以显著提高准确性,同时保持模型较小。
- Unsloth 自动选择多个参数以考虑 RAM、VRAM 效率和最大吞吐量(如 # 块预填充 tokens、# 最大序列等)。Unsloth 默认在 vLLM 中启用 -O3 并启用前缀缓存。Unsloth 发现在旧 GPU 上,Flashinfer 实际上慢了 10%。FP8 KV 缓存使速度慢了 10%,但吞吐量潜力翻倍。
- Unsloth 允许通过解析状态字典而不是从磁盘加载在 vLLM 中加载 LoRA - 这可以使您的 GRPO 训练运行快 1.5 倍。一个活跃的研究领域是如何直接编辑 vLLM 中的 LoRA 适配器(Unsloth 还不知道如何)。这可以大大提高速度,因为 Unsloth 现在正在进行不必要的 GPU 数据移动。
- vLLM 会奇怪地出现随机 VRAM 峰值,尤其是在批量生成期间。Unsloth 添加了一个批量生成函数来减少内存峰值。