Unsloth:在一张大显卡上微调 LLM public
Unsloth 是一个开源 Python 库(核心采用 Apache 2.0 许可证,GitHub 星标超过 76,000),重写了 LoRA 和 QLoRA 微调中计算开销较大的步骤:据开发方称,速度最高可达原来的两倍,显存用量减少 70%。其文档列出的最低要求是:对一个 80 亿参数模型进行 4 位 QLoRA 微调需要 6 GB 显存,因此一张 12 GB 显存的显卡就足够;随后可将模型导出为 GGUF,在 Ollama 中运行。
Unsloth 让在消费级显卡上微调开放模型成为可能:采用的方法与其他工具相同,但重写的计算内核减少了所需的时间和内存。因此,拥有 70 亿或 80 亿参数的模型可以在配备 12 GB 显存的显卡上进行微调,微调结果可导出为 GGUF 格式,以便在 Ollama 中运行。不过,在考虑其他问题之前,仍有一个问题需要先回答:您真的需要微调吗?
#安装任何组件前需明确的关键问题
是的,消费级显卡也能微调 70 亿或 80 亿参数的模型:Unsloth 文档给出的 4 位 QLoRA 最低显存需求为 5–6 GB,因此 12 GB 显卡足够,并且还能为上下文和批次留出余量。Unsloth 重写了 LoRA 和 QLoRA 微调中计算负担较重的步骤;据开发方称,速度最高可达到原来的两倍,同时显存用量减少 70%,但这些数字仅适用于部分 notebook 示例。微调结果可以导出为 GGUF,在 Ollama 中运行。不过,安装之前就应该先考虑真正的问题:微调改变的是模型的行为(语气、格式、语域),并不会更新它的知识。如果您希望模型了解您的文档,请先构建文档检索功能。还要把数据集准备所需的时间算进去:它比训练本身更耗时。
微调改变的是模型的行为方式。文档检索改变的是模型在回答时掌握的信息。混淆两者会白白浪费数周时间。
| 您的需求 | 正确答案 |
|---|---|
| 基于您文档的回复 | 一条RAG链:文档每天可能发生变化 |
| 稳定的输出格式 | 微调,或受约束生成 |
| 符合自身风格的语气、符合行业习惯的表达 | Fine-tuning |
| 某个专业领域的词汇 | 微调,使用足够多的示例 |
| 频繁变化的信息 | 始终选择 RAG:为一个价格重新训练模型毫无意义 |
| 更短或更长的回复 | 系统提示词优先;绝不可为此进行训练 |
#Unsloth 实际带来了哪些改变
只需 1 小时,即可在您的电脑上拥有专属的免费 ChatGPT — LM Studio、Ollama、Open WebUI、您的文档,无需云端。
- 在线空间,终身可用
- PDF + 文件
- 终身更新
这种方法并不新:冻结模型权重,只训练添加到每个权重上的小型矩阵;根据 Unsloth 指南,这些矩阵约占参数总数的 1%。LoRA 将原始模型保留为 16 位,QLoRA 则将其量化为 4 位,从而节省 75% 的内存。这是标准方法,并非 Unsloth 的专有技术。
该库提供的是具体实现,其中针对计算负担较重的步骤重写了计算内核。该项目有三种形式:原生应用 Unsloth Desktop、网页界面 Unsloth Studio,以及本文介绍的代码驱动版本 Unsloth Core。项目采用双许可证:核心部分采用 Apache 2.0,部分可选组件(如 Studio 界面)采用 AGPL-3.0。项目宣称,语言模型、扩散模型、语音合成模型和嵌入模型的训练速度可达到原来的两倍,同时减少 70% 的显存用量,且不损失精度。在混合专家(MoE)架构上,公布的提升幅度更大:某些较新的模型最高可达到原来的 12 倍速度,并节省超过 35% 的显存。与所有厂商公布的数字一样,这些数字描述的是最佳情况:README 本身就表明,“两倍速度、减少 70% 显存”只适用于部分 notebook。
| Notebook | 宣称的速度 | 官方宣称的显存用量 |
|---|---|---|
| Llama 3.1 (8B) Alpaca | 速度为原来的 2 倍 | 减少70% |
| gpt-oss (20B) | 速度为原来的 2 倍 | 减少70% |
| Qwen3.5 (4B),支持视觉 | 速度为原来的 1.5 倍 | 减少 60% |
| Gemma 4 (E2B),视觉 | 速度为原来的 1.5 倍 | 减少50% |
| Orpheus-TTS (3B) | 速度为原来的 1.5 倍 | 减少50% |
| embeddinggemma (300M) | 速度为原来的 2 倍 | 减少 20% |
#哪种显卡适合哪种模型
| 模型大小 | QLoRA (4 位) | LoRA(16位) | 对消费级显卡的实际意义 |
|---|---|---|---|
| 30亿 | 3,5 | 8 | 使用 QLoRA 时,任何较新的显卡都能轻松完成微调 |
| 70亿 | 5 | 19 | QLoRA 可在 8 GB 显存的显卡上运行;16 位 LoRA 需要 24 GB 显存的显卡 |
| 80亿 | 6 | 22 | 8 GB 或以上支持 QLoRA;12 GB 可留有余量 |
| 140亿 | 8,5 | 33 | QLoRA 可在 12 GB 显存上运行;16 位 LoRA 超出了 24 GB 显存显卡的容量 |
| 270亿 | 22 | 64 | QLoRA 需要 24 GB 显存,没有余量;单张显卡无法进行 16 位 LoRA 微调 |
| 320亿 | 26 | 76 | 超过 24 GB,即使使用 QLoRA |
| 700亿 | 41 | 164 | 单张消费级显卡无法满足要求 |
文档明确指出这些数值为绝对最低值:具体取决于模型,可能需要更多资源。文档将批次大小过大列为内存饱和的常见原因,建议将其调整为 1、2 或 3,并推荐首次测试时使用 2048 的上下文长度。
| 平台 | 文档中所述内容 |
|---|---|
| NVIDIA, 配合 Unsloth Core | Linux 和 Windows;计算能力至少为 7.0(V100、T4、RTX 20 系列及后续型号、A100、H100),也包括 Blackwell 和 DGX Spark。GTX 1070 和 GTX 1080 也能运行,但速度较慢。 |
| AMD 与 Intel | 专用指南;训练可在这些GPU上进行,无论是使用Core还是Studio。 |
| Mac | Unsloth Studio 支持训练、MLX 及 GGUF 推理(需 macOS 12 或更高版本)。对于 Core,对 Apple Silicon(MLX)的支持目前标注为「正在准备中」。 |
| 无 GPU | Studio 可使用 GGUF 模型进行聊天,也可用于数据准备,但不能用于训练。 |
| 多个GPU | 由 Accelerate 和 DeepSpeed(FSDP、DDP)提供支持,需要手动配置;device_map="balanced" 选项可将过大的模型分配到多张显卡上。 |
#真正的工作在于数据集
微调失败从来不是库的问题,而是数据的问题。
- 格式
- 数据集通常包含两列,分别为问题和回答,并采用模型所要求的对话结构。本指南建议从 Instruct 模型入手:它可直接接受对话模板(ChatML、ShareGPT),所需数据也比基础模型少。数据的一致性比数量更重要。
- 数量
- Unsloth 指南建议最少使用 100 行数据,若想取得更好的效果,则应超过 1,000 行。少量示例就能调整语气和格式;要真正形成符合业务需求的行为,则需要更多彼此一致的示例。
- 质量
- 模型会模仿它所看到的内容,包括错误。数据中的系统性缺陷会转化为模型中的系统性缺陷。
- 检验数据集
- 模型在训练过程中从未见过的示例。没有这些示例,就无法区分学习与死记硬背。
- 无需代码
- Unsloth Studio 提供 Data Recipes,可通过可视化流程将 PDF、CSV 或 DOCX 文件转换为数据集,并在启动完整构建之前提供预览。
#从适配器到可用模型
流程分为三个阶段:以4位精度加载模型,使用官方笔记本进行训练,然后导出模型。第一段代码负责加载模型并添加LoRA适配器;实际训练则通过Unsloth提供的笔记本完成,指南建议将该笔记本复制到本地环境中。
名称的后缀很重要。根据指南,以 unsloth-bnb-4bit 结尾的模型采用 Unsloth 的动态 4 位量化:它比标准 BitsAndBytes 量化略多占用一些 VRAM,但精度明显更高。仅以 bnb-4bit 结尾的名称表示标准版本。指南还指出,训练和部署服务使用相同的精度更有利:如果以 4 位精度提供服务,就以 4 位精度训练。
| 参数 | 指南中的设定值 | 须知 |
|---|---|---|
| per_device_train_batch_size | 2 | 模型更大:GPU 利用率更高,但因填充问题导致训练速度变慢;建议使用梯度累积步数(gradient_accumulation_steps) |
| gradient_accumulation_steps | 4 | 无需额外内存即可模拟更大批次 |
| max_steps | 60 | 用于快速试跑的值;正式训练时,改用 num_train_epochs,并将其设为 1 至 3 之间的值 |
| learning_rate | 2e-4 | 调低数值可使微调更慢、更精细:尝试 1e-4、5e-5 或 2e-5 |
| max_seq_length | 2048 | 测试时推荐的长度。为了“留足余量”而设得更高,会为数据中并不存在的长序列预留内存:请先测量实际样本的长度 |
- 01训练最终结果是一个 LoRA 适配器,在 Unsloth 的示例中约为 100 MB,而非完整模型。
- 02评估使用对照数据集进行评估,并与原始模型比较。“更好”需要证明,不能想当然。指南指出,自动评估工具可能无法准确反映您的评判标准。
- 03合并或单独保留适配器可以独立保存并按需替换,也可以合并到模型权重中:使用 model.save_pretrained_merged,并设置 save_method="merged_16bit"。
- 04导出为GGUF并进行量化model.save_pretrained_gguf 会生成文件,可选择 q4_k_m、q8_0 或 f16。这使导出的模型能够通过 Ollama 或 llama.cpp 在普通硬件上运行。
#常见陷阱
- 在不知情的情况下从基础模型开始
- 指南建议使用指令模型:它们支持对话模板,且所需数据较少。基础模型则需要不同的格式(如Alpaca、Vicuna),并需要更多示例。
- 忘记使用对话模板
- 格式与模型预期不符的示例会导致技术上成功的训练,但实际应用中毫无价值。
- 在训练样本上进行评估
- 正是这种错误,让人宣称取得了惊人的成果,最终交付的模型却令人失望。
- 认为它会取代文档检索
- 模型所学的知识会随着您信息的更新而过时,且模型不会引用其信息来源。对于不断变化的事实,文档检索仍更为可靠。
- 低估示例数据清洗的重要性
- 数据集中几乎完全相同的重复样本会使训练偏向这些特定案例,而所跟踪的指标却不会反映这一点。
- 同时更改多个设置
- 在同一实验中修改学习率、适配器秩和序列长度,将无法判断哪个参数导致了观察到的变化。
#具体用例
- 保持一致的客户支持语气
- 基于真实对话进行微调的模型会以符合品牌风格的语气回答,无需在每次提示中重复风格要求。
- 严格格式提取
- 使用输入—输出示例进行微调,比仅靠提示词更能可靠地固定输出格式;在将结果发送至下游系统之前,这很有用。
这些情况有一个共同点:每一种都可以衡量。在开始训练前,请用一句可验证的话定义成功标准,例如“测试集至少 95% 的输出符合 JSON 格式”,而不是笼统地感觉有所改善。判断结果是否值得投入这些时间的,应是这个标准,而不是直觉。
#实际成本:不只是显卡价格
显卡只是其中一项投入。收集并清洗一致的示例数据,编写模型永远不会接触到的评估集,再将每个版本与原始模型进行比较,这些工作往往比训练本身更繁重;Unsloth 指南用一次 60 步的试验演示了训练过程。
因此,无论 Unsloth 的训练速度有多快,它都无法像人们期望的那样大幅缩短项目周期:它消除的是技术瓶颈,而不是数据方面的工作。
#FAQ
Unsloth 是免费的吗?+
微调一个 70 亿参数的模型,应选择哪张显卡?+
需要多少示例?+
得到的模型能在 Ollama 中运行吗?+
是否支持 AMD、Mac 或无 GPU 环境?+
微调能让模型精通我的数据吗?+
推荐硬件: GMKtec EVO-X2 64GB / 1TB (Ryzen AI Max+ 395) — 16 GB 显存的 NVIDIA 显卡,足以使用 QLoRA 微调 7–8B 模型。 所有 AI 硬件 →
有反馈、发现了错误,或想补充说明?请告诉我们,让这份指南对每个人都更有帮助。