Chapter 01

项目背景与定位

📌 本章基于 unslothai/unsloth · commit 1cf145c070ea (2026-05-26)。

1.1 一句话定位

Unsloth 是兄弟二人组 Daniel & Michael Han 在 2023 年底创立的、靠手写 Triton kernel 把 LoRA / QLoRA 微调做到"单卡 2-5× 加速 + 30%-70% 显存下降"的微调加速库。它不像 LLaMA-Factory 那样追求"功能全",而是死磕一件事:让一张 4090 / 3090 / Colab T4 上的 LoRA 训练快到不像话

如果你在 Reddit 的 r/LocalLLaMA 或 HuggingFace 论坛上看过"如何在 24 GB 显存上训 Llama-3 70B LoRA"的教程,那十有八九用到了 Unsloth。

1.2 为什么会有 Unsloth

LoRA 论文 2021 年就发表了,HuggingFace PEFT 把它做成开箱即用大概是 2022。但到了 2023 年下半年,社区发现一个尴尬现状:

Daniel Han 是 Triton 重度用户,他和弟弟一起从零写了一组 Triton kernel,把这些算子全部 fused 起来。结果是惊人的:同样 Llama-7B QLoRA 训练,Unsloth 比 HF PEFT 默认实现快 2 倍以上,显存少 30%+,并且数学上完全等价(没有掉点)。

LoRA 在数学上是给原始线性层叠加一个低秩增量:

$$y = W x + \Delta W\, x,\qquad \Delta W = \tfrac{\alpha}{r}\, B A,\quad B\in\mathbb{R}^{d\times r},\;A\in\mathbb{R}^{r\times d}$$

$r \ll d$,所以 $BA$ 远小于 $W$。Unsloth 的核心 trick 就是把 $Wx$、$BAx$、激活、量化反量化、RoPE 这些步骤融成一个 Triton kernel,省掉中间的内存读写。

1.3 它和 PEFT / TRL / LLaMA-Factory 是什么关系

Unsloth 不是替代品,而是加速插件

项目你用 Unsloth 之后
HuggingFace PEFT仍然在用,但 LoRA 前后向走 Unsloth
HuggingFace TRL(SFTTrainer/DPOTrainer)仍然用,模型 init 时换成 FastLanguageModel.from_pretrained
LLaMA-Factory配置文件里加 use_unsloth: true 即可
Axolotl类似,YAML 里指定 unsloth adapter
transformers仍然用,但 forward 被 patch

Unsloth 实现的方式是对 HF 模型做 monkey patch:在你的模型加载完之后,把 LlamaDecoderLayer.forwardF.cross_entropyrotary_emb 这些关键函数替换成 Unsloth 的 Triton 版本。对你的训练循环来说几乎透明。

1.4 设计哲学:单卡为王 + 数学正确性

代价:多卡场景下开源版能力有限对 PyTorch / transformers 版本敏感,因为 monkey patch 依赖具体类的 forward 签名;Triton kernel 调试比 PyTorch 难,遇到 kernel 错误对新手不友好。

1.5 它适合用来做什么、不适合做什么

判断典型场景
✅ 适合单卡(4090 / 3090 / A100)做 7B-70B LoRA / QLoRA 微调
Colab、Kaggle 等免费 / 低成本 GPU 平台
想"用同样硬件训更长上下文"的人
个人开发者、初创团队做 PoC
❌ 不适合多机多卡千亿模型预训练
想自己控制每一行训练代码的人(monkey patch 会让调试稍复杂)
模型架构非常特殊不在 Unsloth 适配列表内的

1.6 本书将怎么带你走完这趟旅程

Unsloth 的特殊之处在于"看不见的加速",本书除了实战还会专门讲原理:

读完之后你应该能:在单卡上把任何主流 7B-70B 模型微调跑到当前最快,并且理解 Unsloth 内部的加速来自哪里。