← 知识整理
AI 技术与工程 / 知识整理 · 中文

LLM 面试 / 微调与强化学习完整专题

LLM 面试中微调 / RLHF / PEFT / 增量预训练板块的 15 份专题 PDF。覆盖 LLMs 微调面 + PEFT(参数高效微调)+ Adapter-tuning + LoRA 系列 + QLoRA + PEFT 库 + 增量预训练 + 增量预训练样本拼接 + lora 二次预训练 + 评测面 + 强化学习面 + RLHF 及变种 + PPO + 强化学习 NLP 应用 + 训练集面 + LLM 生成 SFT 数据 + 显存优化 + 推理面 + Prompting 篇

资料来源:大语言模型学习 · 本站发布:2026-09-26

模型微调RLHFLoRA

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 模型成本数百万美元。

增量预训练优势:

  • 基于已有模型继续训练
  • 添加领域知识
  • 适应新语言 / 新模态

增量预训练准备

  1. 数据准备(领域 + 部分通用)
  2. tokenizer 是否扩词表(新语言)
  3. 训练框架(DeepSpeed / FSDP)
  4. 学习率(通常比初始预训练小 10x)
  5. 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 详解

主要步骤:

  1. 采样:用当前 policy 生成 trajectory
  2. 计算 advantage:GAE
  3. 更新 policy:CLIP loss
  4. 重复

关键概念:

  • 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 数据生成

两种方法:

  1. 人工标注 — 适合垂直领域,质量高,贵
  2. 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

高频考点优先级

  1. 🔥🔥🔥 LoRA + QLoRA — 必考
  2. 🔥🔥🔥 RLHF 4 阶段 + DPO
  3. 🔥🔥 PEFT 方法对比
  4. 🔥🔥 显存优化 8 招
  5. 🔥🔥 SFT 数据构建 + Self-Instruct
  6. 🔥 Continue Pretrain 灾难遗忘缓解
  7. 🔥 CoT / Self-Consistency / ToT