大模型面试 常见问答
电话面可直接背诵;现场面可展开白板推导。每题均给出:
① 面试官想听什么 ② 完整推导/代码 ③ 常见追问 & 反向提问
1. 什么是「大模型」?它与 2015 年的「大」CNN 有何本质区别?
面试官想听
不是参数数量级,而是「训练目标统一 + 涌现能力」带来的范式迁移。
完整回答
-
参数规模:>10 B 是行业约定,但关键在「训练数据量」与「参数线性正比」------Kaplan 律(2020):
L ∝ (Nα)(Dβ), α≈0.34, β≈0.28
即 10× 参数只需 3× 数据就能维持同样 loss。
-
目标函数统一:
2015 的「大」CNN 仍用任务相关损失(分类 CE、检测 Smooth-L1);大模型全部用自回归 LM 目标
max_θ Σ_t log P_θ(x_t | x_<t)
好处:① 无需标注 ② 任意任务可转成「续写」
-
涌现能力(Emergent Ability)定义:Wei et al. 2022
- 在 10^22 FLOPs 附近突然出现的 ICL、CoT、Instruction Following
- 非线性跳跃:10× 参数 → 100× 任务准确率
-
工程边界:
- 显存:单卡 80 GB → 模型权重 < 40 B(Adam 2 倍 + 梯度 1 倍 + 激活 0.5 倍)
- 计算:训练 1 T token 需 10^24 FLOPs ≈ 1 万 A100×30 天
常见追问
Q:涌现是度量 artifact 吗?
A:用 bits per parameter 归一化后依旧跳跃;且在不同下游任务同时出现,排除单指标假象。
反向提问
贵司业务指标到达多少 token 后出现非线性提升?
2. Transformer 自注意力为什么 work?请给出数学表达 + 可视化。
面试官想听
「全局感受野 + 可并行 + 表达下界」三板斧,最好现场画注意力矩阵。
完整推导
-
全局依赖:任意两位置距离=1
A = softmax( (QK^⊤) / √d_k ) ∈ R^{n×n}
每行是合法概率:Σ_j A_{i,j} = 1
-
并行性:
RNN 时间步依赖 → O(n) 顺序
Attention 矩阵乘法 → O(1) 常数深度(实际受 memory wall 限制)
-
表达下界(Yun et al. 2020, ICML)
单头 + ReLU 前馈 → 在 L^2§ 空间稠密
即:∀ε>0, ∃ Transformer T s.t. ||T − f||_{L^2}<ε 对任意连续 f 成立
-
可视化技巧
画 4×4 矩阵:
- 对角亮 → 指代消解
- 上三角亮 → 未来信息泄露(Decoder 需 mask)
代码级
python
def show_attn(attn, tokens): # attn: [n_heads, len, len]
import seaborn as sns
for h in range(attn.size(0)):
sns.heatmap(attn[h].cpu().numpy(),
xticklabels=tokens,
yticklabels=tokens,
cmap='Blues')
plt.title(f'head {h}')
plt.show()
追问
Q:self-attention 与卷积的等价性?
A:CNN = 稀疏 + 共享 + 局部;attention = 全连接 + 动态权重 + 全局。
Wang & Isola 2022 证明:softmax attention ≈ 归一化卷积当核大小→n。
3. 多头 attention 是精度更高还是正则化?请用矩阵秩解释。
面试官想听
低秩分解 + 噪声视角,而非「多头看得更全面」这种文学描述。
数学
设单头输出 O = softmax(QK^⊤/√d_k)V ∈ R^{n×d}
多头拼接 [O_1;...;O_h] = [V_1;...;V_h] · diag(A_1,...,A_h)
= W_O · [A_1V_1; ...; A_hV_h]
等价于 块对角低秩近似 原全秩矩阵,秩 ≤ h·d_k
→ 1. 参数共享 2. 引入头间噪声 = 正则化
实验证据
h=1 → h=16 BLEU↑ 2.0;h>16 下降(正则化过度)
追问
Q:head 间 cosine 相似度通常多少?
A:训练后期 0.3~0.4;>0.7 说明冗余 → 可剪枝 30 % 头。
4. 位置编码:ROPE 为什么能外推 2× 长度不掉点?手推旋转矩阵。
面试官想听
复数旋转 → 线性插值无参数;现场写 2×2 块矩阵。
手推
把 q,k 当成复数向量:
q_m = (q_{2m} + i q_{2m+1})
旋转 R_θ = e^{i m θ} = cos mθ + i sin mθ
实部虚部展开:
\[cos mθ, −sin mθ\], \[sin mθ, cos mθ\]\] · \[x, y\]\^⊤ 外推时 θ' = θ · (L'/L) → **角度线性拉伸**,无新参数。 **代码验证** ```python def rotate_half(x): x1, x2 = x[..., ::2], x[..., 1::2] return torch.cat((-x2, x1), dim=-1) def apply_rope(x, seq_len, base=10000): dim = x.size(-1) inv_freq = 1.0 / (base ** (torch.arange(0, dim, 2).float() / dim)) t = torch.arange(seq_len, device=x.device).type_as(inv_freq) freqs = torch.outer(t, inv_freq) # [seq, dim/2] emb = torch.cat((freqs, freqs), dim=-1) # [seq, dim] cos, sin = emb.cos(), emb.sin() return x * cos + rotate_half(x) * sin ``` **追问** Q:NTK-RoPE 与线性插值区别? A:NTK 动态放大底数 base → 高频分量不衰减,**长波保留**。 *** ** * ** *** ### 5. 优化器:Adam vs AdamW vs Lion,大模型到底选谁? **面试官想听** 权重衰减 vs L2 正则 + Lion 的二阶更新可视化。 **完整对比** | 优化器 | 等价于 | 大模型 10 B+ 经验 | |-------|-----------------|--------------------------------------| | Adam | β1=0.9 β2=0.999 | 需 **WD 解耦** | | AdamW | WD ≠ λ·‖θ‖² | 默认选择,λ=0.1 | | Lion | 符号动量 | **省 25 % 内存** ,lr×3,**跑 1.5× epoch** | **代码级** ```python # AdamW (PyTorch 2.0 原生) optimizer = torch.optim.AdamW(model.parameters(), lr=3e-4, weight_decay=0.1) # Lion (谷歌官方) from lion_pytorch import Lion optimizer = Lion(model.parameters(), lr=1e-4, weight_decay=0.01) ``` **追问** Q:Lion 为什么内存省? A:仅保存一阶动量;**符号操作**让梯度 1-bit 化 → 优化器状态减半。 *** ** * ** *** ### 6. 长序列 OOM:FlashAttention 的 3 个核心 trick 是什么? **面试官想听** Tiling + Recompute + Softmax 数值稳定,最好现场画 GPU 内存瀑布图。 **trick 1 Tiling** 把 Q 分 Br 行块,K,V 分 Bc 列块 → 把 O(n²d) 显存 → **O(Br·d)** Br=128, Bc=128 → A100 上 8 k 长度显存 \< 16 GB **trick 2 Softmax 局部修正** online softmax 算法: m_i = max(m_{i-1}, x_i) f_i = exp(x_i - m_i) + exp(m_{i-1} - m_i) \* f_{i-1} → **无需整张 n×n 得分矩阵** **trick 3 反向重计算** 只保存每块归一化常数,不保存得分 → **激活内存↓ 50 %** **追问** Q:与 Memory Efficient Attention 区别? A:MEA 用同样的 online softmax,但 **Tiling 尺寸固定**;Flash 针对 A100 SRAM 80 KB 手动调 Br,Bc → 带宽利用率 \> 90 %。 *** ** * ** *** ### 7. INT8 量化:校准 512 条样本够吗?KL 散度怎么算? **面试官想听** 校准集大小、长尾分布、KL 分段 → 现场写 numpy。 **步骤** 1. 收集激活 x ∈ ℝ\^N 2. 建直方图 H(bin)=count,归一化 P=H/N 3. 候选量化尺度 s ∈ \[0.95,0.98,0.999
- 对每 s 生成量化分布 Q:
Q(i) = ∑_{x∈bin_i} 1{|x|≤s} - KL(P‖Q)=∑ P(i) log(P(i)/Q(i))
- 选最小 KL 的 s → 截断长尾 0.1 %
代码
python
def kl_calibration(tensor, n_bins=2048, num_s=100):
hist, edges = np.histogram(tensor, bins=n_bins)
P = hist / hist.sum()
s_candidates = np.linspace(0.90, 0.999, num_s)
best_s, min_kl = None, np.inf
for s in s_candidates:
q_edges = [-s, s]
Q = np.histogram(tensor, bins=n_bins, range=q_edges)[0]
Q = Q / Q.sum() + 1e-12
kl = np.sum(P * np.log(P / Q + 1e-12))
if kl < min_kl:
min_kl, best_s = kl, s
return best_s
追问
Q:INT4 为什么不用 KL?
A:4-bit 区间只有 16 档 → 直方图太粗 ;改用 MSE 网格搜索 或learned scale(LLM.int8() 2023)。
8. 小样本:每类 100 条如何做到 90 % 全量效果?
面试官想听
两阶段:continual pre-train → prompt-tune + 数据增强 MixUp
阶段 1 Continual LM pre-train
- 数据:任务领域 100 M token
- 目标:同自回归 LM
- 超参:lr=2e-5, 1 epoch, batch=1 M token
→ 领域适配,PPL ↓ 30 %
阶段 2 Prompt-tuning
- 仅训练 20 个 virtual token
- 学习率 0.1(比全模型高 1000×)
- 早停:验证 loss 连续 3 次不降
→ 参数量 < 0.1 %,收敛 10 min
数据增强
- 隐藏层 MixUp:
z = λ z₁ + (1−λ) z₂, λ~Beta(0.4,0.4) - 反向翻译(同义句)+ EDA 同义词
→ 指标↑ 2~3 点
实验结果
AGNews 4-class, 每类 100 样本
全量微调 94.2 % → Prompt 91.7 % → 两阶段 93.8 %
9. 模型并行 vs 数据并行 vs 张量并行,现场画图。
面试官想听
把 GPU 画成方块,标箭头;给出通信量公式。
图
数据并行:同一模型,不同 batch
[G0] ←→ [G1] ←→ [G2] ←→ [G3]
↕ All-Reduce gradient 4×
模型并行:同一 batch,不同层
[G0] → [G1] → [G2] → [G3]
↕ 激活传递 2×
张量并行:同一层,不同列
[G0] ←→ [G1] # QK 列切
[G2] ←→ [G3] # V 列切
↕ All-Reduce 2×
通信量
数据并行:bytes = 2 × model_size × n_gpu
张量并行:bytes = 2 × activation_size × seq_len × n_layer
→ 长序列用张量并行更划算
10. 线上 4-bit 量化落地:TensorRT-LLM 全流程
面试官想听
校准 → 量化 → 引擎 → 服务,给出延迟/吞吐数字。
步骤
- 校准:512 条业务 query → KL 选 scale
- 量化 :
- 权重:GPTQ W4A16, group-size 128
- 激活:smoothQuant α=0.5
- 引擎 :
trtllm-build --quantization gptq --max_batch_size 64 --max_input_len 2048 - 服务 :
- inflight-batching + continuous batching
- 首 token 延迟 380 ms → 190 ms
- 吞吐 1200 → 3100 req/s
追问
Q:4-bit 后如何再微调?
A:QLoRA -- 量化 backbone + LoRA adapter 16-bit,lr=1e-4,不掉点。
11. 注意力变体:为什么 Sparse/Sparse-Trans 仍打不过 Dense?
面试官想听
稀疏度-带宽-实现三角债:理论 FLOPs↓ 10×,实际 wall-time 只↓ 2×。
原因
- GPU 内存带宽 主导:随机稀疏 → gather/scatter 耗时
- block sparse 需 mask 对齐 16×16 → 仍大量无效计算
- flash attn 优化后 dense 带宽已 > 70 % 理论峰值
结论:除非 sparsity > 95 % 且 模式固定(Longformer sliding window),否则 dense 更香。
12. 反向提问面试官(收割 offer 手势)
- 贵司线上最大长度是多少?首 token P99 目标多少毫秒?
- 长文本场景有试过 NTK-RoPE 吗?与 ALiBi 相比体验如何?
- 量化方案是 PTQ 还是 QAT?W4A16 vs W8A8 在业务指标差多少?
- 模型并行用 Megatron 还是 DeepSpeed-Ulysses?通信瓶颈在哪个 All-Reduce?
祝各位反向收割 offer,薪资 double!