2026-01-04 · AI
32
AI · 2026-01-04

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

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是"学会答题格式",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)

为什么软标签有用?

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

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

实战案例

参考资料: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怎么用?

目录 最新
← 左侧翻上一屏 · 右侧翻下一屏 · 中间唤出菜单