AI编程 · 架构思考 · 技术人生

大模型面试100问02:训练与优化篇

#大模型面试100问
智谱 GLM,支持多语言、多任务推理。从写作到代码生成,从搜索到知识问答,AI 生产力的中国解法。

TL;DR

全参数微调一个7B模型要14GB显存,65B模型要130GB——普通人根本玩不起。但LoRA只需要0.1%的参数,QLoRA更狠,单张24GB显卡就能训65B模型。本文从10个高频面试题入手,带你搞懂大模型训练的核心技术:LoRA为什么有效、RLHF和DPO怎么选、并行策略如何搭配、训练稳定性怎么保证。读完这篇,你能回答”为什么QLoRA用NF4量化”、”PPO和DPO的本质区别是什么”这种深度问题。


一、LLM训练的三阶段:预训练 → SFT → RLHF

三阶段流程

阶段1: 预训练 (Pretraining)
[海量无标注文本] → [下一词预测] → [基座模型]

阶段2: 监督微调 (SFT)
[高质量指令数据] → [监督学习] → [指令遵循模型]

阶段3: 人类反馈强化学习 (RLHF)
[人类偏好数据] → [强化学习] → [对齐模型]

各阶段详解

阶段 数据量 目标 成本
预训练 数万亿tokens 学习语言知识 极高(数百万美元)
SFT 1万-10万条 学会遵循指令 中等
RLHF 3万-10万条偏好对 对齐人类价值观 高(需要4个模型)

InstructGPT的数据规模

  • SFT阶段:~13K条高质量指令数据
  • RM阶段:~33K条人类偏好标注
  • PPO阶段:持续优化

关键洞察:预训练是”读万卷书”,SFT是”学会答题格式”,RLHF是”学会讨人喜欢”。

参考资料:InstructGPT论文 (arXiv:2203.02155)


二、并行策略对比:数据并行 vs 模型并行 vs 管道并行 vs ZeRO

四种并行策略

1. 数据并行 (Data Parallelism, DP)

原理:每个GPU持有完整模型副本,处理不同的数据batch

GPU 1: 模型副本1 + Batch 1
GPU 2: 模型副本2 + Batch 2
GPU 3: 模型副本3 + Batch 3
→ 梯度同步 → 参数更新

优势:实现简单,通信开销小
劣势:模型必须能放进单GPU显存

2. 模型并行 (Model Parallelism, MP)

原理:把模型切分到多个GPU

张量并行(Tensor Parallelism):切分单层内的矩阵

Attention层: GPU1处理前半部分头,GPU2处理后半部分头

流水线并行(Pipeline Parallelism):按层切分

GPU 1: Layer 1-10
GPU 2: Layer 11-20
GPU 3: Layer 21-30

优势:能训练超大模型
劣势:通信开销大,GPU利用率低(流水线气泡)

3. ZeRO (Zero Redundancy Optimizer)

核心思想:消除数据并行中的冗余存储

ZeRO阶段 分片内容 显存节约 通信开销
ZeRO-1 优化器状态 4倍 最低
ZeRO-2 优化器+梯度 8倍 中等
ZeRO-3 优化器+梯度+参数 N倍(N=GPU数) 最高

实战建议
– 单机多卡:ZeRO-2
– 多机多卡:ZeRO-3
– 显存极度受限:ZeRO-3 + CPU Offload

参考资料:ZeRO论文 (arXiv:1910.02054)、DeepSpeed官方文档


三、LoRA原理:为什么低秩矩阵能有效微调?

核心思想

假设:预训练模型已经学到了丰富的知识,微调时的参数更新是低秩的(可以用低秩矩阵近似)。

数学表达

原始全参数微调:

W' = W + ΔW  (ΔW是全秩矩阵)

LoRA微调:

W' = W + BA  (B和A是低秩矩阵)
其中 B ∈ R^(d×r), A ∈ R^(r×k), r << min(d,k)

参数量对比

