![](https://s5-media.51cto.com/aigc/pc/static/noavatar.gif)
Unsloth:仅需7GB显存就能训练自己的DeepSeek-R1!
随着 LLM 应用的广泛普及,如何提高模型的推理效率并降低资源消耗成为了技术发展中的一大挑战。Unsloth 通过引入多个强化学习(RL)算法和最新的量化技术,显著提高了 LLM 在推理和微调过程中的性能,并大幅降低了显存消耗。
DeepSeek 的研究人员在用纯强化学习(RL)训练 R1-Zero 时观察到了一个“灵光一现”的时刻。模型学会了通过重新评估最初的思路来延长思考时间,而无需任何人工指导或预定义指令。
Unsloth 对整个 GRPO 过程进行了增强,使其比 Hugging Face + FA2 减少了 80% 的显存使用。这意味着我们可以使用 7GB 显存,通过Qwen2.5(1.5B)复现了 R1-Zero “灵光一现”的时刻。
主要细节
使用15GB显存,Unsloth 允许我们将任何最多 15B 参数的模型(如Llama 3.1(8B)、Phi-4(14B)、Mistral(7B)或 Qwen2.5(7B))转变为推理模型。
最低要求:仅需 7GB 显存即可在本地训练自己的推理模型。
Tiny-Zero 的团队展示了如何用 Qwen2.5(1.5B)复现 R1-Zero “灵光一现”的时刻——但之前需要2个A100 GPU(160GB显存)。而现在,通过 Unsloth,我们只需一个 7GB 显存的 GPU 即可实现同样的效果。
请注意,这不是对 DeepSeek 的 R1 精炼模型进行微调,也不是使用 R1 的精炼数据进行微调,而是通过 GRPO 将标准模型转换为一个完整的推理模型。
这种魔法可以通过 GRPO 重新创建,GRPO 是一种强化学习(RL)算法,能够高效优化响应,而不需要值函数,这与依赖值函数的近端策略优化(PPO)不同。在我们的笔记本中,我们使用 GRPO 训练一个模型,旨在使其自主开发自我验证和搜索能力——创造一个迷你“灵光一现”时刻。
工作原理:
- 模型生成一组响应。
- 每个响应根据正确性或由某个奖励函数创建的其他度量标准进行评分,而不是使用 LLM 奖励模型。
- 计算该组的平均得分。
- 将每个响应的得分与该组平均得分进行比较。
- 强化模型,使其倾向于选择得分更高的响应。
例如,假设我们希望模型解决以下问题:
1+1 等于多少? >> 思考链/推理过程 >> 答案是2。
2+2 等于多少?>> 思考链/推理过程 >> 答案是4。
最初,必须收集大量数据来填充推理过程。但 GRPO(DeepSeek 使用的算法)或其他 RL 算法可以引导模型自动展示推理能力并生成推理痕迹。相反,我们需要创建良好的奖励函数或验证器。例如,如果答案正确,就给它打 1 分;如果有拼写错误,扣 0.1 分,依此类推!我们可以提供许多奖励过程的函数。
GRPO 在 Unsloth 中的应用
如果你在本地使用 GRPO 与 Unsloth,请确保“pip install diffusers”,因为它是一个依赖项。
等待至少 300 步才能看到奖励的实际增长,请使用最新版本的 vLLM。为了获得良好的结果,你需要训练至少 12 小时(这就是 GRPO 的工作方式),但请记住,这不是强制性的,你可以随时停止。
建议将 GRPO 应用于至少 1.5B 参数的模型,以便正确生成思考 token,因为较小的模型可能无法做到。如果你使用的是基础模型,请确保拥有聊天模板。GRPO 的训练损失追踪功能现在已直接内置于 Unsloth 中,无需像 wandb 等外部工具。
除了增加 GRPO 支持外,Unsloth 随后还支持了在线 DPO、PPO 和 RLOO!请查看下图,比较 Unsloth 的在线 DPO 显存消耗与标准 Hugging Face + FA2 的差异。
Unsloth x vLLM
20 倍吞吐量,节省 50% 显存。
现在,你可以直接在微调堆栈中使用 vLLM,这大大提高了吞吐量,并且允许你在同一时间进行微调和推理!在 1x A100 40GB 显卡上,使用 Unsloth 的动态 4bit 量化的 Llama 3.2 3B Instruct,预期吞吐量约为 4000 tokens/s。在 16GB 的Tesla T4(免费 Colab GPU)上,你可以获得约 300 tokens/s 的吞吐量。
Unsloth 去除了加载 vLLM 和 Unsloth 时的双倍内存使用,从而节省了约 5GB 的显存(对于 Llama 3.1 8B)和 3GB 的显存(对于 Llama 3.2 3B)。原本,Unsloth 可以在 1x 48GB GPU 上微调 Llama 3.3 70B Instruct,其中 Llama 3.3 70B 的权重占用了 40GB 的显存。如果不去除双倍内存使用,当加载 Unsloth 和 vLLM 一起使用时,我们将需要至少 80GB 的显存。
但是使用 Unsloth,我们仍然可以在不到 48GB 显存的情况下,同时享受微调和快速推理的好处!要使用快速推理,首先安装 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!"])
什么是 GRPO?
GRPO(Group Relative Policy Optimization,群体相对策略优化)是一种强化学习(RL)算法,旨在优化模型的响应质量,而不依赖传统的值函数。这种算法通过一种群体相对优化方法,对模型的每个生成的响应进行评分,并根据这些评分来引导模型的学习过程。
具体来说,GRPO 算法的主要特点如下:
- 无值函数:与依赖值函数的强化学习算法(如PPO)不同,GRPO 不使用值函数来评估状态或行为的质量,而是通过对模型输出的响应进行评分,并基于这些评分来优化模型。
- 响应评分与群体平均:在 GRPO 中,模型生成一组可能的响应,每个响应都会根据正确性或其他预定义的奖励函数进行评分。然后,计算这些响应的平均得分,并将每个响应的得分与群体平均得分进行比较。模型会得到强化,倾向于生成得分较高的响应。
- 自我优化:GRPO 能够帮助模型自主地进行推理和自我验证。例如,模型可以在没有人工干预的情况下,通过不断调整思维过程来提高推理结果的准确性。
- 适用于多种任务:GRPO 不仅可以用于常见的分类任务,也可以应用于更复杂的任务,如生成具有自我验证和推理能力的模型(例如,解答问题时展示推理过程)。
总的来说,GRPO通过强化学习的方式,不仅优化模型的回答,还能改善其推理过程,使模型在没有人工反馈的情况下,能够不断自我改进,从而在处理复杂任务时展现出更强的推理能力。
本文转载自 PyTorch研习社,作者: 南七无名式
![](https://s5-media.51cto.com/aigc/pc/static/noavatar.gif)