补充模块:LoRA / QLoRA / PEFT 基础认知


1. 为什么 AI Agent 岗也要了解 LoRA / QLoRA / PEFT

你投的是 AI Agent / 大模型应用方向,重点不是做基础模型训练,但你仍然需要知道微调相关知识。

原因有三个:

1.1 面试官可能会问

常见问题:

RAG 和微调有什么区别?
什么时候用 RAG,什么时候用 fine-tuning?
LoRA 是什么?
QLoRA 为什么省显存?
PEFT 和全量微调有什么区别?
你这个 Agent 项目有没有必要微调?

你不一定要真的训练过 70B 模型,但要能回答这些问题。

1.2 项目升级时可能会用到

你的 RAG + Agent 项目中,可能有这些场景适合轻量微调:

场景 是否适合 LoRA / QLoRA
问题分类器总是分错 可以考虑小模型微调
Agent 工具选择不稳定 可以考虑用工具调用样本微调
输出格式总是不稳定 可以考虑结构化输出数据微调
回答风格要统一 可以考虑 SFT
私有知识经常更新 不适合微调,优先 RAG
要让模型记住文档内容 不适合直接微调,优先 RAG
业务规则经常变 不适合微调,优先 workflow / prompt / tool

1.3 能体现你对大模型工程的完整理解

一个完整的大模型应用工程师要知道:

Prompt 解决轻量行为控制
RAG 解决知识注入
Tool Calling 解决外部动作
Agent 解决动态决策
Fine-tuning 解决模型行为和风格适配
PEFT 解决低成本微调
Evals 解决效果评估
Deployment 解决交付上线

LoRA / QLoRA / PEFT 属于其中的“低成本模型适配”部分。


2. 先理解:Fine-tuning 是什么

Fine-tuning,微调,是指在一个已经预训练好的模型基础上,用你的任务数据继续训练,让模型更适合某个特定任务。

例如:

基础模型:会通用聊天
微调数据:大量客服问答
微调后:更像客服助手

或者:

基础模型:会通用指令跟随
微调数据:大量工具调用样本
微调后:更擅长选择正确工具和生成参数

2.1 全量微调

全量微调是更新模型的全部参数。

例如一个 7B 模型有 70 亿参数,全量微调就是训练这 70 亿参数。

优点:

  • 理论上适配能力强;
  • 可以深度改变模型行为;
  • 在大数据和强算力下效果好。

缺点:

  • 显存占用大;
  • 训练成本高;
  • 存储成本高;
  • 容易过拟合;
  • 每个任务都要保存一份完整模型;
  • 工程门槛高。

2.2 参数高效微调

PEFT 就是为了降低这个成本。


3. PEFT 是什么

PEFT 是 Parameter-Efficient Fine-Tuning,参数高效微调。

核心思想:

不训练整个大模型,只训练很少一部分新增参数或指定参数。

也就是说:

原始大模型参数冻结
只更新少量 adapter / prompt / low-rank 参数

这样可以显著降低:

  • 训练显存;
  • 训练时间;
  • 存储成本;
  • 多任务切换成本。

3.1 PEFT 的核心价值

维度 全量微调 PEFT
训练参数量 全部参数 少量参数
显存需求
存储成本 每个任务一整份模型 每个任务一个 adapter
多任务切换 成本高 切换 adapter 即可
工程难度 中等
适合个人学习 不太适合 更适合

3.2 常见 PEFT 方法

方法 简单理解
LoRA 在模型线性层旁边加低秩矩阵,只训练这些矩阵
QLoRA 先把基础模型量化到 4-bit,再训练 LoRA
Adapter Tuning 在 Transformer 层中插入小模块
Prefix Tuning 给模型加可训练前缀向量
Prompt Tuning 学习一组软 prompt embedding
IA3 用向量缩放激活或注意力相关部分
AdaLoRA 动态分配不同层的 LoRA rank

初学重点掌握:

PEFT -> LoRA -> QLoRA

