使用 LoRA 和 QLoRA 进行高性价比调优
仅在量化后的基础模型上训练低秩适配器——一块 GPU 就能完成 70B 模型的微调。
使用 LoRA 和 QLoRA 进行高性价比调优 是 CoddyKit 上的免费 AI Agents 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 AI Agents 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 AI Agents 课程共包含 4 节课。
本课时的部分内容尚未翻译,以英文显示。
为什么使用 PEFT?
对 Llama 70B 进行全量微调需要 8 张以上的 H100,并且会更新 700 亿个参数。PEFT(参数高效微调)只更新少于 1% 的参数,却能达到相近的质量。成本可大幅降低。
LoRA:低秩适配
LoRA(Hu 等人,2021 年)会在冻结的基础权重旁训练很小的“适配器”矩阵:
- 添加 A x B 矩阵,其中 A 为 dxr,B 为 rxd,r 较小(8、16、64)
- 前向传播:y = Wx + (BA)x
- 只训练 A 和 B——参数数量减少几个数量级
QLoRA:量化 LoRA
QLoRA(Dettmers 等人,2023 年)在训练期间将基础模型量化为 4 位,进一步降低成本:
- 基础模型使用 NF4(4 位)
- LoRA 适配器使用更高精度
- 一张 A100/H100 就能完成 70B 模型的微调
Setup with peft + transformers
# pip install peft transformers bitsandbytes
from peft import LoraConfig, get_peft_model
from transformers import AutoModelForCausalLM
model = AutoModelForCausalLM.from_pretrained(
'meta-llama/Llama-3.1-8B-Instruct',
load_in_4bit=True, # QLoRA
device_map='auto'
)
lora_config = LoraConfig(
r=16, # rank
lora_alpha=32,
target_modules=['q_proj', 'v_proj'],
lora_dropout=0.05,
bias='none'
)
model = get_peft_model(model, lora_config)
model.print_trainable_parameters()
# trainable params: ~0.5% of totalTraining Loop with TRL
from trl import SFTTrainer
trainer = SFTTrainer(
model=model,
train_dataset=dataset,
tokenizer=tokenizer,
args=TrainingArguments(
per_device_train_batch_size=4,
gradient_accumulation_steps=4,
learning_rate=2e-4,
num_train_epochs=3,
output_dir='./lora-out'
)
)
trainer.train()
model.save_pretrained('./adapter')使用 Unsloth
Unsloth 是速度最快的 LoRA 库——比原生 peft 快 2 倍。可以直接替换使用其接口:
from unsloth import FastLanguageModel
model, tokenizer = FastLanguageModel.from_pretrained(
model_name='meta-llama/Llama-3.1-8B-Instruct',
load_in_4bit=True
)
model = FastLanguageModel.get_peft_model(
model,
r=16,
target_modules=['q_proj', 'k_proj', 'v_proj', 'o_proj', 'gate_proj', 'up_proj', 'down_proj']
)成本估算
使用 10k 个示例对 Llama 3.1 8B 进行 QLoRA:
- 在单张 H100 上约需 4 小时
- 云端 GPU 成本约为 5-10 美元
- 适配器文件:100-300 MB
选择秩 r
- r = 8——最小配置,用于格式或风格变化
- r = 16-32——适用于大多数情况
- r = 64+——用于大幅增加新行为,容量更大
目标模块
默认使用注意力投影(q、v)。若需要更大容量,请包含所有线性层——质量更好,但参数更多。
重要的超参数
- 学习率——1e-4 到 5e-4 较为常见
- 训练轮数——SFT 使用 2-5 轮
- 批次大小——取决于 VRAM;使用梯度累积来模拟更大的批次
将适配器合并到基础模型
进行推理时,您可以将 LoRA 合并回基础权重:
merged = model.merge_and_unload()
merged.save_pretrained('./full-model')提供多个 LoRA
vLLM 支持在推理时热切换 LoRA。对于在共享基础模型上为不同客户进行的微调,这很有用:
llm = LLM(model='base', enable_lora=True, max_lora_rank=64)
response = llm.generate(prompt, lora_request=LoRARequest('customer-a', 1, './customer-a-adapter'))评估适配器
请始终在 YOUR 评估集上运行调优后的模型。有时调优后的模型在边缘情况下会更差——请如实面对回归问题。
LoRA 的优势
与全量微调相比,LoRA 的主要实际优势是什么?
回顾
LoRA + QLoRA = 高性价比微调。使用 Unsloth 提速,使用 peft/TRL 覆盖更多场景。大多数情况下选择 16-32 的秩。与您的黄金数据集进行评估。
用 AI 导师学习 AI Agents — 免费
在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。
- 课程
- 60
- 课程
- 239
常见问题解答
「使用 LoRA 和 QLoRA 进行高性价比调优」课时是免费的吗?
是的 — 「使用 LoRA 和 QLoRA 进行高性价比调优」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 AI Agents 课程的其余内容,请升级到 CoddyKit PRO。 AI Agents 课程共包含 4 节课。
「使用 LoRA 和 QLoRA 进行高性价比调优」这节课中我会学到什么?
仅在量化后的基础模型上训练低秩适配器——一块 GPU 就能完成 70B 模型的微调。 你通过在浏览器中直接运行的动手代码来练习 AI Agents,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 AI Agents 需要有经验吗?
无需任何先前经验。CoddyKit 上的 AI Agents 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。
「使用 LoRA 和 QLoRA 进行高性价比调优」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 AI Agents 课中编写并运行代码吗?
能。每节 AI Agents 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 何时微调优于提示
- 数据收集:轨迹与跟踪回放
- 使用 LoRA 和 QLoRA 进行高性价比调优
- 评估调优模型与基础模型