07-01 显存优化 解决「能不能训」;本篇解决「训得够不够快」。Unsloth 与 Liger Kernel 通过 Triton 等内核融合算子,在兼容 TRL SFTTrainer 的前提下缩短 step 时间、有时进一步降显存。
段末注释:Liger Kernel 是 LinkedIn 开源的 Triton 训练内核集合,TRL 可通过
use_liger_kernel=True启用;Unsloth 是第三方 LoRA 微调加速库,重写部分前向/反向路径。
系列索引:微调技术路线导读 | 旧版笔记:5023 Unsloth | 工具详解:03-05
一、何时考虑加速
| 信号 | 手段 |
|---|---|
| 单卡能训但 epoch 太慢 | Unsloth / Liger |
| 已开 checkpointing 仍慢 | 优先加速内核 |
| 多卡 DDP 通信 bound | 07-02 分布式 调 batch |
| 尚未解决 OOM | 先 07-01 / QLoRA |
加速不改变算法目标,验收仍用任务指标(04 系列)。
二、Liger Kernel(TRL 原生开关)
03 SFTTrainer §十一 已提及:
1 | from trl import SFTConfig, SFTTrainer |
| 优点 | 限制 |
|---|---|
| 一行配置 | 需 GPU + 兼容 TRL/transformers 版本 |
| 与 PEFT 共存 | 部分模型架构覆盖不全 |
| 官方维护路径 | ROCm 支持依版本变化 |
建议:CUDA 环境下 A/B 同一数据 100 step,对比 samples/sec 与 eval_loss 曲线。
三、Unsloth
独立包,对 Llama/Mistral/Gemma 等架构做高度优化 LoRA 路径。
1 | pip install unsloth |
1 | from unsloth import FastLanguageModel |
| 优点 | 限制 |
|---|---|
| 公开 benchmark 显示高 speedup | 绑定 Unsloth 模型清单或转换流程 |
| 内置 4bit 路径 | 与自建 checkpoint 集成需对照文档 |
| 可接 TRL | AMD ROCm 支持有限,实战用 BF16 LoRA |
详见 5023 Unsloth 简介。
四、对比与选型
| Liger Kernel | Unsloth | |
|---|---|---|
| 集成成本 | 低(SFTConfig 开关) | 中(模型加载路径) |
| 灵活性 | 高 | 中 |
| QLoRA | 依版本 | 内置友好 |
| 首选场景 | 已有 TRL 脚本想提速 | 从零搭 Llama/Gemma QLoRA |
可叠加:use_liger_kernel=True 是否与 Unsloth 同时用需查当前版本说明,默认二选一 A/B。
五、注意事項
- 数值一致性:加速内核应不改变算法;仍对比 eval_loss / 任务 F1。
- 版本 pin:
trl、unsloth、transformers组合需锁定。 - checkpoint 兼容:Unsloth 保存的 adapter 一般可与
peft互 load;合并前在 val 上验证。 - ROCm:优先标准
SFTTrainer+ BF16 LoRA。
六、小结
下一步:07-02 分布式 | 03 SFTTrainer 进阶。