4. LoRA 是什么

LoRA = Low-Rank Adaptation,低秩适配。

它的核心思想是:

冻结原模型参数 W
不直接训练 W
给 W 的更新量 ΔW 做一个低秩分解
只训练两个小矩阵 A 和 B

原本全量微调是:

W' = W + ΔW

LoRA 的做法是:

ΔW = B × A

其中 A 和 B 是两个很小的低秩矩阵。

所以:

W' = W + B × A

训练时:

W 冻结
A、B 可训练

4.1 直觉理解

假设原模型中的一个大矩阵是:

4096 × 4096

全量微调要更新:

4096 × 4096 = 16,777,216 个参数

LoRA 假设这个更新矩阵不需要那么复杂,可以用低秩矩阵近似。

如果 rank = 8:

A: 8 × 4096
B: 4096 × 8

需要训练的参数大约是:

8 × 4096 + 4096 × 8 = 65,536

这比 1677 万小很多。


5. LoRA 的关键公式

LoRA 的核心可以写成:

h = W x + ΔW x
ΔW = B A

所以:

h = W x + B A x

实际实现中通常还有缩放因子:

h = W x + (α / r) B A x

其中:

符号 含义
W 原始模型权重
ΔW 微调要学习的权重更新
AB LoRA 新增的低秩矩阵
r rank,低秩维度
α LoRA scaling 参数
α / r 缩放系数

5.1 rank 是什么

rank 可以简单理解为 LoRA 的“表达能力大小”。

rank 越大 -> 可训练参数越多 -> 表达能力更强 -> 显存更高 -> 更容易过拟合
rank 越小 -> 参数更少 -> 更省资源 -> 表达能力有限

常见取值:

r = 4 / 8 / 16 / 32 / 64

初学实验可以从:

r = 8 或 16

开始。


6. LoRA 通常加在哪里

Transformer 里有很多线性层。

LoRA 通常加在 attention 或 MLP 的线性投影层上。

常见 target modules:

q_proj
k_proj
v_proj
o_proj
gate_proj
up_proj
down_proj

初学最常见的是:

q_proj
v_proj

很多 LLaMA 系模型也会对更多模块加 LoRA:

q_proj, k_proj, v_proj, o_proj, gate_proj, up_proj, down_proj

6.1 target_modules 是什么

target_modules 指定哪些层要插入 LoRA。

示例:

target_modules = ["q_proj", "v_proj"]

含义:

只在 query projection 和 value projection 这两个线性层上加 LoRA。

如果写得太少,适配能力可能不够。

如果写得太多,训练参数和显存会上升。


7. LoRA 的重要超参数

参数 含义 常见值
r rank,低秩维度 8 / 16 / 32
lora_alpha 缩放系数 16 / 32 / 64
lora_dropout LoRA dropout 0.05 / 0.1
target_modules 加 LoRA 的层 q_proj, v_proj 等
bias 是否训练 bias usually “none”
task_type 任务类型 CAUSAL_LM / SEQ_CLS
learning_rate 学习率 1e-4 ~ 2e-4 常见
batch_size batch 大小 取决于显存
gradient_accumulation_steps 梯度累积 小显存常用
num_train_epochs 训练轮数 1-3 起步

7.1 初学推荐配置

r = 8
lora_alpha = 16
lora_dropout = 0.05
target_modules = ["q_proj", "v_proj"]
bias = "none"
task_type = "CAUSAL_LM"

如果效果不够,再尝试:

r = 16
target_modules = ["q_proj", "k_proj", "v_proj", "o_proj"]

8. QLoRA 是什么

QLoRA = Quantized LoRA。

它可以理解为:

量化后的基础模型 + LoRA 微调

具体来说:

1. 把基础模型加载成 4-bit 量化形式
2. 冻结这个 4-bit 模型
3. 在上面插入 LoRA adapter
4. 只训练 LoRA adapter

也就是说:

LoRA:基础模型通常以 16-bit / bf16 / fp16 加载,训练 LoRA
QLoRA:基础模型以 4-bit 加载,训练 LoRA

8.1 QLoRA 为什么省显存

因为大模型最占显存的是基础权重。

如果基础模型用 16-bit 存储:

每个参数大约 2 bytes

如果用 4-bit 存储:

每个参数大约 0.5 bytes

理论上基础权重显存大幅下降。

然后只训练很小的 LoRA 参数,所以整体显存要求更低。


9. QLoRA 的三个关键技术点

QLoRA 论文中常提到三个关键点:

9.1 4-bit NormalFloat,NF4

NF4 是一种适合正态分布权重的 4-bit 数据类型。

直觉理解:

普通 4-bit 量化是把数值压缩到很少的表示范围里。
NF4 针对神经网络权重分布做了更合适的编码。

9.2 Double Quantization

Double Quantization 是进一步量化量化常数。

直觉理解:

量化本身也需要保存一些 scale / constant。
double quantization 连这些常数也进一步压缩。

9.3 Paged Optimizers

Paged Optimizers 用来处理训练时显存峰值。

直觉理解:

训练中有时会突然需要很多显存。
paged optimizer 可以缓解这些内存峰值。

10. LoRA vs QLoRA

维度 LoRA QLoRA
基础模型精度 通常 fp16 / bf16 4-bit 量化
训练参数 LoRA adapter LoRA adapter
基础模型是否冻结
显存占用 低于全量微调 低于普通 LoRA
训练速度 通常较快 可能受 4-bit 计算影响
适合场景 显存相对充足 显存紧张
难度 中等 稍高
依赖 PEFT PEFT + bitsandbytes 等

一句话:

LoRA 省的是训练参数。
QLoRA 进一步把基础模型权重量化,主要省显存。

11. PEFT / LoRA / QLoRA / RAG 的关系

这几个概念经常被混在一起。

11.1 RAG 解决什么问题

RAG 解决的是:

模型不知道某些外部知识

例如:

  • 私有文档;
  • 最新资料;
  • 公司内部知识;
  • 用户上传 PDF;
  • 需要引用来源的问题。

RAG 的特点:

不改变模型参数
知识更新方便
适合事实性、文档型、经常变化的知识

11.2 Fine-tuning 解决什么问题

Fine-tuning 解决的是:

模型行为、风格、格式、任务模式不稳定

例如:

  • 模型总是不按指定 JSON 输出;
  • 工具调用参数经常错;
  • 固定业务问答风格;
  • 分类任务;
  • 领域表达习惯;
  • 指令跟随风格。

Fine-tuning 的特点:

改变模型参数或 adapter 参数
需要训练数据
知识更新不如 RAG 方便
更适合行为模式适配

11.3 LoRA / QLoRA 解决什么问题

LoRA / QLoRA 解决的是:

微调成本太高

它们不是新的任务形态,而是低成本微调方法。

11.4 一句话区分

RAG:给模型外部知识。
Tool Calling:给模型外部能力。
Agent:让模型动态决策。
LoRA:低成本改变模型行为。
QLoRA:更省显存地做 LoRA。
PEFT:一类参数高效微调方法的总称。

12. 什么时候用 RAG,什么时候用 LoRA

12.1 优先用 RAG 的场景

场景 原因
知识经常更新 RAG 更新文档即可
需要引用来源 RAG 可以返回 citation
私有文档问答 文档可以入库检索
数据量不大但内容多变 微调不划算
需要减少幻觉 检索证据更重要
需要权限控制 检索层可以按权限过滤

12.2 可以考虑 LoRA 的场景

场景 原因
输出格式长期固定 可以学稳定格式
工具调用样式固定 可以学工具参数模式
领域语言风格明显 可以适配表达风格
分类任务稳定 小模型 LoRA 分类
有高质量标注数据 微调才有意义
prompt 很长且重复 微调可以减少 prompt 依赖

12.3 不建议一上来微调的场景