假设原始权重矩阵是 4096×4096:
全参数微调:16,777,216个参数
LoRA (r=16):4096×16 + 16×4096 = 131,072个参数(减少99.2%

为什么有效?

  1. 低秩假设成立:实验证明微调时的参数更新确实是低秩的
  2. 保留预训练知识:冻结原始权重W,只训练BA
  3. 推理时无开销:可以把BA合并到W中

生活比喻:全参数微调像重新装修整个房子,LoRA像只换家具——效果差不多,但成本低得多。

参考资料:LoRA论文 (arXiv:2106.09685)


四、LoRA vs QLoRA vs 全参数微调

显存占用对比

方法 7B模型显存 65B模型显存 可训练参数 性能
全参数微调(FP16) ~14GB >130GB 100% 100%
LoRA (FP16基座) ~20GB ~100GB 0.1%-1% 98-99%
QLoRA (4-bit基座) ~8-10GB ~48GB 0.1%-1% 97-99%

QLoRA的三大创新(NeurIPS 2023)

1. 4-bit NormalFloat (NF4)

核心思想:针对正态分布权重设计的量化数据类型

为什么不用INT4
– 模型权重通常服从正态分布
– NF4在[-1, 1]区间内分布更密集
– 信息理论上对正态分布最优

2. Double Quantization

原理:量化量化常数本身

原始:每64个参数共享1个FP32量化常数 = 0.5 bits/参数
优化:量化常数也用8-bit量化 = 0.127 bits/参数
节省:每参数节省0.37 bits

3. Paged Optimizers

原理:使用NVIDIA统一内存管理内存峰值,避免OOM

性能验证

Guanaco模型(QLoRA训练的LLaMA 65B):
– 达到ChatGPT 99.3%性能水平
– 单GPU 24小时完成训练
– 显存占用仅48GB

参考资料:QLoRA论文 (arXiv:2305.14314)


五、RLHF详解:PPO算法在对齐中的作用

RLHF三阶段流程

阶段 输入 输出 数据量
1. SFT 指令-回复对 指令遵循模型 ~13K
2. RM训练 回复排序对 奖励模型 ~33K
3. PPO优化 Prompt 对齐模型 持续

PPO目标函数

L(φ) = E[r_θ(x,y) - β·KL(π_φ(y|x) || π_SFT(y|x))]

三个关键组件
r_θ(x,y):奖励模型评分(人类偏好代理)
KL惩罚:防止模型偏离原始SFT模型太远
β:KL惩罚系数(平衡探索与保守)

为什么需要4个模型?

  1. Policy Model:正在训练的模型
  2. Reference Policy:SFT模型副本(计算KL散度)
  3. Reward Model:预测人类偏好
  4. Value Function:估计状态价值(PPO算法需要)

内存需求:训练7B模型需要约80GB显存(4个模型×20GB)

参考资料:InstructGPT论文 (arXiv:2203.02155)


六、DPO vs PPO:哪个更适合对齐?

核心区别

维度 PPO DPO
是否需要RM 需要训练奖励模型 不需要
训练复杂度 高(4个模型) 低(1个模型)
稳定性 需要调参 更稳定
性能 理论上限更高 接近PPO

DPO的核心创新

直接优化偏好:跳过奖励模型,直接从偏好数据学习

目标函数

L(π) = -E[log σ(β log π(y_w|x)/π_ref(y_w|x) - β log π(y_l|x)/π_ref(y_l|x))]

其中 y_w 是偏好回复,y_l 是非偏好回复

2025年共识

DPO适用场景
– 资源受限(单GPU可训练)
– 快速迭代
– 偏好数据充足

PPO适用场景
– 追求极致性能
– 有充足计算资源
– 需要在线学习

参考资料:DPO论文 (arXiv:2305.18290)


七、知识蒸馏在LLM中的应用

核心思想

Teacher-Student框架:用大模型(Teacher)的知识训练小模型(Student)

蒸馏目标

L = α·L_CE(y, y_student) + (1-α)·L_KL(p_teacher, p_student)
  • L_CE:交叉熵损失(硬标签)
  • L_KL:KL散度损失(软标签)
  • α:平衡系数

为什么软标签有用?

硬标签:[0, 0, 1, 0, 0](只有正确答案)
软标签:[0.05, 0.1, 0.7, 0.1, 0.05](包含相似性信息)

生活比喻:硬标签像考试答案(对/错),软标签像老师讲解(这个选项为什么错、那个选项为什么接近)。

实战案例

  • DistilBERT:6层蒸馏自12层BERT,保留97%性能,速度快60%
  • TinyLLaMA:1.1B参数蒸馏自LLaMA 7B

参考资料:Distilling the Knowledge in a Neural Network (arXiv:1503.02531)


八、混合精度训练:FP16 vs BF16 vs FP8

三种精度对比

精度 指数位 尾数位 表示范围 精度 适用场景
FP32 8 23 ±3.4×10³⁸ 最高 传统训练
FP16 5 10 ±6.5×10⁴ 中等 推理、微调
BF16 8 7 ±3.4×10³⁸ 较低 大模型训练
FP8 5 2 ±5.7×10⁴ 最低 H100推理

为什么大模型用BF16?

FP16的问题
– 表示范围小,容易溢出
– 梯度更新时精度损失大

BF16的优势
– 表示范围与FP32相同(指数位相同)
– 不需要loss scaling
– 训练稳定性好

生活比喻:FP16像精密天平(精度高但量程小),BF16像磅秤(量程大但精度够用)——训练大模型需要”磅秤”。

参考资料:Mixed Precision Training (arXiv:1710.03740)


九、梯度累积与梯度检查点

梯度累积(Gradient Accumulation)

原理:将大batch分解为多个micro-batch,累积梯度后统一更新

公式

train_batch_size = micro_batch_size × gradient_accumulation_steps × num_gpus

示例
– 目标batch size = 256
– 单GPU显存只能放32
– 设置gradient_accumulation_steps = 8
– 效果等同于batch size 256

优势:用时间换空间,显存受限时也能用大batch

梯度检查点(Gradient Checkpointing)

原理:不存储所有中间激活值,反向传播时重新计算

权衡
– 显存节约:约50%
– 计算增加:约30%

Transformers启用

model.gradient_checkpointing_enable()
# 或命令行参数
--gradient_checkpointing

参考资料:DeepSpeed官方文档


十、训练稳定性问题:梯度爆炸/消失的解决方案

核心解决方案

技术 原理 推荐配置
梯度裁剪 限制梯度范数 max_norm=1.0
学习率预热 训练初期逐步增加LR warmup_steps=总步数5-10%
Pre-LN架构 LayerNorm放在attention/FFN之前 现代默认
QK-LayerNorm 在attention计算前对Q、K归一化 防止softmax饱和

2024-2025最新研究

“Spike No More” (ICLR 2024):理论分析loss spike产生条件
– 关键发现:子层参数范数应”小”,残差连接应”大”
– 实践建议:初始化时缩小权重,增大残差分支

实战建议

  1. 梯度裁剪:防止单步更新过大
  2. 学习率预热:避免初期梯度爆炸
  3. 使用Pre-LN:比Post-LN稳定得多
  4. 监控梯度范数:及时发现异常

参考资料:Google Deep Learning Tuning Playbook、ICLR 2024稳定性论文


小结

本文从10个高频面试题入手,系统梳理了大模型训练与优化的核心技术:

  1. 训练三阶段:预训练学知识、SFT学格式、RLHF学对齐
  2. 并行策略:数据并行简单、模型并行能训大模型、ZeRO消除冗余
  3. LoRA原理:低秩假设成立,参数减少99%
  4. QLoRA创新:NF4量化+Double Quantization,单卡训65B
  5. RLHF详解:需要4个模型,显存开销大
  6. DPO优势:跳过奖励模型,单GPU可训练
  7. 知识蒸馏:软标签包含相似性信息
  8. 混合精度:BF16适合大模型训练
  9. 显存优化:梯度累积+梯度检查点
  10. 训练稳定:梯度裁剪+学习率预热+Pre-LN

下一篇预告:推理与部署篇——KV Cache、Flash Attention、vLLM怎么用?

赞(0)
未经允许不得转载:Toy's Tech Notes » 大模型面试100问02:训练与优化篇
免费、开放、可编程的智能路由方案,让你的服务随时随地在线。

评论 抢沙发

十年稳如初 — LocVPS,用时间证明实力

10+ 年老牌云主机服务商,全球机房覆盖,性能稳定、价格厚道。

老品牌,更懂稳定的价值你的第一台云服务器,从 LocVPS 开始