🧬LLM 微调指南
学习微调的所有基础知识和最佳实践。适合初学者。
1. 什么是微调?
微调 / 训练 / 后训练模型可以定制其行为、增强并注入知识,以及针对特定领域和任务优化性能。例如:
OpenAI 的 GPT-5 被后训练以改进遵循指令和有帮助的对话行为。
标准的后训练方法称为监督微调(SFT)。其他方法包括偏好优化(DPO、ORPO)、蒸馏和 强化学习(RL) (GRPO、GSPO),在这些方法中,“智能体”通过与环境交互并接收 反馈 以 奖励 或 或.
惩罚 Unsloth借助 笔记本,你可以在 Colab、Kaggle 或本地仅用 3GB 显存免费进行微调或 RL。通过在数据集上微调预训练模型,你可以:
更新并学习新知识:注入并学习新的领域专有信息。
定制行为:调整模型的语气、个性或响应风格。
针对任务优化:提高特定用例的准确性和相关性。
微调或 RL 的示例用例:
使大型语言模型能够预测某个标题会对公司产生正面还是负面影响。
可以使用历史客户交互来提供更准确和定制的回复。
在法律文本上微调大型语言模型,用于合同分析、判例研究和合规性检查。
你可以把微调后的模型视为为特定任务设计的专用智能体,能够更有效、更高效地完成这些任务。 微调可以复制所有 RAG 的能力,但反之不然。

关于微调的误解:
你可能听说微调不能让模型学习新知识或 RAG 比微调更好。那是 ' 和 '错误的。你可以用微调和强化学习训练一个专门的编程模型,而 RAG 无法改变模型的权重,只能在推理时扩充模型看到的内容。更多常见问题和误解请阅读 这里:
🤔常见问题 + 微调适合我吗?介绍 Unsloth Studio: 我们新的开源 Web 界面用于训练和运行模型。这意味着你现在可以无代码地微调模型,并拥有可观测性和自动数据集创建功能。

2. 选择合适的模型和方法
如果你是初学者,最好从像 Llama 3.1 (8B) 这样的较小指令模型开始并从那里进行实验。你还需要在普通微调、RL、QLoRA 或 LoRA 训练之间做出决定:
强化学习(RL) 当你需要模型在特定行为(例如调用工具)上表现出色时使用,这种方法使用环境和奖励函数而不是标注数据。我们有多个 笔记本示例,但对于大多数用例,标准的 SFT 已经足够。
LoRA 是一种参数高效的训练方法,通常保持基础模型的权重冻结,仅训练一小部分添加的低秩适配器权重(以 16 位精度)。
QLoRA 将 LoRA 与 4 位精度相结合,以在极少资源下处理非常大的模型。
Unsloth 还支持全量微调(FFT)和预训练,这些通常需要显著更多资源,但通常无需进行 FFT。如果操作得当,LoRA 可以匹配 FFT 的效果。
研究表明, 以相同精度进行训练和推理 有助于保持准确性。这意味着如果你想以 4 位进行部署,就应以 4 位进行训练,反之亦然。
我们建议从 QLoRA 开始,因为它是最易接近且有效的训练方法之一。我们的 动态 4 位 量化方法使得 QLoRA 相比 LoRA 的准确性损失在很大程度上被恢复。