场景 原因
只是缺知识 优先 RAG
数据质量很差 微调会学坏
样本很少 容易过拟合
需求变化快 微调迭代慢
没有评测集 不知道是否变好
只是 prompt 没写好 先优化 prompt

12.4 面试回答模板

如果问题是模型缺少外部知识,例如私有文档、最新资料或需要引用来源,我会优先用 RAG;如果问题是模型行为不稳定,例如输出格式、工具调用参数、固定业务风格,我会考虑 fine-tuning。LoRA 和 QLoRA 本质上是降低 fine-tuning 成本的方法,不是替代 RAG 的方案。实际项目里,我会先用 prompt、workflow、RAG 和工具解决问题,只有在有稳定任务和高质量数据时才考虑 LoRA 微调。


13. SFT、DPO 和 LoRA 的关系

你可能还会看到:

SFT
RLHF
DPO
LoRA
QLoRA

它们不是同一层概念。

13.1 SFT 是什么

SFT = Supervised Fine-Tuning,监督微调。

数据格式通常是:

输入 -> 标准答案

例如:

{
  "instruction": "请把下面内容总结成三点",
  "input": "长文本...",
  "output": "1. ... 2. ... 3. ..."
}

SFT 是训练目标。

LoRA 是训练方法。

也就是说:

可以用 LoRA 来做 SFT

13.2 DPO 是什么

DPO = Direct Preference Optimization,直接偏好优化。

数据格式通常是:

prompt
chosen answer
rejected answer

用来让模型更偏向人类喜欢的回答。

13.3 它们的关系

SFT / DPO:训练目标或训练阶段
LoRA / QLoRA:参数高效训练方法
PEFT:这类方法的总称

14. 训练数据比算法更重要

做 LoRA / QLoRA 时,数据质量非常关键。

低质量数据会让模型:

  • 学会错误知识;
  • 输出格式变差;
  • 产生更多幻觉;
  • 过拟合固定表达;
  • 工具调用更混乱。

14.1 好数据的特点

特点 说明
任务明确 每条数据都对应一个明确能力
格式一致 instruction / input / output 规范
答案高质量 没有明显错误
覆盖边界情况 包含异常、拒答、空结果
与线上场景一致 训练问题和真实问题相似
有验证集 能判断是否真的提升

14.2 不建议把 PDF 原文直接拿去微调

很多人会误以为:

我有很多 PDF,所以可以直接微调模型。

这通常不是好思路。

原因:

PDF 原文不是高质量 instruction 数据。
模型可能学不到如何回答问题。
知识更新后还要重新训练。
引用来源也不好控制。

更推荐:

PDF 原文 -> RAG
高质量问答样本 / 工具调用样本 -> LoRA 微调

15. LoRA 微调基本流程

一个典型流程是:

1. 选择基础模型
2. 准备训练数据
3. 准备 tokenizer
4. 加载模型
5. 配置 LoRA
6. 训练
7. 验证
8. 保存 adapter
9. 推理时加载 base model + adapter
10. 必要时 merge adapter

15.1 数据格式示例

Instruction tuning 数据:

{
  "instruction": "请判断用户问题属于哪一类",
  "input": "RAG 为什么能减少幻觉?",
  "output": "knowledge_qa"
}

工具调用数据:

{
  "instruction": "根据用户问题选择工具并生成参数",
  "input": "帮我查一下 RAG 的定义",
  "output": {
    "tool_name": "search_knowledge_base",
    "arguments": {
      "query": "RAG definition",
      "top_k": 5
    }
  }
}

结构化输出数据:

{
  "instruction": "请根据检索片段回答,并返回 JSON",
  "input": "问题:RAG 为什么能减少幻觉?\n片段:...",
  "output": {
    "answer": "RAG 通过检索外部知识...",
    "citations": [
      {
        "doc_id": "rag_001",
        "page": 3
      }
    ]
  }
}

16. Hugging Face PEFT 伪代码

