大模型面试 常见问答

电话面可直接背诵;现场面可展开白板推导。每题均给出:
① 面试官想听什么 ② 完整推导/代码 ③ 常见追问 & 反向提问


1. 什么是「大模型」?它与 2015 年的「大」CNN 有何本质区别?

面试官想听
不是参数数量级,而是「训练目标统一 + 涌现能力」带来的范式迁移。

完整回答

  1. 参数规模:>10 B 是行业约定,但关键在「训练数据量」与「参数线性正比」——Kaplan 律(2020):
    L ∝ (Nα)(Dβ), α≈0.34, β≈0.28
    即 10× 参数只需 3× 数据就能维持同样 loss。

  2. 目标函数统一:
    2015 的「大」CNN 仍用任务相关损失(分类 CE、检测 Smooth-L1);大模型全部用自回归 LM 目标
    max_θ Σ_t log P_θ(x_t | x_<t)
    好处:① 无需标注 ② 任意任务可转成「续写」

  3. 涌现能力(Emergent Ability)定义:Wei et al. 2022

    • 在 10^22 FLOPs 附近突然出现的 ICL、CoT、Instruction Following
    • 非线性跳跃:10× 参数 → 100× 任务准确率
  4. 工程边界:

    • 显存:单卡 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. 全局依赖:任意两位置距离=1
    A = softmax( (QK^⊤) / √d_k ) ∈ R^{n×n}
    每行是合法概率:Σ_j A_{i,j} = 1

  2. 并行性:
    RNN 时间步依赖 → O(n) 顺序
    Attention 矩阵乘法 → O(1) 常数深度(实际受 memory wall 限制)

  3. 表达下界(Yun et al. 2020, ICML)
    单头 + ReLU 前馈 → 在 L^2§ 空间稠密
    即:∀ε>0, ∃ Transformer T s.t. ||T − f||_{L^2}<ε 对任意连续 f 成立

  4. 可视化技巧
    画 4×4 矩阵:

    • 对角亮 → 指代消解
    • 上三角亮 → 未来信息泄露(Decoder 需 mask)

代码级

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) → 角度线性拉伸,无新参数。

代码验证

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

代码级

# 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]
  4. 对每 s 生成量化分布 Q:
    Q(i) = ∑_{x∈bin_i} 1{|x|≤s}
  5. KL(P‖Q)=∑ P(i) log(P(i)/Q(i))
  6. 选最小 KL 的 s → 截断长尾 0.1 %

代码

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 全流程

面试官想听
校准 → 量化 → 引擎 → 服务,给出延迟/吞吐数字。

步骤

  1. 校准:512 条业务 query → KL 选 scale
  2. 量化
    • 权重:GPTQ W4A16, group-size 128
    • 激活:smoothQuant α=0.5
  3. 引擎
    trtllm-build --quantization gptq --max_batch_size 64 --max_input_len 2048
  4. 服务
    • 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×。

原因

  1. GPU 内存带宽主导:随机稀疏 → gather/scatter 耗时
  2. block sparse 需 mask 对齐 16×16 → 仍大量无效计算
  3. flash attn 优化后 dense 带宽已 > 70 % 理论峰值

结论:除非 sparsity > 95 % 且 模式固定(Longformer sliding window),否则 dense 更香。


12. 反向提问面试官(收割 offer 手势)

  1. 贵司线上最大长度是多少?首 token P99 目标多少毫秒?
  2. 长文本场景有试过 NTK-RoPE 吗?与 ALiBi 相比体验如何?
  3. 量化方案是 PTQ 还是 QAT?W4A16 vs W8A8 在业务指标差多少?
  4. 模型并行用 Megatron 还是 DeepSpeed-Ulysses?通信瓶颈在哪个 All-Reduce?

祝各位反向收割 offer,薪资 double!

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