你可以通过在 Hugging Face 上匹配模型名称来更改模型名称,例如: 'unsloth/llama-3.1-8b-unsloth-bnb-4bit'.
我们建议从 指令模型开始,因为它们允许使用对话聊天模板(ChatML、ShareGPT 等)直接微调,并且相比 基础模型 (如使用 Alpaca、Vicuna 等)需要更少的数据。关于 指令模型与基础模型之间的差异,更多信息请见此处.
以
unsloth-bnb-4bit结尾的模型名称 表示它们是 Unsloth 动态 4 位量化模型。这些模型比标准 BitsAndBytes 4 位模型消耗略多的显存,但提供显著更高的准确性。
如果模型名称仅以bnb-4bit结尾,且没有 “unsloth”,则指的是标准的 BitsAndBytes 4 位量化。 没有后缀的 模型 处于其原始的16 位或 8 位格式
。虽然它们是官方模型创建者的原始模型,但我们有时会包含重要修复——例如聊天模板或分词器修复。因此,建议在可用时使用我们的版本。
还有其他设置你可以切换:max_seq_length = 2048– 控制上下文长度。虽然 Llama-3 支持 8192,但我们建议测试时使用 2048。Unsloth 支持 4 倍更长的上下文微调。dtype = None– 默认为 None;对于较新的 GPU,请使用或torch.float16或torch.bfloat16load_in_4bit = True– 启用 4 位量化,微调时将内存使用降低 4 倍。禁用它将启用 16 位 LoRA 微调。你也可以启用 16 位 LoRA,设置load_in_16bit = True
要启用全量微调(FFT),设置full_finetuning = True。对于 8 位微调,设置.load_in_8bit = True 注意:
一次只能将一种训练方法设置为True
。
一个常见错误是直接跳到全量微调(FFT),这非常耗算力。先用 LoRA 或 QLoRA 测试,如果在那里行不通,那么使用 FFT 几乎肯定也行不通。如果 LoRA 失败,也不要认为 FFT 会神奇地修复问题。 你也可以进行, 文本转语音(TTS), 视觉, 推理(GRPO) RL (GRPO、DPO)、继续预训练
、文本补全和其他训练方法,均可使用 Unsloth。
❓What Model Should I Use?阅读我们关于选择模型的指南:
🚀Complete LLM Directory关于单个模型的教程:
3. 你的数据集
对于大型语言模型,数据集是可以用于训练模型的数据集合。为了用于训练,文本数据需要是可以被分词器处理的格式。
你通常需要创建一个包含两列的问题和答案数据集。数据的质量和数量在很大程度上决定微调的最终效果,因此务必把这部分做好。 你可以 合成生成数据
并使用 ChatGPT 或本地大型模型将数据结构化(为问答对)。 你也可以使用我们新的合成数据集笔记本,它会自动解析文档(PDF、视频等),生成问答对并使用像 Llama 3.2 这样的本地模型自动清理数据。
在此处访问该笔记本。
微调可以从现有的文档库中学习并持续扩展其知识库,但单纯堆砌数据效果不会那么好。为了获得最佳结果,请策划一个结构良好的数据集,理想状况下为问答对。这有助于增强学习、理解和响应的准确性。
但情况并非总是如此,例如,如果你正在为代码微调大型语言模型,直接堆放所有代码数据实际上也可能显著提升模型性能,即使没有结构化格式。因此这真的取决于你的用例。
📈数据集指南阅读更多关于创建数据集的内容: 在我们大多数笔记本示例中,我们使用 Alpaca 数据集
,但像视觉类的其他笔记本将使用不同的数据集,答案输出可能也需要包含图像。
4. 理解训练超参数 了解如何使用研究和实际实验中的最佳实践来选择正确的 超参数
——并理解每个参数如何影响模型性能。
🧠Hyperparameters Guide有关超参数如何影响训练的完整指南,请参见:
5. 安装与需求
你可以通过两种主要方式使用 Unsloth:我们的免费笔记本或本地运行。
Unsloth 笔记本 笔记本 我们建议初学者优先使用我们预先制作的
,因为它是开始的最简便方式,带有引导步骤。你以后可以将笔记本导出并在本地使用。 文本转语音, 嵌入、GRPO、RL、 视觉Unsloth 提供逐步的笔记本,适用于
、多模态、不同用例等。
本地安装 Docker 或 pip install unsloth 你也可以通过 Windows在本地安装 Unsloth(在 Linux、WSL 或
上)。此外,根据你使用的模型,你需要足够的显存和资源。
安装 Unsloth 需要 Windows 或 Linux 设备。安装后,你可以复制并粘贴我们的笔记本并在自己的本地环境中使用。参见:
6. 训练与评估
一旦一切准备就绪,就开始训练吧!如果有问题,记住你可以随时更改超参数、数据集等。

训练损失将以数字形式显示
我们通常建议保持默认设置,除非你需要更长的训练或更大的批量大小。per_device_train_batch_size = 2– 增大以更好地利用 GPU,但要注意由于填充导致训练变慢。相反,可增加gradient_accumulation_steps以获得更平滑的训练。gradient_accumulation_steps = 4– 在不增加内存使用的情况下模拟更大的批量大小。max_steps = 60– 加速训练。对于完整训练,请替换为num_train_epochs = 1(建议 1–3 个 epoch 以避免过拟合)。learning_rate = 2e-4– 值较低则微调更慢但更精确。可尝试如下值:,1e-45e-5,或.
2e-5
评估 为了评估,你可以通过与模型对话手动评估,看看是否符合你的期望。你也可以为 Unsloth 启用评估,但请注意,这可能会根据数据集大小耗时。为加速评估你可以:减少评估数据集大小或设置.
evaluation_steps = 100
对于测试,你也可以拿出 20% 的训练数据用作测试。如果你已经使用了所有训练数据,那么你必须手动评估。你也可以使用自动评估工具,但请记住自动化工具可能无法完全符合你的评估标准。
7. 运行与部署模型


现在在完成训练过程后让我们运行模型吧!你可以编辑黄色下划线部分!事实上,因为我们创建了一个多轮聊天机器人,我们现在也可以像模型以前见过某些对话那样调用模型,如下所示: 提示:Unsloth 本身也原生提供 2 倍更快的推理 ,所以别忘了调用FastLanguageModel.for_inference(model) 。如果你希望模型输出更长的回复,将 max_new_tokens = 128
设置为更大的数值,如 256 或 1024。注意你也需要为更长的结果等待更久!
保存与部署
🖥️推理与部署要在你希望的推理引擎(如 Ollama、vLLM、Open WebUI)中保存和部署模型,你需要在基础模型之上使用 LoRA 适配器。我们为每个框架提供了专门的指南:
GGUF & llama.cpp如果你在单设备(如笔记本或 Mac)上运行推理,使用 llama.cpp 将模型转换为 GGUF 格式以在 Ollama、llama.cpp、LM Studio 等中使用:
vLLM如果你要为企业或多用户推理部署 LLM,使用 FP8、AWQ,请使用 vLLM: 我们现在可以将微调后的模型保存为一个大约 100MB 的小文件,称为 LoRA 适配器,如下所示。你也可以将模型推送到 Hugging Face hub,如果你想上传模型的话!记得获取一个 Hugging Face 令牌


并添加你的令牌! 保存模型后,我们可以再次使用 Unsloth 来运行模型本身!再次使用 FastLanguageModel
来调用它进行推理!
8. 我们完成了!
你已成功微调了一个语言模型,并使用 Unsloth 将其导出到你想要的推理引擎! 要了解更多微调技巧和窍门,请前往我们的博客,那里提供大量有价值且教育性的内容:
https://unsloth.ai/blog/ 这里 或 如果你在微调方面需要任何帮助,也可以加入我们的 Discord 服务器Reddit r/unsloth

最后更新于
这有帮助吗?