下面是一个简化版思路,不是完整可直接运行项目。

from transformers import AutoModelForCausalLM, AutoTokenizer
from peft import LoraConfig, get_peft_model, TaskType

model_name = "your-base-model"

tokenizer = AutoTokenizer.from_pretrained(model_name)

model = AutoModelForCausalLM.from_pretrained(
    model_name,
    device_map="auto"
)

lora_config = LoraConfig(
    r=8,
    lora_alpha=16,
    target_modules=["q_proj", "v_proj"],
    lora_dropout=0.05,
    bias="none",
    task_type=TaskType.CAUSAL_LM
)

model = get_peft_model(model, lora_config)

model.print_trainable_parameters()

核心是:

base model 冻结
LoRA adapter 可训练

17. QLoRA 伪代码

QLoRA 通常会结合 4-bit 量化加载模型。

from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig
from peft import LoraConfig, get_peft_model, TaskType
import torch

model_name = "your-base-model"

bnb_config = BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_quant_type="nf4",
    bnb_4bit_use_double_quant=True,
    bnb_4bit_compute_dtype=torch.bfloat16
)

tokenizer = AutoTokenizer.from_pretrained(model_name)

model = AutoModelForCausalLM.from_pretrained(
    model_name,
    quantization_config=bnb_config,
    device_map="auto"
)

lora_config = LoraConfig(
    r=8,
    lora_alpha=16,
    target_modules=["q_proj", "v_proj"],
    lora_dropout=0.05,
    bias="none",
    task_type=TaskType.CAUSAL_LM
)

model = get_peft_model(model, lora_config)

model.print_trainable_parameters()

18. Adapter 保存、加载和合并

18.1 保存 adapter

LoRA 训练后通常保存的是 adapter,不是完整模型。

model.save_pretrained("./lora_adapter")
tokenizer.save_pretrained("./lora_adapter")

18.2 推理时加载 adapter

from peft import PeftModel
from transformers import AutoModelForCausalLM

base_model = AutoModelForCausalLM.from_pretrained(
    "your-base-model",
    device_map="auto"
)

model = PeftModel.from_pretrained(
    base_model,
    "./lora_adapter"
)

18.3 合并 adapter

有时为了部署方便,可以把 LoRA adapter 合并进基础模型权重。

merged_model = model.merge_and_unload()
merged_model.save_pretrained("./merged_model")

注意:

合并后模型体积会变大。
合并后切换不同 adapter 不如原来方便。

19. LoRA 在 Agent 项目中的可能用法

你的 Knowledge Agent Assistant 项目中,不建议一开始微调整个生成模型。

更实际的用法有三个。

19.1 微调问题分类器

目标:

用户问题 -> question_type

例如:

knowledge_qa
document_summary
comparison
external_task
follow_up
chitchat
unknown

好处:

分类任务明确
数据容易构造
评估简单
不需要大模型

可以用小模型做分类,不一定用大语言模型。

19.2 微调工具选择器

目标:

用户问题 -> tool_name + arguments

例如:

{
  "tool_name": "search_knowledge_base",
  "arguments": {
    "query": "RAG hallucination reduction",
    "top_k": 5
  }
}

好处:

可以让 Agent 工具调用更稳定
减少 prompt 复杂度

风险:

必须有高质量工具调用样本
必须有安全兜底
不能让模型自由调用高风险工具

19.3 微调结构化输出格式

目标:

让模型稳定输出 answer / citations / tool_trace / error

但实际项目里,通常可以先用:

JSON Schema
Pydantic 校验
失败重试

不一定马上微调。


20. LoRA 不适合解决的问题

LoRA 不是万能的。

不适合:

20.1 不适合注入大量新知识

如果你的目的是:

让模型记住 500 篇 PDF 的内容

不建议 LoRA。

应该用:

RAG

原因:

知识更新困难
引用来源不好做
容易记错或幻觉
训练成本不划算

20.2 不适合频繁变化的业务规则

