LLM 面试中微调 / RLHF / 推理优化板块。AiGC 面试宝典(宁静致远)。共 19 份 PDF。
一、LLMs 微调基础(file_9)
8 个高频微调题
| Q | 要点 |
|---|---|
| 全参数微调需要多少显存? | 模型参数 fp16 + 梯度 fp16 + Adam 状态(m, v) fp32 + 激活值 — 约 16-20x 模型大小 |
| 为什么 SFT 之后感觉 LLM 傻了? | 灾难遗忘 / SFT 过拟合短模式 / RL 阶段还没来 |
| SFT 指令微调数据如何构建? | 多样指令 + 高质回答 + 适量长度 + 拒答样本 |
| 领域模型 Continue PreTrain 数据选取? | 领域数据 70% + 通用 30% 防遗忘 |
| 领域训练后通用能力下降怎么缓解? | LoRA 增量 + 数据混合 + 渐进式微调 |
| Continue PreTrain 如何学到更多? | 高质量数据 + 充分训练 + 不同任务混合 |
| SFT 用 Chat 还是 Base 模型? | 领域微调用 Base / 指令跟随能力强用 Chat |
| 领域微调数据输入格式? | Alpaca / ShareGPT / Vicuna 等指令格式 |
二、PEFT 参数高效微调(file_26)
全参微调 vs PEFT
| 方法 | 优点 | 缺点 |
|---|---|---|
| Fine-tune(全参) | 效果好 | 慢 + 贵 + 灾难遗忘 |
| PEFT | 快 / 省 / 灾难遗忘小 | 效果略损 |
PEFT 方法对比
| 方法 | 思路 |
|---|---|
| Prefix-Tuning | 在每层加可训练前缀 |
| P-Tuning | 在 input 端加可训练 prompt |
| Prompt-Tuning | 简化版 P-Tuning |
| LoRA | 低秩矩阵分解 |
| AdaLoRA | 自适应 LoRA rank |
| Adapter | 插入小模块 |
| IA³ | 三向量乘 K/V/FFN |
经验:
- 链家 BELLE 报告:FT > LoRA 略微
- 但 LoRA 速度 + 显存优势巨大
三、LoRA 系列(file_29 + file_30)
LoRA 核心思想
全参更新 → 矩阵分解为低秩矩阵更新:
W' = W + ΔW
ΔW = A * B (A: r×d, B: d×r, r << d)
只训练 A, B 两个小矩阵(参数 << 全参微调)。
LoRA 特点
- 训练:只更新 A, B(全参的 0.1-1%)
- 推理:A*B 可合并到 W,推理零额外开销
- 多任务:多套 LoRA 切换(swappable adapters)
QLoRA
Q = Quantization。
- 把基座模型量化到 4-bit(NF4 格式)
- 在量化模型上做 LoRA
- 可在单卡 24GB 上微调 65B 模型
关键技术:
- NF4 (4-bit NormalFloat) — 比 fp16 准确度好
- Double Quantization — 量化常数再量化
- Paged Optimizer — Adam 状态分页到 CPU
如何使用 PEFT 库中 LoRA(file_30)
from peft import LoraConfig, get_peft_model
config = LoraConfig(
r=8, # 秩
lora_alpha=32, # 缩放
target_modules=["q_proj","v_proj"], # 应用在哪
lora_dropout=0.05,
bias="none",
task_type="CAUSAL_LM"
)
model = get_peft_model(base_model, config)
显存占用主要部分:
- 模型权重(fp16:2x)
- 梯度(fp16:2x)
- Adam 状态(fp32 m, v:8x)
- 激活值(变化)
- 输入 batch
优化策略:
- 量化基座模型(4-bit)→ -75% 显存
- LoRA → 梯度+Adam 显存大幅减少
- Gradient Accumulation
- Gradient Checkpointing(时间换显存)
四、Adapter-tuning(file_27)
Adapter 思路
在 Transformer 每层插入一个小型瓶颈结构:
down-project (高维 → 低维) → 非线性 → up-project (低维 → 高维)
Adapter 优点
- 参数极少(0.5-5%)
- 训练快 + 显存省
- 多任务切换简单(每任务一套 adapter)
Adapter vs LoRA
| 维度 | Adapter | LoRA |
|---|---|---|
| 推理开销 | 有(增加层) | 无(可合并) |
| 灵活性 | 通用 | 主要用于 attention |
| 性能 | 接近 LoRA | 略好 |
五、Prompting / 提示学习(file_28)
为什么需要提示学习
- 传统 fine-tune 需要大量标注数据
- Prompting 用任务的自然语言描述 + few-shot 例子,零样本 / 少样本就能用 LLM
Prompting 分类
| 类型 | 例子 |
|---|---|
| Zero-shot | "请把以下英文翻译成中文: ..." |
| Few-shot | 提供 1-5 个范例 |
| Chain-of-Thought (CoT) | "让我们逐步思考..." |
| Self-Consistency | 多次采样取多数 |
| Tree of Thoughts | 树状思考 |
| ReAct | Reasoning + Acting |
Prompting 优点
- 无需训练
- 快速试错
- 保留模型通用能力
六、增量预训练(file_32 + file_33 + file_34)
为什么增量预训练?
全量预训练昂贵:从头训练 7B-65B 模型成本数百万美元。
增量预训练优势:
- 基于已有模型继续训练
- 添加领域知识
- 适应新语言 / 新模态
增量预训练准备
- 数据准备(领域 + 部分通用)
- tokenizer 是否扩词表(新语言)
- 训练框架(DeepSpeed / FSDP)
- 学习率(通常比初始预训练小 10x)
- checkpoint 策略
增量预训练流程
1. 加载基座模型
2. 准备增量数据(可分 phase:领域 → 指令 → 偏好)
3. 学习率 warmup(短)+ 余弦衰减
4. 训练 + 定期 eval
5. 检查指标(loss / 通用能力)
6. 选最佳 checkpoint
数据量经验
- 增量预训练:10B-100B token 量级(领域)
- 全量预训练:1T-15T token
Pretrain 样本拼接(file_33)
为什么需要拼接? — 单样本短,GPU 利用率低。
4 种拼接方式:
| 方式 | 思路 |
|---|---|
| Random Concatenate | 随机拼接到 max_length |
| Random + NoiseMask | 拼接 + 边界加噪声 |
| Random + Cluster | 同主题聚类后拼接 |
| IN-CONTEXT PRETRAINING | 长文档保留,短文档同来源拼接 |
lora 二次预训练 llama2(file_34)
目标:用 LoRA 给 llama2 加中文能力。
思路:
- 词表扩展(加中文 token)
- LoRA 训练
- 数据:中文百科 + 中文书籍 + 中文网文
参数:
- r=64 / alpha=128(大 rank 适合 continue pretrain)
- target_modules=["q_proj","k_proj","v_proj","o_proj","gate_proj","up_proj","down_proj"]
- 学习率 1e-4 → 1e-5
七、强化学习与 RLHF
file_36 强化学习面
简单介绍 RL = 智能体通过与环境交互学习最优策略。
简单介绍 RLHF = Reinforcement Learning from Human Feedback,用人类反馈训练奖励模型,再用 RL 优化 LLM。
RLHF 在实践中的不足:
- 人工偏好数据贵 + 慢
- 奖励黑客(Reward Hacking)
- 训练不稳定
- 容易过度优化(对齐税)
file_37 RLHF 经典 Pipeline
1. Pre-training:无监督预训练
2. Supervised Fine-tuning (SFT):指令微调
3. Reward Model (RM):用人类偏好对训练奖励模型
4. PPO:用 RM 作奖励信号优化 LLM
RLHF 变种
| 方法 | 创新 |
|---|---|
| DPO (Direct Preference Optimization) | 跳过 RM,直接用偏好对优化 |
| IPO | DPO 改进版 |
| KTO | 单样本偏好(无需对) |
| ORPO | 联合 SFT + 偏好 |
| RLAIF | 用 AI 替代人提供反馈 |
file_38 PPO 详解
主要步骤:
- 采样:用当前 policy 生成 trajectory
- 计算 advantage:GAE
- 更新 policy:CLIP loss
- 重复
关键概念:
- CLIP:防止 policy 偏离过大
- KL 散度惩罚:约束新 policy 不远离 reference policy
- Value Function:估计 state value
file_39 RL 在 NLP 应用
| 任务 | RL 应用 |
|---|---|
| 文本生成 | RLHF / DPO |
| 对话系统 | RLHF + 对话奖励 |
| 翻译 | BLEU 作奖励 |
| 摘要 | ROUGE / 信息覆盖度作奖励 |
| 推荐 | CTR / Reward Model |
八、SFT 数据(file_40 + file_41)
file_40 训练集格式
| 阶段 | 数据格式 |
|---|---|
| SFT | 一问一答(instruction, output) |
| RM (奖励模型) | 一问 + 好回答 + 坏回答 |
| PPO | 一问(从 prompt 集合采样) |
file_41 SFT 数据生成
两种方法:
- 人工标注 — 适合垂直领域,质量高,贵
- LLM 生成(GPT-4) — 量大,适合通用
Self-Instruct 框架:
1. 种子任务(175 个)
2. LLM 生成新指令
3. LLM 生成对应输出
4. 过滤 + 去重
5. 用于 SFT
九、显存与推理优化
file_42 显存问题
| Q | A |
|---|---|
| 模型文件多大? | fp16 时 2n GB(n B 参数) |
| 推理时显存? | fp16 时 2n GB + KV cache + activations |
| 4*V100 32GB 训 vicuna 65B? | 不能(65B fp16 = 130GB,4×32=128GB 都装不下,更别说梯度) |
file_43 显存优化策略
| 策略 | 思路 |
|---|---|
| Gradient Accumulation | 多个 mini-batch 累积梯度后再更新,模拟大 batch |
| Gradient Checkpointing | 部分激活值不保存,反向时重算(时间换显存) |
| Mixed Precision | fp16 计算 + fp32 主权重 |
| DeepSpeed ZeRO | 优化器状态 / 梯度 / 参数分散到多 GPU |
| CPU Offload | Adam 状态放 CPU |
| 量化 | int8 / int4 推理 |
| Flash Attention | 减少 attention 显存 |
file_31 LLMs 推理
| Q | A |
|---|---|
| 为什么推理显存涨那么多且一直占? | KV cache 累积 + PyTorch 内存池不释放 |
| GPU vs CPU 推理速度? | GPU 快 10-100x(取决模型) |
| int8 vs fp16 推理? | int8 快 + 省显存 + 精度略损 |
| 如何加速推理? | KV cache / Flash Attention / 量化 / 推测解码(speculative decoding) |
| 批量推理 vs 单条? | 批量摊薄固定开销,通量更高 |
十、LLMs 评测(file_35)
评测难点
- SuperGLUE / GLUE / CLUE 不太适合评估大模型
- 评估推理能力 + 多轮对话能力是核心
评测体系
| 维度 | Benchmark |
|---|---|
| 常识推理 | MMLU / HellaSwag / ARC |
| 数学 | GSM8K / MATH |
| 代码 | HumanEval / MBPP |
| 多轮对话 | MT-Bench / AlpacaEval |
| 长上下文 | Needle In Haystack / LongBench |
| 中文 | C-Eval / CMMLU / GAOKAO-Bench |
| 安全性 | TruthfulQA / RealToxicity |
LLM-as-Judge
- 用 GPT-4 当评委
- 优点:批量 + 廉价
- 缺点:GPT-4 自己偏好
See also
- LLM 面试 / 基础架构与组件 — 基础架构
- LLM 面试 / RAG 检索增强生成完整专题 — RAG
- LLM 面试 / 分布式训练 8 篇图解专题 — 分布式训练
- AI 产品经理面试与转型 / 12 份资料汇编 — AI PM 题
- Foundation Models for NLP(Springer 教科书精读) — 教材完整版
高频考点优先级
- 🔥🔥🔥 LoRA + QLoRA — 必考
- 🔥🔥🔥 RLHF 4 阶段 + DPO
- 🔥🔥 PEFT 方法对比
- 🔥🔥 显存优化 8 招
- 🔥🔥 SFT 数据构建 + Self-Instruct
- 🔥 Continue Pretrain 灾难遗忘缓解
- 🔥 CoT / Self-Consistency / ToT