训练加速:Unsloth 与 Liger Kernel

07-01 显存优化 解决「能不能训」;本篇解决「训得够不够快」。UnslothLiger 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
2
3
4
5
6
7
8
9
10
11
from trl import SFTConfig, SFTTrainer

training_args = SFTConfig(
output_dir="./out",
use_liger_kernel=True,
bf16=True,
gradient_checkpointing=True,
...
)

trainer = SFTTrainer(model=model_id, train_dataset=ds, args=training_args, peft_config=lora_config)
优点 限制
一行配置 需 GPU + 兼容 TRL/transformers 版本
与 PEFT 共存 部分模型架构覆盖不全
官方维护路径 ROCm 支持依版本变化

建议:CUDA 环境下 A/B 同一数据 100 step,对比 samples/sec 与 eval_loss 曲线。


三、Unsloth

独立包,对 Llama/Mistral/Gemma 等架构做高度优化 LoRA 路径。

1
pip install unsloth
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
from unsloth import FastLanguageModel
from trl import SFTTrainer, SFTConfig

model, tokenizer = FastLanguageModel.from_pretrained(
model_name="unsloth/Meta-Llama-3.1-8B-bnb-4bit",
max_seq_length=2048,
load_in_4bit=True,
)
model = FastLanguageModel.get_peft_model(
model, r=16, lora_alpha=32,
target_modules=["q_proj", "k_proj", "v_proj", "o_proj",
"gate_proj", "up_proj", "down_proj"],
)

trainer = SFTTrainer(
model=model,
tokenizer=tokenizer,
train_dataset=train_ds,
args=SFTConfig(per_device_train_batch_size=2, ...),
)
trainer.train()
优点 限制
公开 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


五、注意事項

  1. 数值一致性:加速内核应不改变算法;仍对比 eval_loss / 任务 F1。
  2. 版本 pintrlunslothtransformers 组合需锁定。
  3. checkpoint 兼容:Unsloth 保存的 adapter 一般可与 peft 互 load;合并前在 val 上验证。
  4. ROCm:优先标准 SFTTrainer + BF16 LoRA。

六、小结

  • 最少改动:试 use_liger_kernel=True
  • QLoRA 极速实验:Unsloth 模板。
  • 加速不能替代 数据质量基线评估

下一步:07-02 分布式 | 03 SFTTrainer 进阶

-------------本文结束感谢您的阅读-------------