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 训练一个模型,旨在使其自主开发自我验证和搜索能力——创造一个迷你“灵光一现”时刻。

工作原理:

  1. 模型生成一组响应。

  2. 每个响应根据正确性或由某个奖励函数创建的其他度量标准进行评分,而不是使用 LLM 奖励模型。

  3. 计算该组的平均得分。

  4. 将每个响应的得分与该组平均得分进行比较。

  5. 强化模型,使其倾向于选择得分更高的响应。

例如,假设我们希望模型解决以下问题:

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 算法的主要特点如下:

  1. 无值函数:与依赖值函数的强化学习算法(如 PPO)不同,GRPO 不使用值函数来评估状态或行为的质量,而是通过对模型输出的响应进行评分,并基于这些评分来优化模型。

  2. 响应评分与群体平均:在 GRPO 中,模型生成一组可能的响应,每个响应都会根据正确性或其他预定义的奖励函数进行评分。然后,计算这些响应的平均得分,并将每个响应的得分与群体平均得分进行比较。模型会得到强化,倾向于生成得分较高的响应。

  3. 自我优化:GRPO 能够帮助模型自主地进行推理和自我验证。例如,模型可以在没有人工干预的情况下,通过不断调整思维过程来提高推理结果的准确性。

  4. 适用于多种任务:GRPO 不仅可以用于常见的分类任务,也可以应用于更复杂的任务,如生成具有自我验证和推理能力的模型(例如,解答问题时展示推理过程)。

总的来说,GRPO通过强化学习的方式,不仅优化模型的回答,还能改善其推理过程,使模型在没有人工反馈的情况下,能够不断自我改进,从而在处理复杂任务时展现出更强的推理能力。

如何学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

在这里插入图片描述

第一阶段(10天):初阶应用

该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。

  • 大模型 AI 能干什么?
  • 大模型是怎样获得「智能」的?
  • 用好 AI 的核心心法
  • 大模型应用业务架构
  • 大模型应用技术架构
  • 代码示例:向 GPT-3.5 灌入新知识
  • 提示工程的意义和核心思想
  • Prompt 典型构成
  • 指令调优方法论
  • 思维链和思维树
  • Prompt 攻击和防范

第二阶段(30天):高阶应用

该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。

  • 为什么要做 RAG
  • 搭建一个简单的 ChatPDF
  • 检索的基础概念
  • 什么是向量表示(Embeddings)
  • 向量数据库与向量检索
  • 基于向量检索的 RAG
  • 搭建 RAG 系统的扩展知识
  • 混合检索与 RAG-Fusion 简介
  • 向量模型本地部署

第三阶段(30天):模型训练

恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。

到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?

  • 为什么要做 RAG
  • 什么是模型
  • 什么是模型训练
  • 求解器 & 损失函数简介
  • 小实验2:手写一个简单的神经网络并训练它
  • 什么是训练/预训练/微调/轻量化微调
  • Transformer结构简介
  • 轻量化微调
  • 实验数据集的构建

第四阶段(20天):商业闭环

对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。

  • 硬件选型
  • 带你了解全球大模型
  • 使用国产大模型服务
  • 搭建 OpenAI 代理
  • 热身:基于阿里云 PAI 部署 Stable Diffusion
  • 在本地计算机运行大模型
  • 大模型的私有化部署
  • 基于 vLLM 部署大模型
  • 案例:如何优雅地在阿里云私有部署开源大模型
  • 部署一套开源 LLM 项目
  • 内容安全
  • 互联网信息服务算法备案

学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。

如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

在这里插入图片描述

