AI Agents · 课时

使用 LoRA 和 QLoRA 进行高性价比调优

仅在量化后的基础模型上训练低秩适配器——一块 GPU 就能完成 70B 模型的微调。

第 3 / 4 课15 个步骤

使用 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 total

Training 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 反馈 — 无需本地设置。

此课程中的所有课时

  1. 何时微调优于提示
  2. 数据收集:轨迹与跟踪回放
  3. 使用 LoRA 和 QLoRA 进行高性价比调优
  4. 评估调优模型与基础模型
← 返回 AI Agents