做 LLM 微调(Fine-tuning,微调)时,文档、论文、GitHub README 里会蹦出大量缩写:SFT、LoRA、QLoRA、DPO、GRPO、AWQ……很多人第一次读 LLaMA-Factory 的文档时,一半的参数名都是陌生的。
这篇博客把大模型微调全链路(数据 → 训练 → 对齐 → 量化 → 评测 → 部署)涉及的专业名词做一次系统梳理,每个名词给出英文全称 + 中文解释 + 必要的展开说明,并附上不同微调方法的显存/硬件需求参考,方便对照着看框架文档。
一、先建立全景图:微调在训练流程中的位置
一个典型的 LLM 从"预训练裸模型"变成"可用的聊天模型",要经历下面几个阶段:
1
2
3
4
5
6
7
8
9
10
11
12
13
| 预训练 (Pre-training)
↓ 海量文本上自回归训练,学到语言与世界知识
基础模型 (Base Model)
↓
监督微调 (SFT / Instruction Tuning)
↓ 用"指令-回答"数据教模型听话
指令模型 (Instruct / Chat Model)
↓
偏好对齐 (RLHF / DPO / GRPO / ...)
↓ 用人类偏好让回答更安全、有用、更符合口味
对齐模型 (Aligned Model)
↓
量化 (Quantization) + 评测 (Evaluation) + 推理部署 (Inference / Serving)
|
对应的模型称呼:
| 名词 | 解释 |
|---|
| Base Model(基础模型 / 裸模型) | 只做完预训练的模型,会"接话"但不会"对话",输出常不可控 |
| Instruct Model(指令模型) | 经过指令微调(SFT)的模型,能理解并遵循指令 |
| Chat Model(对话模型) | 在 Instruct 基础上再做了偏好对齐的模型,对话体验好、更安全 |
| Reasoning Model(推理模型) | 专门强化推理能力的模型(如 o1/R1 系列),长思维链 + 强化学习 |
一句话:Base 会说话,Instruct 听话,Chat 讨人喜欢。
二、微调方法:Full FT 与 PEFT
2.1 全参数微调(Full Fine-tuning, Full FT)
把模型所有参数都参与更新。效果上限最高,但显存需求巨大:7B 模型用 AdamW 训练,参数 + 梯度 + 优化器状态大约需要 7B × (2+2+12) ≈ 140GB(混合精度下),单卡基本跑不动,必须上多卡 + ZeRO/FSDP。
相关名词:
| 名词 | 解释 |
|---|
| 参数冻结(Freeze, 冻结) | 把部分层(如 Embedding, 嵌入层、浅层 Transformer 块)设为只读,只训练其余层,省显存 |
| PEFT 的对立面 | Full FT 的缺点:灾难性遗忘风险大、显存贵、每个领域一份完整权重 |
2.2 参数高效微调(PEFT, Parameter-Efficient Fine-Tuning, 参数高效微调)
HuggingFace 提出的统称:只训练原模型参数的一小部分(通常 <1%),其余冻结。代表方法 LoRA 是目前工业界的事实标准。
PEFT 家族总览:
| 方法(英文全称) | 训练什么 | 参数量 | 一句话 |
|---|
| LoRA(Low-Rank Adaptation, 低秩适应) | 注入的低秩矩阵 A、B | 极小 | 主流首选 |
| QLoRA(Quantized LoRA, 量化 LoRA) | 4bit 量化基座 + LoRA | 极小 | 消费级显卡微调大模型 |
| DoRA(Weight-Decomposed LoRA, 权重分解 LoRA) | LoRA 的方向分量 + 权重幅度 | 小 | 微调效果逼近 Full FT |
| AdaLoRA(Adaptive LoRA, 自适应 LoRA) | 自适应分配秩的低秩矩阵 | 小 | 按重要性动态分配秩 |
| iLoRA(improved LoRA, 改进初始化 LoRA) | 改进初始化的 LoRA | 小 | 秩可以开到 256 |
| IA3(Inter-layer Adapter, 层间适配器) | 每层输出的对角缩放向量 | 极小 | 比 LoRA 参数更少 |
| Prompt Tuning(提示调优) | 输入层前的软提示向量 | 极小 | 只适合超大基座 |
| Prefix Tuning(前缀调优) | 每层注意力前的前缀向量 | 小 | 比 Prompt Tuning 表达力强 |
| P-Tuning / v2(连续提示嵌入,Prompt Generator 提出) | 连续提示嵌入 | 小 | 中文社区常用,v2 小模型也有效 |
| BitFit(仅 bias 项微调) | 只训练 bias 项 | 极小 | 最简单粗暴的 PEFT |
| VeRA(Vector-based random matrix adaptation, 基于随机向量的矩阵适应) | 固定随机矩阵 + 缩放向量 | 极小 | 不同秩共享随机矩阵 |
| BoT(Basis of Training, 训练基) | 固定正交基 + 学习系数 | 小 | 系数更新,基不更新 |
| GaLore(Gradient Low-Rank Projection, 梯度低秩投影) | 全参数,但梯度低秩压缩 | 全参 | 省显存做 Full FT |
| PiSSA(Principal components SLoRA, 主成分 SLoRA) | 用 W 的主成分初始化 LoRA | 小 | 数据效率更高 |
| SSLoRA(SVD-based LoRA, 基于 SVD 的 LoRA) | SVD 初始化 LoRA | 小 | 与 PiSSA 思路相近 |
| OFT(Orthogonal Fine-Tuning, 正交微调) | 正交方向更新权重 | 全参 | 保持梯度流稳定,效果接近 Full FT |
2.3 LoRA(Low-Rank Adaptation, 低秩适应)详解
LoRA 是微调领域出镜率最高的词,必须拆开讲透。
原理:不直接改预训练权重 W,而是学一个低秩增量:
1
2
3
4
5
| W' = W + ΔW = W + B · A
W: d×d (冻结)
A: r×d (随机初始化,如高斯)
B: d×r (零初始化)
r ≪ d (秩,rank)
|
前向传播时 B·A 与 W 并行相加,训练只更新 A、B,显存和速度都省了。初始时 B=0,所以 LoRA 起步等价于原模型,训练稳定。
LoRA 相关高频名词:
| 名词 | 解释 |
|---|
| rank(秩, r) | 低秩矩阵的秩,越大表达能力越强、参数越多。常用 8 / 16 / 32 / 64,任务越难开越大 |
| alpha(缩放系数, α) | 缩放系数,实际生效的缩放是 α/r。通常取 α = 2r 或 α = r |
| target_modules(目标层) | 哪些层注入 LoRA:q_proj、k_proj、v_proj、o_proj、gate_proj、up_proj、down_proj;写 all-linear 表示所有线性层 |
| lora_dropout(LoRA Dropout) | LoRA 分支的 dropout,防过拟合,常用 0.05 |
| lora_A / lora_B(低秩分解矩阵) | 低秩分解的两个矩阵(A 随机初始化,B 零初始化) |
| 合并(Merge & Unload, 合并卸载) | 训练完把 W + B·A 合并回原权重,推理零开销 |
| 热切换(Hot-swap, 热交换) | 不合并,推理时按请求动态挂载不同 LoRA(S-LoRA / vLLM 的 LoRA 支持) |
| adapter(适配器, Adapter) | 训练完的 LoRA 权重文件,通常只有几十 MB |
LoRA 的优缺点:
- 优点:显存省、速度快、一个基座挂多个领域 adapter、可合并回原模型;
- 缺点:多任务叠加时多个 LoRA 合并可能互相干扰(“LoRA 打架”),对基座能力改动过大时不如 Full FT。
2.4 QLoRA(Quantized LoRA, 量化 LoRA)
QLoRA = 4bit 量化的冻结基座 + 全精度 LoRA。核心组件:
| 名词 | 解释 |
|---|
| NF4(NormalFloat 4-bit, 正态浮点 4bit) | 为"正态分布的权重"设计的 4bit 数据类型 |
| Double Quantization(双重量化) | 量化常数本身再量化一次,再省约 0.4bit/参数 |
| Paged Optimizer(分页优化器) | 利用 CPU 内存分页,吸收显存峰值 |
| Dequantization on the fly(即时反量化) | 前向时临时把 4bit 权重反量化到 bf16 参与计算 |
效果:65B 模型微调可以塞进单张 48GB 卡(QLoRA 论文的招牌结果)。现在 LLaMA-Factory 里 quantization_bit: 4 + bfloat16 就是 QLoRA。
2.5 其他值得知道的变体(一句话版)
- DoRA(Weight-Decomposed LoRA):把权重拆成"幅度 m × 方向 v",LoRA 只学方向、幅度单独学,微调后的权重分布更接近 Full FT,效果通常优于 LoRA;
- AdaLoRA(Adaptive LoRA):根据每个矩阵梯度奇异值的重要性动态分配秩预算,还能剪掉无用的秩;
- iLoRA(improved LoRA):改进 A/B 初始化方式,使秩 256 的 LoRA 也能稳定训练;
- IA3(Inter-layer Adapter):不学矩阵,只学每个层输出通道上的对角缩放向量,参数比 LoRA 还少一个量级;
- GaLore(Gradient Low-Rank Projection):训练的是全参数,但把梯度投影到低秩空间再更新,省约 50%+ 优化器显存;
- PiSSA(Principal components SLoRA):用 SVD 把预训练权重 W 的主成分作为 LoRA 的初始值,小数据下收敛更快、效果更好;
- SSLoRA(SVD-based LoRA):与 PiSSA 类似,用 SVD 初始化 LoRA;
- OFT(Orthogonal Fine-Tuning, 正交微调):把权重更新限制在正交方向(极分解),保持损失曲面和梯度流稳定,小数据上接近 Full FT;
- BoT(Basis of Training, 训练基):固定一组正交基,只学习组合系数;
- MoELoRA(Mixture-of-Experts LoRA, 混合专家 LoRA):多个 LoRA 当"专家",加一个路由器按需选择,一个 adapter 服务多领域;
- S-LoRA(Serving LoRA, LoRA 推理服务系统):推理侧系统,LoRA 感知的 KV Cache + 适配器池化,让单卡同时服务几十个 LoRA;
- R-LoRA / VLoRA(Rank-restricted / Virtual LoRA, 秩受限 / 虚拟 LoRA):进一步压参数;
- LongLoRA(长上下文 LoRA):针对长上下文微调,用块状注意力掩码降低长序列训练成本;
- NTK / YaRN / PI(Position Interpolation, 位置插值):长上下文扩展的 RoPE 缩放方案。
2.6 提示类 PEFT:Prompt / Prefix / P-Tuning
| 名词 | 解释 |
|---|
| Prompt Tuning(提示调优) | 在输入 embedding 前接一段可训练的连续向量(软提示, soft prompt),只有输入层有参数 |
| Prefix Tuning(前缀调优) | 每一层 Transformer 的注意力 KV 前都拼上可训练的前缀向量,表达力更强 |
| P-Tuning(连续提示) | 用一个 prompt generator 把软提示编码成序列,接在输入前(面向中文大模型) |
| P-Tuning v2 | 每层都有提示参数,100M 级小模型也有效,中文社区微调小模型常用 |
特点:参数极少、可热插拔;但对小模型(7B 以下)效果通常不如 LoRA,需要超大基座才能发挥。
2.7 不同微调方法的计算资源需求(显存速查)
先记住一笔"显存账"(全参训练,每个参数约 1618 字节:bf16 权重 2B + bf16 梯度 2B + Adam 优化器状态 8B + fp32 主权重 4B,再加激活值)。下表按 **seq_len 2k4k、batch=1 + 梯度累积、开启 FlashAttention / 激活重计算** 估算:
| 方法 | 7B 模型 | 13B 模型 | 70B 模型 |
|---|
| Full FT(bf16 + AdamW 全参) | ≈120GB:8×A100-40G 或 4×A100-80G(ZeRO-3) | ≈220GB:8×A100-40G | ≈1.1TB:16×A100-80G,或 8×A100-80G + Offload(慢) |
| Full FT + ZeRO-Offload(优化器状态卸载到 CPU) | 4×A100-80G + 128GB 以上 CPU 内存 | 8×A100-80G + 大内存 | 8×A100-80G + NVMe(ZeRO-Infinity,非常慢) |
| LoRA(bf16 基座冻结) | ≈20GB:24GB 单卡(3090/4090) | ≈32GB:48GB 单卡(A6000)或 2×24GB(FSDP/ZeRO-3) | ≈150GB:4×A100-40G(ZeRO-3) |
| QLoRA(4bit 基座冻结) | ≈10GB:16GB 单卡即可 | ≈18GB:24GB 单卡(3090/4090) | ≈48GB:48GB 单卡(A100-48G/A6000),24GB 双卡 + offload |
| GaLore(全参 + 梯度低秩压缩) | ≈60GB:2×A100-40G 或 4×24GB | ≈120GB:4×A100-40G | ≈600GB:8×A100-80G + Offload |
对齐阶段的资源需求(PPO 是"四模型俱乐部",最吃显存):
| 阶段 | 同时加载的模型 | 7B(LoRA 版)参考 | 说明 |
|---|
| SFT(QLoRA) | 基座 ×1 | 16GB 单卡 | 见上表 |
| DPO / SimPO / ORPO | 策略 + 参考模型 ×2 | 24GB 单卡(LoRA 策略 + 冻结参考) | 约为 SFT 的 1.5~2 倍 |
| GRPO | 策略 + 参考 ×2(无 Critic) | 2×24GB / 48GB | 比 PPO 省一个 Critic |
| PPO(RLHF) | 策略 + 参考 + Reward Model + Critic ×4 | 8×A100-80G(带 offload) | 显存需求最高,通常需多卡集群 |
注意:以上为粗略参考。序列长度(cutoff_len)、batch size、激活是否重计算都会显著影响实际显存;70B 级别的 Full FT 对普通团队基本不现实,社区微调 7B~14B 主流是 QLoRA / LoRA,70B 用 QLoRA 双卡或 LoRA 四卡。
三、SFT:监督微调
3.1 基本概念
| 名词 | 解释 |
|---|
| SFT(Supervised Fine-Tuning, 监督微调) | 用 (输入, 标准回答) 成对数据,以 teacher forcing 方式训练模型生成标准回答 |
| Instruction Tuning(指令微调) | SFT 的一种数据组织形式:数据写成"指令 → 回答",教模型遵循指令。Alpaca 论文带火了这个词 |
| Instruction Data(指令数据) | SFT 用的训练数据,常见来源:人工撰写、模型合成、开源数据集(Alpaca、Dolly、OpenOrca、ShareGPT 等) |
| Multi-turn(多轮对话) | 一条样本包含多组 user/assistant 轮次,训练模型维持上下文连贯 |
| System Prompt(系统提示) | 设定模型角色/行为边界的提示,训练时通常放在对话最前 |
3.2 数据格式(三种最常见)
Alpaca 格式(单轮,Stanford Alpaca 带火):
1
| {"instruction": "写一个快排", "input": "用 Python", "output": "def quick_sort(...)"}
|
ShareGPT 格式(多轮,来自 ShareGPT 抓取的真实对话):
1
2
3
4
| {"conversations": [
{"from": "human", "value": "介绍一下 LoRA"},
{"from": "gpt", "value": "LoRA 是低秩适应……"}
]}
|
ChatML 格式(多轮,角色化,OpenAI 风格,现在最主流):
1
2
3
4
5
6
| system
你是一个助手
user
介绍一下 LoRA
</think>
LoRA 是低秩适应……
|
相关名词:
| 名词 | 解释 |
|---|
| Chat Template(对话模板) | 把 (system, user, assistant) 序列拼成特定模型要求的字符串格式的模板,不同模型(Qwen/Llama/GLM…)模板不同,用错模板效果会崩 |
| Special Tokens(特殊标记) | 如 ``、<bos>、<eos>、<pad>,标记对话边界和序列结束 |
| loss mask(损失掩码, Loss Masking) | 只对 assistant 回答部分计算 loss,prompt 部分 label 置为 -100(不训练模型"预测用户说的话")。这是 SFT 的关键细节 |
| Packing(拼接打包) | 把多条短样本拼进一条 max_len 序列,提升 GPU 利用率(注意加 attention 隔离,LLaMA-Factory 的 neat_packing) |
| Padding(填充) | 把 batch 内不同长度的样本 pad 到同长,pad 位置不计 loss |
3.3 SFT 常用超参数速查
| 超参 | 典型值 | 说明 |
|---|
lr(learning rate, 学习率) | LoRA: 1e-4 ~ 2e-4;Full FT: 1e-6 ~ 5e-6 | SFT 学习率普遍比预训练小一个量级以上 |
batch_size(批大小) | 有效 batch 16 ~ 128 | 显存不够时用梯度累积凑 |
epoch(轮次) | 1 ~ 3 | 指令数据量不大时 2~3 轮常见,多了容易过拟合 |
warmup_ratio(预热比例) | 0.03 | 学习率预热比例 |
lr_scheduler_type(学习率调度器) | cosine | 余弦退火最常用 |
max_seq_len / cutoff_len(最大序列长度) | 2048 ~ 32768 | 序列截断长度,超长样本被截断 |
rank / alpha(秩 / 缩放系数) | 16 / 32 | LoRA 秩与缩放 |
target_modules(目标层) | all-linear | 覆盖 q/k/v/o/gate/up/down |
bf16(bfloat16, 16bit 脑浮点) | true | 混合精度训练 |
gradient_checkpointing(梯度检查点 / 激活重计算) | true | 用计算换显存(省激活值显存,慢 ~20%) |
经验法则:SFT 的效果 70% 看数据、20% 看超参、10% 看玄学。数据质量 > 数据数量是社区共识。
四、对齐与强化学习(RLHF 家族)
让模型"有用、诚实、无害"(helpful, honest, harmless)的过程统称对齐(Alignment, 对齐)。
4.1 RLHF 三件套(InstructGPT 经典流水线)
1
| SFT 模型 → 训练 Reward Model (RM) → PPO 强化学习
|
| 名词 | 解释 |
|---|
| RLHF(Reinforcement Learning from Human Feedback, 基于人类反馈的强化学习) | 人类标注偏好 → 学奖励模型 → PPO 优化策略 |
| Preference Data(偏好数据) | 同一 prompt 的两个回答 (y_w 好, y_l 差) 的比较标注 |
| Reward Model / RM(奖励模型) | 由 SFT 模型加一个标量头微调而来,给回答打分;训练用 Bradley-Terry 模型 |
| PPO(Proximal Policy Optimization, 近端策略优化) | RLHF 最常用的 RL 算法。注意:PPO 训练时同时加载 4 个模型——策略模型、参考模型(Reference, 算 KL 用)、奖励模型、价值模型(Critic),显存需求最高 |
| Policy(策略, π) | 被训练的生成模型本身,强化学习视角下"动作"就是它生成的 token 序列 |
| Reference Model(参考模型) | 冻结的 SFT 模型,计算 KL 散度约束策略别离它太远 |
| KL Penalty(Kullback-Leibler Divergence, KL 散度惩罚) | 限制策略模型相对参考模型的偏离,防止"讨好 RM"说胡话 |
| GAE(Generalized Advantage Estimation, 广义优势估计) | Critic 计算优势函数的标准方法 |
| Critic / Value Model(价值模型) | 预测"某个状态未来能拿多少奖励"的辅助模型,PPO 专用,GRPO 去掉 |
| Reward Hacking(奖励黑客 / 刷奖励漏洞) | 策略找到 RM 的漏洞刷分(如反复输出某类句式),RM 打高分但人类觉得差 |
4.2 DPO 家族(免 RL 的偏好优化)
| 名词 | 解释 |
|---|
| DPO(Direct Preference Optimization, 直接偏好优化) | 把 RLHF 的目标函数数学变换后,直接用偏好对做分类式训练,不需要 RM、不需要 PPO,只要 SFT 模型 + 偏好数据,显存需求约为 PPO 的 1/4。目前开源社区对齐的首选 |
| IPO(Identity Preference Optimization, 恒等偏好优化) | 修正 DPO 在过参数化时的过拟合问题 |
| KTO(Kahneman-Tversky Optimization, 卡尼曼-特沃斯基优化) | 基于前景理论,不需要成对偏好数据,只需单条回答的"好/坏"二值标注 |
| ORPO(Odds Ratio Preference Optimization, 赔率比偏好优化) | 把 SFT 和偏好对齐合并成一个阶段完成,省掉 SFT 步骤 |
| SimPO(Simple Preference Optimization, 简单偏好优化) | 用长度归一化的平均对数概率当奖励,不需要参考模型 |
| GRPO(Group Relative Policy Optimization, 组相对策略优化) | DeepSeekMath 提出:对同一 prompt 采样一组回答,用组内奖励均值/标准差归一化得到优势,不需要 Critic 模型,省掉 PPO 的 1/4 显存,是 R1 类推理模型的核心算法 |
| Best-of-N Sampling(N 选 1 采样) | 推理期策略:采样 N 个回答,用 RM 选分数最高的那个输出(不用训练,直接涨分) |
| Online / Offline RLHF(在线 / 离线 RLHF) | online:边生成边标注边训练(迭代快但贵);offline:用固定数据集训练(DPO 即 offline) |
4.3 AI 反馈与可验证奖励
| 名词 | 解释 |
|---|
| RLAIF(RL from AI Feedback, 基于 AI 反馈的强化学习) | 用 AI(如 GPT-4)代替人类标注偏好/奖励,便宜且可规模化 |
| Constitutional AI(宪法式 AI) | Anthropic 提出:给模型一组"宪法原则",让它自我批评、自我修订生成训练数据 |
| RLVR(RL with Verifiable Rewards, 基于可验证奖励的强化学习) | 数学/代码等答案可以程序化判对错,用规则奖励代替 RM,DeepSeek-R1 的核心训练手段 |
| PRM(Process Reward Model, 过程奖励模型) | 对推理过程的每一步打分 |
| ORM(Outcome Reward Model, 结果奖励模型) | 只对最终结果打分的奖励模型,区别于 PRM |
4.4 对齐方法怎么选(速查表)
| 场景 | 推荐 |
|---|
| 显存紧张、快速出效果 | DPO / SimPO |
| 只有单条好坏标注 | KTO |
| 不想单独跑 SFT | ORPO |
| 推理模型训练(数学/代码) | GRPO + RLVR |
| 追求上限、资源充足 | PPO + 迭代式 online RLHF |
五、数据相关名词
| 名词 | 解释 |
|---|
| 数据质量 > 数据数量 | 社区共识:1 万条高质量指令数据常胜 100 万条低质数据 |
| Deduplication(去重) | 训练前去重,常用 MinHash / SimHash / SimCLR 相似度,重复数据会导致过拟合 |
| Data Contamination(数据污染) | 训练集里混入了评测集(benchmark)题目,导致刷分失真;发布模型前的必查项 |
| Data Mixing(数据混合) | 多源/多领域数据按比例混合,比例(recipe, 配方)是调模型的关键旋钮 |
| Curriculum Learning(课程学习) | 按难度从易到难喂数据 |
| Oversampling(过采样) | 对稀缺但重要的领域数据提高采样权重 |
| Self-Instruct(自指令) | 用模型自己生成指令数据(种子 → 自举扩充),Alpaca 数据的生成方式 |
| Evol-Instruct(进化指令) | 对已有指令做"进化"(加约束、复杂化)提升数据难度,WizardLM 的数据生成方式 |
| Distillation(蒸馏) | 用大模型(教师)的输出训练小模型(学生);SFT 里大量用 GPT-4 级模型生成回答即蒸馏 |
| Synthetic Data(合成数据) | 用 LLM 批量生成的训练数据,成本低但要注意同质化(model collapse, 模型坍缩风险) |
| Data Flywheel(数据飞轮) | 模型上线 → 收集真实对话 → 清洗筛选 → 再训练 → 更强的模型 |
| UltraFeedback / HH-RLHF(Helpful & Harmless, 有用与无害) | 常用的开源偏好数据集(DPO 训练常用) |
| Alpaca / Dolly / OpenOrca / CodeUltraChat | 常用开源 SFT 数据集 |
| Token / Tokenizer / Vocabulary(词元 / 分词器 / 词表) | Token:模型的最小处理单元(子词)。Tokenizer:文本 ↔ token 序列的编码器(BPE, Byte Pair Encoding 字节对编码为主)。词表:token 集合,常见 32k~256k |
| Context Window(上下文窗口) | 模型一次能处理的最大 token 数(4k / 8k / 128k / 1M) |
六、训练过程与通用超参名词
| 名词 | 解释 |
|---|
| Epoch(轮次) | 整个训练数据集完整过一遍 |
| Batch Size(批大小) | 一次更新参数用的样本数 = per_device_batch × 卡数 × 梯度累积步数 |
| Gradient Accumulation(梯度累积) | 显存不够时,多次前向反向累积梯度再更新一次,等效大 batch |
| Learning Rate(学习率, lr) | 每步参数更新幅度,最敏感的超参 |
| Warmup(预热) | 训练初期学习率从 0 线性升到峰值,防初期不稳定 |
| LR Scheduler(learning rate scheduler, 学习率调度器) | cosine / linear / constant,决定学习率随步数变化 |
| Optimizer(优化器) | AdamW 是标配;bnb.optim 是量化训练配套的省显存版本 |
| Weight Decay(权重衰减) | L2 正则,LLM 微调中常设 0 或很小(0.01) |
| Gradient Clipping(梯度裁剪, max_grad_norm) | 把梯度范数截断(常用 1.0),防梯度爆炸 |
| Mixed Precision(混合精度) | 用 fp16/bf16 算前向反向,fp32 存主参数。bf16 比 fp16 动态范围大,不易溢出,A100/H100 首选 bf16 |
| FP8(8-bit Floating Point, 8bit 浮点) | H100 支持(E4M3/E5M2),训练/推理进一步提速 |
| Gradient Checkpointing(激活重计算) | 不存中间激活值,反向时重算,省显存换 ~20% 速度 |
| FlashAttention(闪速注意力) | IO 感知的精确注意力实现(FA1/FA2/FA3),省显存 + 提速,长序列必备 |
| Checkpoint(检查点) | 训练中定期保存的模型权重快照;save_steps / save_total_limit 控制保存频率与数量 |
| Early Stopping(早停) | 验证集 loss 不再下降就停止,防过拟合 |
| train loss / val loss(训练损失 / 验证损失) | val loss 先降后升 = 过拟合信号 |
| Overfitting(过拟合) | 训练集表现好、泛化差;SFT 小数据时极易发生 |
| Underfitting(欠拟合) | 学习率太小/轮次太少,连训练集都没学好 |
| Catastrophic Forgetting(灾难性遗忘) | 微调后模型忘掉预训练学的通用能力,是 Full FT 的主要风险,PEFT 天然缓解 |
| Generalization(泛化能力) | 在未见过的数据上的表现 |
| Loss Spike(损失尖峰) | 训练中 loss 突然跳高再回落,常见原因:数据坏样本、lr 过大、数值溢出 |
| Trainer(训练器) | HF 的训练循环封装(Trainer / SFTTrainer),封装数据加载、优化、保存、日志 |
七、分布式训练与显存优化
| 名词 | 解释 |
|---|
| DDP(Distributed Data Parallel, 分布式数据并行) | 每卡一份完整模型副本,各自算梯度后 all-reduce 同步。最简单,显存不省 |
| ZeRO(Zero Redundancy Optimizer, 零冗余优化器) | 把优化器状态/梯度/参数切分到各卡:Stage 1 切优化器状态(省 ~4 倍),Stage 2 再切梯度,Stage 3 连参数也切(省最多,通信代价最大) |
| ZeRO-Offload / ZeRO-Infinity | 把优化器状态/参数卸载到 CPU 内存 / NVMe 磁盘,单卡也能训大模型(慢) |
| FSDP(Fully Sharded Data Parallel, 全分片数据并行) | PyTorch 原生的 ZeRO-3 等价物,HF Transformers 默认分布式方案 |
| TP(Tensor Parallelism, 张量并行) | 把一层内的权重矩阵切成块,多卡同时算一层(Megatron-LM 提出),卡间通信频繁,适合机内 NVLink |
| PP(Pipeline Parallelism, 流水并行) | 不同层放不同卡,像流水线一样接力;有"气泡"空闲问题 |
| EP(Expert Parallelism, 专家并行) | MoE 模型里把不同专家放不同卡 |
| CP(Context Parallelism, 上下文/序列并行) | 把长序列切到多卡上算注意力,长上下文训练用 |
| Mixed Parallelism(混合并行) | 实际大训练是组合拳,如 TP2 × PP2 × DP8 × ZeRO3 |
| Megatron-LM | NVIDIA 的 TP/PP 训练框架 |
| All-Reduce / All-Gather(全归约 / 全聚合) | 分布式通信原语:同步梯度 / 聚合参数 |
| NCCL(NVIDIA Collective Communications Library, 集合通信库) | NVIDIA 的 GPU 集合通信库 |
显存账(全参训练,每参数):参数 2B(bf16)+ 梯度 2B + Adam 状态 12B(一阶/二阶各 4B fp32)+ 主权重 4B(fp32)≈ 16~18B/参数。这就是为什么 7B 全参训练要 ~140GB,不同方法的资源需求汇总见 2.7 节。
八、量化(Quantization, 量化)
| 名词 | 解释 |
|---|
| Quantization(量化) | 把权重/激活从 fp16/bf16 压到 INT8 / INT4 / FP8,省显存、提速 |
| PTQ(Post-Training Quantization, 训练后量化) | 模型训完再压,不用重训,最常用 |
| QAT(Quantization-Aware Training, 量化感知训练) | 训练时模拟量化误差,精度损失更小但要重训 |
| GPTQ(GPT Quantization, GPT 量化) | 基于 Hessian 信息的一次性 4bit 权重量化(逐列),vLLM 原生支持 |
| AWQ(Activation-aware Weight Quantization, 激活感知权重量化) | 保护对激活影响大的"显著权重",INT4 精度通常优于 GPTQ,推理速度快 |
| SmoothQuant(平滑量化) | 把激活的量化难度"迁移"给权重,实现 W8A8 混合精度推理 |
| GGUF(GGML Unified Format, GGML 统一格式) | llama.cpp 的权重格式,支持 Q4_K_M / Q5_K_M 等 K 系列量化,Ollama / LM Studio 的底层 |
| K-Quants(K 系列量化) | GGUF 里的混合精度分块量化方案(如 Q4_K_M:大部分 4bit + 关键层更高精度) |
| NF4 / Double Quantization | QLoRA 用的 4bit 正态浮点格式与双重量化(见 2.4) |
| bitsandbytes(bnb) | PyTorch 量化库,LLaMA-Factory 的 QLoRA 底层 |
| W4A16 / W8A8 / W4A8(Weight/Activation 位宽) | 权重/激活位宽组合记法:W4A16 = 权重 4bit、激活 16bit |
| FP8(E4M3 / E5M2) | H100 原生的 8bit 浮点,训练/推理均可用,精度损失极小 |
| 量化掉点 | 量化后的精度损失;一般 W8 几乎无感,W4 看数据和算法,关键任务建议评测后再上线 |
选型速查:
| 场景 | 方案 |
|---|
消费级显卡(1624GB)跑 14B70B | GGUF(llama.cpp / Ollama)或 AWQ(vLLM) |
| 数据中心推理 | AWQ / FP8(H100) |
| 微调 | QLoRA(4bit 基座) |
| 极致精度 | bf16 不量化 |
九、评测(Evaluation, 评测)
9.1 自动指标
| 名词 | 解释 |
|---|
| PPL(Perplexity, 困惑度) | 模型对文本的"惊讶程度",exp(交叉熵);预训练/基座模型的核心指标,越低越好 |
| EM(Exact Match, 精确匹配)/ F1 | 精确匹配 / 词级 F1,抽取式问答(SQuAD 类)常用 |
| Pass@k(k 次采样通过率) | 代码任务:生成 k 个候选,至少 1 个通过测试用例的比例(HumanEval 标配) |
| BLEU(Bilingual Evaluation Understudy, 双语评估替补)/ ROUGE(Recall-Oriented Understudy for Gisting Evaluation, 召回导向的摘要评估) | 翻译/摘要类指标(与参考译文比 n-gram 重叠),LLM 时代用得少了 |
| Accuracy(准确率) | 选择题/判断题正确率,MMLU 等客观题 benchmark 的指标 |
9.2 常用 Benchmark(基准测试)
| 基准(英文全称) | 考什么 |
|---|
| MMLU(Massive Multitask Language Understanding, 大规模多任务语言理解) | 57 个学科的综合知识选择题(最经典的"高考") |
| C-Eval / CMMLU(Chinese Evaluation / Chinese MMLU, 中文评测) | 中文版 MMLU |
| GSM8K(Grade School Math 8K, 小学数学 8 千题) | 小学数学应用题,考推理 |
| MATH(竞赛数学) | 竞赛级数学题 |
| ARC(AI2 Reasoning Challenge, AI2 推理挑战)/ HellaSwag / Winogrande | 常识推理 |
| BBH(BIG-Bench Hard, BIG-bench 难题子集) | 高难度推理任务子集 |
| HumanEval / MBPP(Mostly Basic Python Problems, 基础 Python 题) | Python 代码生成(Pass@1) |
| BigCodeBench / LiveCodeBench / SWE-bench | 更难的代码任务 / 真实 GitHub issue 修复 |
| IFEval(Instruction Following Evaluation, 指令遵循评测) | “用 JSON 输出"“至少 300 字"这类硬约束 |
| TruthfulQA(真理性问答) | 考模型会不会一本正经胡说 |
| MT-Bench(Multi-Turn Benchmark, 多轮对话基准) | 80 道两轮主观题,GPT-4 当裁判打分(1~10 分) |
| AlpacaEval / Arena-Hard-Auto | LLM-as-a-Judge 的自动评测框架(胜率对比基座) |
| LMSYS Chatbot Arena(LMArena) | 真人匿名对战 + Elo 排名的"群众评测”,行业风向标 |
| HELM(Holistic Evaluation of Language Models, 语言模型整体评测)/ BIG-bench | 大规模综合评测框架 |
9.3 评测方法名词
| 名词 | 解释 |
|---|
| LLM-as-a-Judge(大模型当裁判) | 用强模型(GPT-4/Claude/Qwen-Max)当裁判给回答打分或两两对比;便宜、可规模化,但有位置偏差、自我偏好等已知偏差 |
| Elo Rating(伊洛评级) | 借鉴国际象棋的对抗排名算法,Arena 类评测的核心 |
| Win Rate(胜率) | 与基座模型对答,裁判判定获胜的比例 |
| lm-eval-harness(评测框架) | EleutherAI 的开源评测框架,一条命令跑 MMLU/GSM8K/HumanEval 等 |
| EvalPlus | HumanEval/MBPP 的加强版(更多测试用例,过滤"过拟合测试"的代码) |
| 刷分 / 应试能力(Benchmark Overfitting, 基准过拟合) | 模型针对 benchmark 风格过拟合的现象;真实体验与跑分可能脱节 |
十、推理与部署(Inference & Serving, 推理与服务)
10.1 解码与采样参数
| 名词 | 解释 |
|---|
| KV Cache(键值缓存) | 缓存已算过的 Key/Value,避免每生成一个 token 重算全部注意力;长上下文时是显存大头 |
| Greedy Decoding(贪心解码) | 每步选概率最大的 token,确定但容易复读 |
| Beam Search(束搜索) | 保留 top-beam_width 条路径,质量高但慢且多样性差 |
| Sampling(采样) | 按概率分布随机选 token,多样性好 |
| temperature(温度) | 控制分布陡峭程度:0 = 贪心,越大越发散(常用 0.6~1.0) |
| top_k(Top-K 采样) | 只在概率最高的 k 个 token 里采样 |
| top_p / Nucleus Sampling(核采样) | 在累积概率达到 p 的最小 token 集里采样(常用 0.8~0.95),比 top_k 自适应 |
| min_p(最小概率阈值) | 过滤概率低于"最大概率 × min_p"的 token,新一代采样参数 |
| repetition penalty(重复惩罚) | 惩罚已出现过的 token,防复读 |
| frequency / presence penalty(频率 / 存在惩罚) | OpenAI 风格:按出现次数 / 是否出现施加惩罚 |
| Stop Tokens(停止标记) | 遇到 <eos>、`< |
10.2 推理引擎
| 名词 | 解释 |
|---|
| llama.cpp(纯 C/C++ 轻量推理引擎) | GGUF 格式的鼻祖,支持 CPU / Apple Silicon(Metal)/ CUDA / Vulkan,消费级硬件(笔记本、Mac)本地跑大模型的首选;main 命令开箱即用,也是 Ollama / LM Studio 的底层 |
| vLLM(Virtual LLM, 虚拟 LLM) | 最流行的数据中心级开源推理引擎,核心是 PagedAttention(把 KV Cache 分页管理,像操作系统虚拟内存,消除显存碎片)+ Continuous Batching(动态批处理:新请求随时插入,不等整批),吞吐是朴素实现的数倍 |
| SGLang(Structured Generation Language, 结构化生成语言) | 高速推理引擎,核心 RadixAttention(前缀树复用 KV Cache),对多轮/结构化生成友好 |
| TensorRT-LLM(NVIDIA 张量推理库) | NVIDIA 的极致优化推理引擎 |
| TGI(Text Generation Inference, 文本生成推理服务) | HuggingFace 官方推理服务 |
| Continuous Batching(连续批处理) | 请求级动态组批,显著提升并发吞吐 |
| Speculative Decoding(投机解码) | 小模型(draft, 草稿模型)快速猜一串 token,大模型一次性并行验证,无偏加速 2~3 倍 |
| Prefix Caching(前缀缓存) | 相同前缀(system prompt / few-shot)的 KV Cache 复用,省重复计算 |
| Chunked Prefill(分块预填充) | 把长 prompt 的 prefill 分块,与 decode 交错,降低首 token 延迟抖动 |
选型速查:
| 场景 | 方案 |
|---|
| 本地 / 笔记本 / Mac / 纯 CPU | llama.cpp(GGUF)→ Ollama / LM Studio 封装 |
| 数据中心高并发服务 | vLLM / SGLang / TensorRT-LLM |
| 多 LoRA 动态服务 | vLLM(LoRA 支持)/ S-LoRA |
10.3 性能指标
| 名词 | 解释 |
|---|
| TTFT(Time To First Token, 首 token 延迟) | prefill 阶段耗时,长 prompt 敏感 |
| TPOT / ITL(Time Per Output Token / Inter-Token Latency, 每输出 token 耗时 / token 间隔) | decode 阶段耗时,决定"打字机速度” |
| Throughput(吞吐量) | 系统每秒产出的总 token 数,并发场景的核心指标 |
| Concurrency(并发) | 同时处理的请求数;并发↑吞吐↑但单请求延迟也↑ |
| Prefill / Decode(预填充 / 解码)两阶段 | prefill:并行处理整个 prompt(compute-bound, 计算受限);decode:逐 token 生成(memory-bound, 访存受限),优化策略完全不同 |
| 量化推理(Quantized Inference) | 用 GPTQ/AWQ/GGUF 权重推理,显存↓吞吐↑ |
| Merge & Unload(合并卸载) | LoRA 训练完合并回基座再部署,推理零开销 |
| LoRA 热加载(LoRA Hot-loading) | vLLM / S-LoRA 支持不重启服务切换 adapter |
10.4 常见部署形态
| 名词 | 解释 |
|---|
| Ollama | 本地模型运行器(基于 llama.cpp + GGUF),一条命令拉模型跑服务 |
| LM Studio / GPT4All | 桌面端本地模型 GUI(底层同为 llama.cpp) |
| OpenWebUI / text-generation-webui | 开源 Web 聊天前端 |
| API Server(API 服务) | 以 OpenAI 兼容 API 形式暴露模型(vLLM --api-key),方便接入任何框架 |
十一、工具链名词
| 工具(英文全称) | 干什么用 |
|---|
| HuggingFace Transformers | 模型加载/推理/训练基础库 |
| PEFT(Parameter-Efficient Fine-Tuning, 参数高效微调库) | HF 官方 PEFT 库,LoRA/QLoRA 的底层实现 |
| TRL(Transformer Reinforcement Learning, 变换器强化学习库) | HF 强化学习库:SFTTrainer / DPOTrainer / PPOTrainer / GRPOTrainer |
| LLaMA-Factory | 一站式微调框架(SFT/DPO/PPO/KTO + 量化 + 评测 + WebUI),中文社区最常用 |
| Unsloth | 显存/速度优化的微调库,2~5× 提速,消费卡友好 |
| Axolotl | 配置驱动的开源微调框架 |
| ms-swift(ModelScope SWIFT, 魔搭 SWIFT) | 阿里魔搭的微调框架,中文模型生态支持好 |
| OpenRLHF | 基于 Ray 的 RLHF 框架,支持 PPO/GRPO/DPO 大规模训练 |
| DeepSpeed | 微软分布式训练库(ZeRO 的出处) |
| FSDP(Fully Sharded Data Parallel, 全分片数据并行) | PyTorch 原生全分片数据并行 |
| Megatron-LM | TP/PP 大规模预训练框架 |
| llama.cpp / vLLM / SGLang / TensorRT-LLM | 推理引擎(见第十节) |
| lm-eval-harness | 标准化 benchmark 评测 |
| WandB(Weights & Biases, 权重与偏差)/ TensorBoard / SwanLab | 训练指标可视化(loss 曲线、超参记录) |
| HuggingFace Hub | 模型/数据集托管与分发(from_pretrained) |
| ModelScope(魔搭) | 阿里开源模型/数据集社区 |
十二、高频概念速查(一句话版)
| 名词(英文全称) | 一句话解释 |
|---|
| Transformer(变换器) | LLM 的骨干网络:注意力 + FFN 堆叠 |
| Attention(注意力) | “当前 token 看上下文哪些 token"的机制;MHA(Multi-Head Attention, 多头注意力)/ GQA(Grouped-Query Attention, 分组查询注意力)/ MQA(Multi-Query Attention, 多查询注意力),后两者是省 KV Cache 的变体 |
| FFN / MLP(Feed-Forward Network 前馈网络 / Multi-Layer Perceptron 多层感知机) | Transformer 块里的逐 token 前馈层,模型"知识"主要存这里 |
| RoPE(Rotary Position Embedding, 旋转位置编码) | 主流相对位置编码,长上下文扩展(PI/NTK/YaRN)都作用于它 |
| RMSNorm(Root Mean Square Normalization, 均方根归一化) | 简化版 LayerNorm,LLaMA 等主流模型使用 |
| SwiGLU(Swish-Gated Linear Unit, 门控线性单元) | FFN 里常用的激活函数变体 |
| MoE(Mixture of Experts, 混合专家) | 多个 FFN 专家 + 路由器,每个 token 只激活 top-k 专家,参数量大但激活量小(Mixtral / Qwen3-MoE) |
| Hallucination(幻觉) | 模型一本正经地编造事实 |
| Alignment(对齐) | 让模型行为符合人类意图与价值观的整套技术(SFT + 偏好优化 + 安全) |
| Red Teaming(红队测试) | 主动攻击模型找安全漏洞(越狱、有害输出) |
| Jailbreak(越狱) | 绕过安全限制的提示词攻击 |
| RAG(Retrieval-Augmented Generation, 检索增强生成) | 先检索资料再生成;与微调互补——RAG 补知识,微调补能力/风格 |
| Prompt Engineering(提示工程) | 设计提示词让基座模型表现更好(system prompt / few-shot / CoT) |
| CoT(Chain of Thought, 思维链) | “让我们一步步思考”,提升推理能力;o1/R1 类模型将其内化为长推理 |
| Token Budget(词元预算)/ 最大生成长度 | max_new_tokens,限制回答长度 |
| Long Context(长上下文) | 128k+ 上下文窗口;涉及 RoPE 缩放、LongLoRA、线性注意力等技术 |
| MLLM(Multimodal Large Language Model, 多模态大语言模型) | 视觉/语音 + 语言模型(LLaVA / Qwen-VL),微调方法同样适用 |
| Distillation(蒸馏) | 大模型带小模型:用教师输出训练学生 |
| Pruning(剪枝) | 去掉低重要性权重/神经元/专家 |
| Emergent Ability(涌现能力) | 模型规模跨过阈值后突然出现的能力 |
| Scaling Law(缩放定律 / 扩展定律) | 性能随参数量/数据量/算力的幂律增长关系 |
| Safetensors | HF 新的安全权重格式(替代 pickle 的 .bin) |
| GGUF(GGML Unified Format, GGML 统一格式) | llama.cpp 系权重格式(见第八节) |
十三、一个完整的微调工作流示例(把名词串起来)
用 LLaMA-Factory 对 Qwen 做 QLoRA SFT + DPO 的典型流程:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| # QLoRA SFT(LLaMA-Factory yaml 片段)
model_name_or_path: Qwen/Qwen2.5-7B-Instruct
quantization_bit: 4 # QLoRA:4bit NF4 基座
lora_target: all-linear # 所有线性层注入 LoRA
lora_rank: 16 # rank
lora_alpha: 32 # alpha(α/r = 2)
dataset: my_sft_data # ChatML 格式指令数据
template: qwen # 对话模板(必须匹配模型!)
cutoff_len: 8192 # 最大序列长度
per_device_train_batch_size: 1 # × 4 卡 × 4 梯度累积 = 有效 batch 16
learning_rate: 1.5e-4 # LoRA 常用学习率
num_train_epochs: 3
lr_scheduler_type: cosine
warmup_ratio: 0.03
bf16: true # 混合精度
gradient_checkpointing: true # 激活重计算省显存
|
- 数据准备:整理 ChatML 格式指令数据 → MinHash 去重 → 检查数据污染;
- SFT:QLoRA 训练(bf16 + gradient checkpointing,7B 一张 16GB 卡即可,见 2.7)→ 观察 val loss,防过拟合;
- 合并/评测:
merge & unload 后跑 lm-eval-harness(MMLU/C-Eval/GSM8K)+ MT-Bench(LLM-as-a-Judge); - 偏好对齐:用 UltraFeedback 类偏好数据跑 DPO(显存约为 SFT 的 1.5~2 倍);
- 量化部署:导出 AWQ/GGUF → vLLM(数据中心)或 llama.cpp/Ollama(本地)起服务 → 压测 TTFT/吞吐;
- 监控迭代:WandB 看 loss 曲线,线上收集 Bad Case 进数据飞轮。
写在最后
微调领域的名词迭代很快(今天的新词明年可能就过时),但主干是稳定的:
数据定下限,方法定效率,对齐定上限,评测定真相。
掌握本文的框架后,再遇到新名词(比如某个新的 PEFT 变体或对齐算法),基本都能归位到"改参数 / 改数据 / 改目标函数 / 改推理"这四类里的某一类,不会迷失。
有遗漏或错误的地方欢迎评论区指出,后续会持续更新。