如果业务规则每周改一次,微调不合适。

应该用:

配置
workflow
规则引擎
prompt
tool

20.3 不适合数据质量差的场景

如果训练数据很乱,LoRA 会把坏习惯学进去。


21. 实验路线建议

你现在不需要真的训练大模型。

建议分三步。

21.1 第一阶段:只学概念

掌握:

PEFT 是什么
LoRA 是什么
QLoRA 是什么
RAG vs 微调
LoRA 超参数
训练数据格式

21.2 第二阶段:跑一个小实验

可以选择一个小模型,做一个简单分类任务:

输入:用户问题
输出:question_type

例如训练数据:

{"input": "RAG 为什么能减少幻觉?", "output": "knowledge_qa"}
{"input": "帮我保存成学习笔记", "output": "external_task"}
{"input": "对比 RAG 和微调", "output": "comparison"}

目标不是追求 SOTA,而是理解训练流程。

21.3 第三阶段:和 Agent 项目结合

把微调后的分类器接入:

FastAPI -> classifier -> LangGraph route

然后比较:

微调前分类准确率
微调后分类准确率

这样你就能在面试中讲:

我尝试用 LoRA 对问题分类器做轻量微调,并通过分类准确率评估它是否真的优于 prompt 分类。


22. 评估微调是否有效

做 LoRA 之前一定要有 eval。

22.1 分类任务指标

指标 含义
Accuracy 分类准确率
Precision 某一类预测是否准
Recall 某一类是否被找全
F1 Precision 和 Recall 的综合
Confusion Matrix 哪些类别容易混淆

22.2 生成任务指标

指标 含义
格式合法率 JSON 是否可解析
字段完整率 必要字段是否都有
答案正确率 是否回答正确
引用支持率 引用是否支撑答案
幻觉率 是否编造
人工评分 最可靠但成本高

22.3 微调前后对比

不要只说:

我做了 LoRA 微调

要说:

微调前分类准确率 78%
微调后分类准确率 88%
工具参数错误率从 12% 降到 5%

哪怕是小实验,也要有指标意识。


23. 常见误区

23.1 误区一:RAG 和 LoRA 二选一

不对。

它们可以结合:

RAG 提供知识
LoRA 改善行为
Agent 负责调用工具

23.2 误区二:有 PDF 就拿去微调

不建议。

PDF 更适合入向量库做 RAG。

23.3 误区三:LoRA 一定提升效果

不一定。

如果数据差、任务不明确、评估集不合理,可能效果更差。

23.4 误区四:QLoRA 比 LoRA 效果一定更好

QLoRA 主要优势是省显存,不是天然效果更好。

23.5 误区五:微调能完全消除幻觉

不能。

微调可以改善行为模式,但不能保证事实完全正确。

事实型问题仍然需要 RAG、引用和评估。


24. 面试高频问题与回答

Q1:PEFT 是什么?

回答:

PEFT 是参数高效微调,核心思想是不更新整个大模型,而是只训练少量新增参数或部分参数,从而降低训练显存、计算和存储成本。LoRA、QLoRA、Prefix Tuning、Prompt Tuning 都可以看作 PEFT 方法。


Q2:LoRA 是什么?

回答:

LoRA 是低秩适配方法。它冻结原始模型权重,不直接更新大矩阵 W,而是假设微调带来的权重变化 ΔW 可以用两个低秩矩阵 A 和 B 表示,也就是 ΔW = BA。训练时只更新 A 和 B,所以可训练参数大幅减少,显存和存储成本都更低。


Q3:QLoRA 和 LoRA 有什么区别?

回答:

LoRA 是在冻结基础模型的基础上训练低秩 adapter;QLoRA 则进一步把基础模型以 4-bit 量化方式加载,再在量化模型上训练 LoRA adapter。简单说,LoRA 主要减少可训练参数,QLoRA 进一步通过 4-bit 量化减少基础模型显存占用。


Q4:LoRA 和全量微调有什么区别?