<think>好的,用户想要使用unsloth来微调deepseek-r1-8B模型,并希望得到完整的代码。首先,我要确认unsloth是否支持这个模型。unsloth主要用于优化微调过程,比如减少内存占用和加快训练速度,通常与Hugging Face的transformers库结合使用。deepseek-r1-8B可能是一个基于类似LLaMA架构的模型,所以可能要检查是否支持。 接下来,用户可能要代码示例,包括数据准备、模型加载、训练配置、训练过程和保存模型。要确保步骤完整,例如安装必要的库,加载数据集,使用正确的模型名称,设置训练参数如batch size、learning rate等,以及处理可能的内存问题,比如使用4位量化。 另外,用户可能对数据格式有疑问,所以要提供一个示例数据集的结构,比如alpaca格式。还要注意可能出现的错误,比如OOM(内存不足),这时候可能要调整batch size或者使用梯度累积。 要提醒用户替换数据集路径,并根据硬件调整参数,比如device_map和dtype设置。最后,保存模型并演示如何加载使用,确保代码的可运行性。 可能还要验证代码的准确性,比如检查unsloth的最新文档,确认支持的模型类型,以及是否有额外的参数要注意。同时,确保训练器的设置正确,比如使用Seq2SeqTrainer,因为可能是生成任务。 总结:步骤包括安装库、准备数据、加载模型和分词器、配置训练参数、训练、保存模型。要注意模型兼容性、硬件限制和参数调整,确保用户能顺利运行代码。</think>以下是一个使用Unsloth微调DeepSeek-R1-8B模型的完整代码示例。请注意根据您的硬件调整参数(如batch_size、gradient_accumulation_steps等): ```python # 首先安装必要库(建议使用Python 3.10+) # pip install "unsloth[colab] @ git+https://github.com/unslothai/unsloth.git" # pip install --no-deps "xformers<0.26.0" trl peft accelerate datasets bitsandbytes import torch from unsloth import FastLanguageModel from datasets import load_dataset from trl import SFTTrainer from transformers import TrainingArguments # 参数配置 max_seq_length = 2048 # 根据GPU内存调整 dtype = None # None自动检测,或指定为torch.float16/torch.bfloat16 load_in_4bit = True # 使用4位量化节省内存 # 加载DeepSeek-R1-8B模型 model, tokenizer = FastLanguageModel.from_pretrained( model_name = "deepseek-ai/deepseek-llm-7b-r1", # 确认HuggingFace模型名称 max_seq_length = max_seq_length, dtype = dtype, load_in_4bit = load_in_4bit, ) # 添加LoRA适配器(可选) model = FastLanguageModel.get_peft_model( model, r=16, # LoRA秩 target_modules=["q_proj", "k_proj", "v_proj", "o_proj", "gate_proj"], # 常见目标模块 lora_alpha=16, lora_dropout=0, bias="none", use_gradient_checkpointing=True, ) # 准备数据集(示例使用Alpaca格式) dataset = load_dataset("yahma/alpaca-cleaned", split="train") dataset = dataset.map(lambda sample: { "text": f"""Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: {sample['instruction']} ### Input: {sample['input']} ### Response: {sample['output']}""" }) # 训练参数配置 trainer = SFTTrainer( model = model, tokenizer = tokenizer, train_dataset = dataset, dataset_text_field = "text", max_seq_length = max_seq_length, dataset_num_proc = 2, packing = True, # 序列打包提高效率 args = TrainingArguments( per_device_train_batch_size = 2, gradient_accumulation_steps = 4, warmup_steps = 5, num_train_epochs = 3, learning_rate = 2e-5, fp16 = not torch.cuda.is_bf16_supported(), bf16 = torch.cuda.is_bf16_supported(), logging_steps = 1, optim = "adamw_8bit", weight_decay = 0.01, lr_scheduler_type = "linear", seed = 3407, output_dir = "outputs", save_strategy="steps", save_steps=500, ), ) # 执行训练 trainer.train() # 保存微调后的模型 model.save_pretrained("lora_adapter") # 保存LoRA适配器 # model.push_to_hub("your_username/model_name") # 可选:上传到HuggingFace Hub # 使用微调后的模型生成文本 inputs = tokenizer( ["### Instruction:\nExplain deep learning in 3 sentences\n\n### Response:"], return_tensors="pt" ).to("cuda") outputs = model.generate(**inputs, max_new_tokens=128) print(tokenizer.decode(outputs[0], skip_special_tokens=True)) ``` 注意事项: 1. 硬件要求:至少要24GB显存(建议A100/A6000等) 2. 数据集:示例使用Alpaca格式,请替换为您的实际数据集 3. 模型名称:请确认HuggingFace上的准确模型名称 4. 内存优化:如遇OOM错误,可以尝试: - 降低`per_device_train_batch_size` - 增加`gradient_accumulation_steps` - 使用`load_in_4bit=True` - 减小`max_seq_length` 建议在微调前: 1. 检查CUDA可用性:`print(torch.cuda.is_available())` 2. 验证模型加载:`print(model)` 3. 测试基本推理:先运行生成代码确保基础模型正常工作 如完整生产级实现,建议参考: - Unsloth官方文档:https://github.com/unslothai/unsloth - DeepSeek官方微调指南:https://huggingface.co/deepseek-ai
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值