回答:

全量微调会更新模型的全部参数,成本高、显存需求大、每个任务都要保存完整模型。LoRA 冻结基础模型,只训练少量低秩矩阵,训练和存储成本更低,也更适合多任务切换。但如果需要非常深度地改变模型能力,全量微调理论上表达能力更强。


Q5:RAG 和 LoRA 怎么选?

回答:

如果问题是知识缺失,尤其是私有文档、最新资料、需要引用来源,我会优先用 RAG;如果问题是模型行为不稳定,比如输出格式、工具调用模式、固定风格或分类任务,我会考虑 LoRA。LoRA 不适合用来记大量经常变化的知识,RAG 也不能替代模型行为适配,它们解决的问题不同。


Q6:你的 Agent 项目有没有必要做 LoRA?

回答:

第一版没有必要。因为当前项目的核心问题是知识检索、工具调用、状态管理和安全控制,优先用 RAG、LangGraph、结构化输出和 evals 解决。后续如果发现问题分类或工具选择长期不稳定,并且积累了足够高质量样本,我会考虑用 LoRA 微调一个分类器或工具选择器,而不是直接微调整个问答模型。


Q7:LoRA 的 rank 怎么选?

回答:

rank 控制 LoRA adapter 的表达能力和参数量。rank 越大,表达能力越强,但显存和过拟合风险也更高。一般会从 r=8 或 r=16 开始,通过验证集指标比较。如果任务简单,低 rank 就够;如果任务复杂,可以增大 rank 或扩大 target modules。


Q8:QLoRA 为什么能在较低显存下训练大模型?

回答:

QLoRA 把基础模型以 4-bit 量化形式加载,冻结量化后的基础权重,只训练 LoRA adapter。这样基础模型权重显存大幅下降,而可训练参数又很少。它还引入 NF4、double quantization 和 paged optimizers 来进一步降低显存占用和处理训练时的内存峰值。


Q9:LoRA 训练后部署时怎么用?

回答:

通常保存的是 LoRA adapter。推理时加载 base model,再加载 adapter。如果要部署方便,也可以把 adapter merge 到基础模型里,但合并后模型体积更大,切换不同任务 adapter 不如单独加载灵活。


Q10:微调前最重要的准备是什么?

回答:

不是先写训练代码,而是先明确任务和评测集。要知道希望模型在哪些样本上变好,准备高质量 instruction 数据,并定义准确率、格式合法率、工具调用成功率等指标。没有 eval 的微调很容易只是“感觉变好”。


25. 简历中是否要写 LoRA / QLoRA

如果你只是了解概念,没有实际训练过,不建议在项目经历里写得太重。

可以写在技能里:

了解 LoRA / QLoRA / PEFT 等轻量微调方法,理解其与 RAG、Prompt Engineering、Tool Calling 的适用边界。

如果你真的做了小实验,可以写:

尝试使用 LoRA 对问题分类器进行轻量微调,构建 question_type 标注数据,并通过分类准确率对比 prompt 分类与微调分类效果。

不要写成:

精通大模型微调

除非你真的做过完整训练、评估和部署。


26. 放进你的学习路线中

建议把这个模块放在阶段 6 或阶段 7 之后,作为补充模块:

阶段 8:模型适配与轻量微调基础

目标:
理解 RAG、Agent、Prompt、Fine-tuning 的边界;
掌握 LoRA / QLoRA / PEFT 的核心原理;
能判断项目中是否需要微调。

关键技术:
PEFT
LoRA
QLoRA
SFT
DPO 基础认知
训练数据格式
评估指标
adapter 保存与加载

30. 推荐资料

  • Hugging Face PEFT 官方文档
  • Hugging Face LoRA conceptual guide
  • LoRA: Low-Rank Adaptation of Large Language Models
  • QLoRA: Efficient Finetuning of Quantized LLMs
  • Hugging Face bitsandbytes quantization documentation
  • Hugging Face Transformers PEFT integration documentation
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