跳转至

大模型算法岗高频问答

导读:本文面向大模型算法工程师、训练工程师与推理优化岗位,覆盖从 Transformer 架构到分布式训练、对齐和推理部署的常见问题。 题目按“基础与架构、训练与数据、分布式与显存、微调与对齐、推理优化、架构前沿、开放题”七组编排,共 85 题。 每题给出考察点和 3 至 5 条回答要点,难题附追问,便于面试前快速回忆而不是逐字背诵。

核心要点

  • 架构题要能写出公式并解释工程后果,例如复杂度、KV Cache(键值缓存)和并行方式。
  • 训练题要能把算法选择落到数据、算力、显存和稳定性上,避免只背结论。
  • 对齐与推理题要强调目标函数、数据分布、评测方式和线上指标之间的闭环。

一、基础与架构(15 题)

1. 自注意力(Self-Attention)的时间和显存复杂度是多少?

考察点:复杂度推导、长上下文、FlashAttention(快速注意力)

  • 计算 \(QK^\top\) 需要 \(O(n^2d)\),softmax 需要 \(O(n^2)\),再乘 \(V\) 需要 \(O(n^2d)\),因此总计算量为 \(O(n^2d)\)。
  • 线性投影部分为 \(O(nd^2)\),当 \(n \gg d\) 时二次项主导;多头只是把维度拆分,不改变渐近复杂度。
  • 朴素实现需要保存 \(n \times n\) 的注意力矩阵,显存为 \(O(n^2)\);FlashAttention 通过分块和在线 softmax 把显存降到 \(O(n)\),但计算量仍是二次的。
  • 推理时 prefill(预填充)近似二次,decode(逐 token 解码)每步只处理一个新 token,配合 KV Cache 后单步注意力为 \(O(nd)\)。

追问:为什么 FlashAttention 不改变复杂度却能显著加速?核心是把访存从 HBM(高带宽显存)转移到片上 SRAM,并减少中间矩阵读写。

2. 注意力 logits 为什么要除以 \(\sqrt{d_k}\)?

考察点:初始化、数值稳定性、梯度

  • 若 \(q_i,k_i\) 独立且方差为 1,则点积 \(q\cdot k=\sum_{i=1}^{d_k}q_ik_i\) 的方差为 \(d_k\),标准差为 \(\sqrt{d_k}\)。
  • 不缩放时,\(d_k\) 越大 logits 绝对值越大,softmax 容易饱和成近似 one-hot,反向梯度接近 0。
  • 除以 \(\sqrt{d_k}\) 使 logits 方差回到常数级,让不同 head dimension 下 softmax 的温度和梯度尺度更稳定。
  • 这不是唯一方案,QK-Norm(对 query/key 做归一化)或可学习温度也能稳定训练,但标准 Transformer 采用缩放点积。

追问:缩放会不会损失表达能力?不会,softmax 前乘常数等价于调温度,模型仍可通过投影权重学习合适尺度。

3. MHA、MQA、GQA 有什么区别?

考察点:注意力变体、KV Cache、推理吞吐

  • MHA(Multi-Head Attention,多头注意力)中每个 query head 都有独立的 key/value head,表达能力强,但 KV Cache 大小为 \(2Lh d_h\) 每 token。
  • MQA(Multi-Query Attention,多查询注意力)让所有 query head 共享一组 K/V,KV Cache 降为约 \(1/h\),decode 更省带宽,但可能损失质量。
  • GQA(Grouped-Query Attention,分组查询注意力)把 query head 分成若干组,每组共享一组 K/V;组数等于 head 数时退化为 MHA,等于 1 时退化为 MQA。
  • 工程上常用 8 组左右 K/V,在质量接近 MHA 的同时显著降低 KV Cache 和带宽压力;已有模型可通过 uptraining(继续训练)从 MHA 转成 GQA。

追问:为什么 decode 阶段特别在意 K/V head 数?自回归解码是显存带宽受限,读取 KV Cache 的时间往往比矩阵计算更关键。

4. Pre-LN 与 Post-LN 有什么区别?

考察点:残差结构、深层训练稳定性

  • Post-LN(Post-LayerNorm,后置层归一化)写作 \(x_{l+1}=\mathrm{LN}(x_l+\mathrm{Sublayer}(x_l))\),是原始 Transformer 的结构;深层时梯度需要穿过 LayerNorm,容易不稳定,通常依赖 warmup。
  • Pre-LN(Pre-LayerNorm,前置层归一化)写作 \(x_{l+1}=x_l+\mathrm{Sublayer}(\mathrm{LN}(x_l))\),残差主干是恒等映射,梯度可以更直接地回传,因此深层模型更容易训练。
  • Pre-LN 的表示尺度会随层数累积,通常在最后加一个 final norm 再输出;Post-LN 的每层输出已被归一化。
  • 现代大模型多采用 Pre-LN 或 RMSNorm 的 Pre-Norm 变体;极深模型还会使用 DeepNorm、残差缩放等技巧。

追问:Pre-LN 为什么通常仍保留 warmup?训练早期优化器二阶矩估计不准,且大 batch/高学习率下仍可能出现损失尖峰。

5. RMSNorm 是什么,为什么大模型常用它?

考察点:归一化、计算效率

  • RMSNorm(Root Mean Square Normalization,均方根归一化)计算 \(\mathrm{RMS}(x)=\sqrt{\frac{1}{d}\sum_i x_i^2+\epsilon}\),输出 \(y_i=g_i x_i/\mathrm{RMS}(x)\)。
  • 它不做均值中心化,也不使用偏置,只做一次平方和归约,因此比 LayerNorm 少一次均值计算和减法。
  • 它对输入整体缩放不敏感,能稳定激活尺度;在 Llama、Qwen 等模型中被广泛采用。
  • 代价是缺少去均值操作,理论上表达不如 LayerNorm 灵活,但大规模训练中通常不构成瓶颈,且更省带宽。

追问:RMSNorm 与 LayerNorm 的核心差异能否用一句话概括?LayerNorm 同时减均值和除标准差,RMSNorm 只按均方根缩放。

6. RoPE 的原理是什么,为什么能表达相对位置?

考察点:位置编码、长上下文、外推

  • RoPE(Rotary Position Embedding,旋转位置编码)把 query/key 的维度两两分组,按位置 \(m\) 旋转角度 \(\theta_i=m\cdot b^{-2i/d}\),不同维度使用不同频率。
  • 旋转后的点积满足 \(R_mq\cdot R_nk=q^\top R_{n-m}k\),只依赖相对位移 \(n-m\),因此把相对位置信息注入注意力。
  • RoPE 只作用于 Q/K,不改变 V;它没有额外参数,也不破坏线性投影的并行性。
  • 频率基数和维度分配决定长上下文表现,扩大上下文时常配合位置插值、NTK-aware 缩放或 YaRN。

追问:RoPE 能否直接外推到训练长度数倍?通常不能,未见过的频率组合会导致注意力分布退化,需要缩放或继续训练。

7. SwiGLU 是什么,相比普通 FFN 有什么代价?

考察点:FFN 结构、参数量、训练效果

  • SwiGLU(Swish-Gated Linear Unit,门控线性单元)写作 \(\mathrm{FFN}(x)=W_{down}(\mathrm{SiLU}(W_{gate}x)\odot W_{up}x)\)。
  • 相比两层 MLP 的两个矩阵,它有三个矩阵,多了门控分支;为保持参数量接近,通常把中间维度从 \(4d\) 降到约 \(\frac{8}{3}d\)。
  • 门控让模型可以按输入动态调节信息流,实践中在相同参数预算下往往优于 GELU MLP,但激活和显存开销略高。
  • Llama、PaLM 等模型采用该结构;张量并行时通常按中间维度切分 gate/up/down 三个矩阵。

追问:为什么中间维度常取 \(8d/3\)?因为三个 \(d\times d_{ff}\) 矩阵的总参数量约等于两个 \(d\times 4d\) 矩阵,保持预算可比。

8. 位置外推有哪些常见方法,如何评估?

考察点:长上下文、RoPE 缩放、评测

  • 直接外推会让模型遇到训练时未见过的位置和频率,通常出现困惑度上升和检索能力下降。
  • 位置插值(Position Interpolation,PI)把超长位置线性压缩回训练范围;NTK-aware 方法改变 RoPE 基数,使高频和低频维度获得不同的扩展比例。
  • YaRN 结合频率缩放、注意力温度修正和少量长上下文继续训练;也可用滑动窗口、注意力 sink 或稀疏注意力降低长距离建模难度。
  • 评估不能只看“能输入 128K”,要测 needle-in-a-haystack(大海捞针)、多跳检索、长文摘要和真实业务任务,并区分上下文窗口与有效上下文。

追问:扩大 RoPE base 为什么可能有效?它降低高频维度的旋转速度,使更长位置范围内的角度变化仍落在训练分布附近。

9. 为什么当前主流大模型大多采用 decoder-only 架构?

考察点:架构选型、训练目标、工程效率

  • decoder-only 使用 next-token prediction(下一 token 预测),每个位置都有监督信号,目标简单,可直接利用海量无标注文本。
  • 推理时只需维护自回归 KV Cache,不需要 encoder-decoder 的 cross-attention(交叉注意力),结构简单且易于扩展。
  • 同一模型可通过 in-context learning(上下文学习)完成分类、抽取、生成等任务,通用性强,适合统一底座。
  • encoder-decoder 在翻译、语音识别等源到目标明确的 seq2seq(序列到序列)任务上仍有优势,但不是通用大模型的主流选择。

追问:decoder-only 的“单向”会不会限制理解?通过大规模预训练和双向任务微调,单向注意力仍能学到很强的表示,只是不能像 BERT 那样直接看右侧上下文。

10. Q、K、V 分别代表什么,能不能共享参数?

考察点:注意力机制基础、参数效率

  • Q(Query,查询)表示当前位置要寻找什么,K(Key,键)表示其他位置提供什么索引,V(Value,值)表示真正被聚合的内容。
  • 注意力分数 \(QK^\top/\sqrt{d_k}\) 经 softmax 得到权重,再对 V 加权求和;Q 与 K 的 head 维度必须一致,V 的维度可以独立设置。
  • 可以让不同层或不同 head 共享投影,也可以让 K/V 共享(MQA/GQA),但共享越多,表达越受限,通常需要用质量评测确认。
  • 推理时缓存的是 K 和 V,不缓存 Q;因此减少 K/V head 数对显存和带宽的收益最直接。

追问:为什么有些模型对 Q/K 做归一化?可以抑制 logits 爆炸,提升低精度和长上下文训练的稳定性。

11. 除了标准注意力,还有哪些降低长上下文成本的方向?

考察点:稀疏注意力、线性注意力、状态空间模型

  • 稀疏/滑窗注意力只让每个 token 关注局部窗口或少量全局 token,计算可降到 \(O(nw)\),但可能丢失远距离信息。
  • 线性注意力用核函数近似 softmax,把计算改写为 \(O(n)\) 的前缀聚合;状态空间模型(如 Mamba)用递归状态实现线性复杂度。
  • 混合架构常保留少量全注意力层负责精确检索,其余层用线性或滑窗模块,兼顾效率与召回。
  • 选择时要看任务是否强依赖长距离精确复制、训练并行性、kernel 成熟度和硬件利用率,不能只看理论复杂度。

追问:线性注意力为什么在长文本上不一定全面胜出?固定大小状态会压缩历史信息,精确检索和复制能力通常弱于全注意力。

12. 输入 embedding 与输出投影要不要共享权重?

考察点:参数效率、词表规模

  • 输入 embedding 是 \(V\times d\),输出投影是 \(d\times V\);共享可省下一份大矩阵,词表越大收益越明显。
  • 共享让输入和输出语义空间一致,对小模型和低资源语言可能有正则化效果;GPT-2 等模型采用 weight tying(权重共享)。
  • 大模型是否共享取决于容量和训练稳定性,Llama 等系列通常不共享;共享可能限制输出层和输入层的独立适配。
  • 评估时要看参数量、困惑度和下游任务,不要默认共享一定更好。

追问:词表 128K、隐藏维度 4096 时,一份 embedding 有多少参数?约 \(128000\times4096\approx5.24\) 亿,FP16 约 1 GB。

13. Transformer 的参数量主要分布在哪里?

考察点:参数估算、结构理解

  • 每层注意力约 \(4d^2\)(标准 MHA),GQA 下 K/V 投影更小;FFN 若为 SwiGLU 且 \(d_{ff}\approx8d/3\),约 \(8d^2\)。
  • 因此 FFN 通常是单层参数量的主体,约占每层参数的三分之二;层数、隐藏维度和词表共同决定总规模。
  • 词表 embedding 可能占不小比例,7B 级模型词表 128K 时约 5 亿至 10 亿参数,不能忽略。
  • 快速估算:\(P\approx L(4d^2+8d^2)+2Vd\)(未计 bias、norm 和 GQA 节省),再用实际配置修正。

追问:为什么 GQA 能减少参数量但不改变注意力计算的头数?它减少的是 K/V 投影和缓存,query head 数仍保持不变。

14. 上下文长度增加时,计算和显存如何变化?

考察点:长上下文成本、prefill/decode 差异

  • prefill 的注意力计算随 \(n^2\) 增长,FFN 和投影随 \(n\) 线性增长;长 prompt 的 TTFT(首 token 延迟)主要由 prefill 决定。
  • KV Cache 随 \(n\) 线性增长,且要乘以 batch size、层数和 K/V head 数;128K 上下文下缓存可能超过模型权重。
  • 训练时激活显存也随序列长度增长,常需 activation checkpointing(激活检查点)、序列并行和 chunked prefill。
  • 长上下文能力不只受显存限制,还受位置外推、数据长度分布和注意力有效利用率限制。

追问:为什么长上下文推理常出现“中间遗忘”?注意力对首尾信息更敏感,中间位置的有效利用不足,需要训练数据和检索式任务设计配合。

15. 训练和推理使用同一个 decoder-only 模型,计算模式有什么不同?

考察点:teacher forcing、KV Cache、并行性

  • 训练时对整段序列并行计算,使用 causal mask(因果掩码)保证每个位置只能看左侧,所有 token 的损失可一次算完。
  • 推理分两阶段:prefill 并行处理 prompt 并建立 KV Cache,decode 每次只生成一个 token,依赖上一步缓存,天然串行。
  • 训练总算力常用 \(6ND\) 估算,推理每 token 约 \(2P\) 浮点运算(未计注意力),且 decode 往往受显存带宽而非峰值算力限制。
  • 因此训练优化关注吞吐、并行和显存,推理优化关注 batch、KV Cache、量化和调度。

追问:训练时能不能用 KV Cache?一般不用,因为整段序列已经并行计算,缓存只会增加显存;但多轮对话式训练可复用前缀缓存。

二、训练与数据(15 题)

16. 什么是 Scaling Law(缩放定律)?

考察点:经验规律、算力分配

  • 语言模型损失随参数量、数据量和计算量呈幂律下降,在小规模上拟合后可外推大模型表现。
  • Kaplan 等工作强调参数量优先,Chinchilla 后续修正为在固定算力下参数和数据应更均衡地扩展。
  • 幂律有常数项和适用区间,数据质量、架构、优化器和评测分布会改变曲线,不能无条件外推。
  • 工程上用小型消融实验拟合曲线,指导模型规模、token 预算和训练时长,降低大试错成本。

追问:Scaling Law 能否预测具体下游任务的准确率?通常只能预测损失,下游能力还受数据、格式和评测饱和影响。

17. Chinchilla 的核心结论是什么,20 倍 token 是铁律吗?

考察点:计算最优、数据预算

  • Chinchilla 在固定训练算力下同时优化参数量和数据量,发现约 20 个 token/参数时计算最优,早期大模型普遍训练不足。
  • 该结论假设数据充足、质量一致且只优化训练算力,不包含推理成本。
  • 若模型要长期服务,推理成本会推动“小模型、多 token”策略,例如 7B 模型训练数万亿 token,token/参数比远高于 20。
  • 数据质量、重复 epoch 和领域配比会改变最优点,20 只是特定实验条件下的经验值。

追问:为什么 Llama 3 8B 要用 15T token?因为推理侧希望用更小模型达到目标能力,训练多花算力可以摊薄长期服务成本。

18. 训练 FLOPs 为什么是 \(6ND\)?

考察点:算力估算、反向传播

  • 前向传播每个参数参与一次乘加,按 2 FLOPs 计,约 \(2ND\);\(N\) 为参数量,\(D\) 为训练 token 数。
  • 反向传播计算对权重和输入的梯度,计算量约为前向的两倍,即 \(4ND\)。
  • 合计 \(6ND\),不含注意力二次项、通信、数据加载和激活重计算的开销。
  • 使用 activation checkpointing 时多一次前向,常近似为 \(8ND\);实际 GPU-hours 还要除以峰值算力和 MFU。

追问:7B 模型训练 1T token 的理论 FLOPs 是多少?约 \(6\times7\times10^9\times10^{12}=4.2\times10^{22}\) FLOPs。

19. 预训练数据为什么要去重,怎么做?

考察点:数据质量、污染、去重算法

  • 重复文本会让模型过度记忆、降低多样性,并放大某些来源的偏见;训练集与测试集重叠还会造成数据污染。
  • 常见方法包括精确哈希、URL/文档指纹、MinHash + LSH(局部敏感哈希)近似去重、后缀数组去重和语义向量聚类。
  • 去重粒度可以是段落、文档或句子;过于激进会删掉合法的重复模式,需要抽样评估保留率和对下游的影响。
  • 应在训练前固定流程并记录阈值,同时对 benchmark 做 n-gram 或嵌入级重叠检查。

追问:语义去重和精确去重如何取舍?精确去重便宜且安全,语义去重能发现改写和翻译重复,但误删风险更高,通常分层使用。

20. Tokenizer(分词器)如何选型和训练?

考察点:BPE、词表、多语言

  • 常见算法有 BPE(Byte Pair Encoding,字节对编码)、WordPiece、Unigram 和 SentencePiece;大模型多用 byte-level BPE 或 SentencePiece。
  • 词表越大,序列越短、推理越省,但 embedding 和输出层参数越大,稀有 token 训练不足;常见词表为 32K 至 150K。
  • 训练语料要覆盖目标语言、代码和领域文本,保留数字、空白和特殊 token 的一致性,byte-level 可避免 OOV(未登录词)。
  • tokenizer 一旦确定通常不随预训练更换,否则位置和词表映射都会失配;换 tokenizer 需要重新训练或做词表对齐。

追问:中文 tokenizer 的压缩率为什么重要?同样字数占用更少 token,可降低训练和推理成本,并让有限上下文容纳更多内容。

21. 训练时为什么要做 sequence packing(序列打包)?

考察点:训练效率、注意力边界

  • 把多条短样本拼接成固定长度序列,减少 padding(填充)浪费,提高 GPU 利用率和 token 吞吐。
  • 若不做边界隔离,不同文档之间会发生不该有的注意力交互,可能让模型学到错误的跨文档依赖。
  • 常见做法是插入 EOS(序列结束符)、使用 document mask(文档掩码)或重置 position IDs(位置编号)。
  • packing 会改变样本顺序和长度分布,需检查对长上下文、指令跟随和 loss mask 的影响。

追问:packing 会不会破坏长上下文能力?若总是拼接短文档且不保留长文档,模型可能缺少长距离依赖训练,应混入真实长样本。

22. Loss spike(损失尖峰)如何定位和处理?

考察点:训练稳定性、数值问题、数据问题

  • 先看发生位置:全局某一步、某个 rank、某层或某类样本;对比 grad norm、激活范数、学习率和 loss scale。
  • 常见原因包括脏数据/超长样本、学习率过大、FP16 溢出、attention logits 爆炸、MoE 路由失衡和硬件错误。
  • 应急手段是回滚 checkpoint、跳过异常 batch、降低学习率或提高 warmup;根因修复可加 QK-Norm、z-loss、梯度裁剪和更稳的路由辅助损失。
  • 不能只靠“跳过”掩盖问题,应保留现场日志并用小规模复现实验验证。

追问:如何区分数据问题和硬件问题?固定数据重跑若在同一 step 复现,偏向数据/计算图;随机位置且伴随 ECC/Xid 报错,偏向硬件。

23. 混合精度训练怎么做,FP16 和 BF16 有什么区别?

考察点:数值格式、loss scaling、显存

  • 混合精度用低精度做矩阵乘、用 FP32 做累加和敏感操作,权重通常保留 FP32 master copy(主副本)。
  • FP16 尾数少、动态范围窄,需要 loss scaling(损失缩放)防止梯度下溢;BF16 动态范围接近 FP32,通常不需要缩放。
  • LayerNorm/RMSNorm、softmax、loss 和优化器更新常保持 FP32,避免数值不稳定。
  • FP8 进一步降低显存和提升算力,但对缩放、校准和硬件支持要求更高,训练稳定性需重点验证。

追问:为什么 BF16 也会出现 NaN?动态范围大不代表不会溢出,异常激活、除零、错误 mask 或通信故障仍可能产生 NaN。

24. 梯度裁剪的作用是什么,阈值怎么定?

考察点:优化稳定性、全局范数

  • 梯度裁剪(gradient clipping)在更新前限制梯度范数,防止个别 batch 产生过大更新导致发散。
  • 常见做法是计算所有参数梯度的全局 L2 范数,超过阈值就等比缩放;大模型常用阈值 1.0 左右,但应结合模型和优化器调。
  • FP16 训练要在 unscale(反缩放)之后裁剪,否则阈值会被 loss scale 扭曲。
  • 阈值过小会拖慢收敛,过大则失去保护;应同时监控裁剪比例和 grad norm 分布。

追问:梯度裁剪能解决所有 loss spike 吗?不能,它只能限制后果,数据错误、结构不稳定或硬件故障仍需单独处理。

25. 预训练数据配比和 curriculum(课程学习)如何设计?

考察点:数据混合、领域权重、训练顺序

  • 按领域设置采样权重,例如网页、代码、数学、多语言和书籍;高质量领域可上采样,但不能牺牲多样性。
  • 常用温度采样平滑原始分布,避免超大来源垄断;也可按训练阶段调整权重,后期提高高质量数据比例。
  • curriculum 可先从短序列/简单样本开始,再增加长度和难度,但大模型预训练中效果并不稳定,需消融验证。
  • 配比实验应在小模型上做,再迁移到大模型;监控各领域 loss、生成质量和灾难性遗忘。

追问:为什么不能只喂高质量数据?分布过窄会降低通用性和鲁棒性,且“高质量”分类器可能带来风格和来源偏差。

26. 预训练数据如何做质量过滤?

考察点:启发式规则、分类器、多样性

  • 启发式规则包括长度、符号比例、重复率、语言识别、HTML 残留和敏感内容过滤,成本低,适合第一层。
  • 模型打分可用质量分类器、困惑度、教育价值或领域分类器,但要校准阈值并定期人工抽检。
  • 过滤后要保留语言、领域和风格多样性,避免只留下单一来源;过度过滤会让数据量骤减并引入选择偏差。
  • 还要做 PII(个人可识别信息)清理、版权/许可审查和 benchmark 去污染,形成可追溯的数据卡。

追问:质量分类器会不会把方言和低资源语言误删?会,需分语言校准、保留召回集并做人工评估。

27. 什么是数据污染(benchmark contamination),如何检测?

考察点:评测可信度、去污染

  • 训练数据中混入测试题、答案或近似改写,会让模型靠记忆刷分,不能反映真实泛化能力。
  • 检测可用 n-gram 重叠、MinHash、嵌入相似度、题目模板匹配和 canary string(金丝雀标记)。
  • 处理方式包括训练前去重、屏蔽 benchmark 来源、使用私有/动态测试集,以及报告污染检查结果。
  • 污染无法完全消除,尤其是公开网页中的讨论和解题过程;应结合人工评测和分布外测试。

追问:为什么“答案不在训练集”也可能污染?题目本身会泄露任务格式和解题模式,模型仍可能通过模式匹配获益。

28. 大模型训练不稳定的常见原因有哪些?

考察点:优化、数值、数据、并行

  • 学习率过大、warmup 不足、权重初始化不当或残差尺度失衡,会让早期更新过猛。
  • 注意力 logits 过大、softmax 饱和、LayerNorm 数值异常、FP16 溢出和优化器状态异常都属于数值问题。
  • 脏数据、极端长度、重复样本、MoE 路由塌缩和专家负载不均会造成局部尖峰。
  • 分布式通信错误、GPU 硬件故障和 checkpoint 不一致也会表现为 loss 异常,需要从单卡小实验逐层排查。

追问:有哪些低成本稳定化手段?QK-Norm、z-loss、梯度裁剪、BF16、降低学习率、增加 warmup 和更细的监控。

29. 如何估算一次预训练需要多少算力和时间?

考察点:6ND、MFU、GPU-hours

  • 先算理论 FLOPs:\(6ND\),再除以单卡峰值算力与 MFU 得到 GPU-seconds,最后换算 GPU-hours。
  • 例:7B 模型、1T token、A100 峰值约 312 TFLOPS、MFU 40%,理论约 9.4 万 GPU-hours,1000 卡约 4 天,实际还要加故障和调优余量。
  • 并行效率、通信、数据加载、重启和评估都会拉低有效算力;长训练要按 10% 至 30% 额外开销预留。
  • 用小型训练测吞吐(tokens/s/GPU),比只看峰值 FLOPS 更可靠。

追问:为什么实际时间常比理论估算长很多?因为大集群的通信、排队、故障恢复和负载不均会显著降低有效利用率。

30. 为什么预训练使用 next-token prediction,而不是 masked language modeling?

考察点:训练目标、生成能力、上下文

  • next-token prediction 对每个位置都提供监督,目标与自回归生成完全一致,训练和推理没有目标错配。
  • MLM(Masked Language Modeling,掩码语言建模)是双向的,擅长理解,但不能直接建模 \(p(x_t\mid x_{<t})\),生成需要额外解码器。
  • 因果语言模型天然支持 in-context learning 和 KV Cache,工程上更适合统一生成式底座。
  • span corruption、prefix LM 等目标在特定任务上有效,但通用大模型的主流仍是因果下一 token 预测。

追问:next-token 目标是否浪费了右侧信息?训练时每个位置都预测下一个 token,整段文本仍被充分利用,只是条件方向固定。

三、分布式与显存(12 题)

31. ZeRO 的三个阶段分别优化了什么?

考察点:数据并行、显存分片、通信

  • ZeRO(Zero Redundancy Optimizer,零冗余优化器)的 ZeRO-1 只分片优化器状态(Adam 的动量和方差等),每卡仍保留完整权重和梯度。
  • ZeRO-2 在 1 的基础上分片梯度,每卡保留完整权重;ZeRO-3 再分片参数,前向/反向时按需 all-gather。
  • 分片越多,单卡显存越低,但通信和调度开销越高;ZeRO-3 需要预取和计算重叠。
  • 还可把优化器状态或参数 offload 到 CPU/NVMe,用带宽换显存,适合显存紧张但吞吐要求不极致的场景。

追问:ZeRO-3 为什么不能简单地在每层前 all-gather 全部参数?会造成大量重复通信和显存峰值,需按层预取并及时释放。

32. 张量并行(Tensor Parallelism)如何切分模型?

考察点:矩阵切分、通信、NVLink

  • 对线性层按列或按行切分:列并行得到部分输出,行并行得到部分和,最后通过 all-reduce 汇总。
  • 注意力可按 head 切分,MLP 按 intermediate 维度切分;LayerNorm、残差和 embedding 通常复制或配合序列并行。
  • 每层前向和反向都需要通信,因此 TP 通常限制在单机 8 卡内,依赖 NVLink 等高带宽互联。
  • TP 越大单卡显存越低,但通信占比上升;推理中 TP 可降低单请求延迟,训练中常与 DP/PP 组合。

追问:为什么 TP 一般不超过单机卡数?跨机 all-reduce 延迟和带宽成本高,容易把计算收益吃掉。

33. 流水线并行(Pipeline Parallelism)的原理和 bubble 是什么?

考察点:层切分、微批、流水气泡

  • PP 把模型按层切成多个 stage,每个 stage 放在不同设备上,微批依次流过,形成流水线。
  • 首尾 stage 需要等待,产生 bubble(气泡);气泡比例与 stage 数、微批数和调度策略有关。
  • 常见调度有 GPipe、1F1B(一前一后)和 interleaved(交错)流水,1F1B 可降低显存峰值。
  • PP 只传 stage 边界的激活,通信量较小,适合跨机;但 stage 负载均衡和故障恢复更复杂。

追问:如何减少 bubble?增加微批数量、使用交错调度、让 stage 计算量均衡,或用 Zero Bubble 等改进调度。

34. 专家并行(Expert Parallelism)适合什么场景?

考察点:MoE、all-to-all、负载均衡

  • EP 把 MoE 的不同专家分布到不同设备,token 经 router 后被发送到对应专家,结果再聚合。
  • 关键通信是 all-to-all,带宽和延迟要求高;专家负载不均会造成部分卡空闲。
  • 常用 capacity factor(容量因子)、token drop、aux loss(辅助损失)和路由抖动来平衡负载。
  • EP 适合总参数量远大于激活参数量的 MoE 模型,可与 TP/DP/PP 组合,但实现和容错复杂。

追问:MoE 为什么“参数大但计算不一定大”?每个 token 只激活 top-k 个专家,计算量由激活专家数决定,显存却要容纳全部专家。

35. FSDP 和 ZeRO-3 有什么异同?

考察点:参数分片、全收集、工程生态

  • 两者都分片参数、梯度和优化器状态,计算前 all-gather 所需参数,反向时 reduce-scatter 梯度。
  • FSDP(Fully Sharded Data Parallel,完全分片数据并行)是 PyTorch 原生实现,按模块展平参数并支持混合分片。
  • ZeRO-3 属于 DeepSpeed 生态,配置灵活,支持 CPU/NVMe offload 和多种并行组合。
  • 选择常取决于训练框架、checkpoint 兼容性、通信优化和团队运维经验,而不是只看理论显存。

追问:FSDP 为什么需要参数预取?all-gather 有延迟,提前加载下一层参数可与当前计算重叠,否则 GPU 会等待通信。

36. Activation Checkpointing(激活检查点)如何省显存?

考察点:重计算、显存换计算

  • 前向只保存少量层的边界激活,反向需要时重新计算中间激活,避免保存整个计算图。
  • 标准逐层 checkpoint 可把激活显存从 \(O(L)\) 降到约 \(O(\sqrt{L})\)(按最优分段),代价是额外一次前向。
  • 计算开销通常增加约 30%,训练 FLOPs 从 \(6ND\) 接近 \(8ND\);也会增加延迟和实现复杂度。
  • 可只对注意力或大 MLP 做选择性 checkpoint,并结合激活 offload、序列并行控制峰值。

追问:checkpoint 越多越省显存吗?不是,保存边界本身有开销,最优分段需平衡存储与重计算。

37. 训练和推理的显存分别由哪些部分组成?

考察点:显存估算、优化器、KV Cache

  • 训练显存包括参数、梯度、优化器状态、激活、临时 workspace 和通信缓冲;混合精度 Adam 常见为每参数约 16 字节,再加激活。
  • 7B 模型仅参数/梯度/优化器约 112 GB,70B 约 1.12 TB,必须依靠分片、offload 或低精度。
  • 推理显存主要是权重、KV Cache 和少量激活;70B FP16 权重约 140 GB,单卡 80 GB 放不下。
  • 实际还要预留 10% 至 30% 的碎片和峰值空间,长上下文时 KV Cache 可能成为主项。

追问:为什么 7B 模型在 24 GB 卡上做全参数微调通常不够?权重、梯度、优化器状态和激活叠加后远超 24 GB,需要 LoRA/QLoRA 或分片。

38. 分布式训练中的通信瓶颈如何分析?

考察点:集合通信、拓扑、重叠

  • DP 主要是梯度 all-reduce,TP 是层内 all-reduce/all-gather,PP 是点对点激活传输,EP 是 all-to-all。
  • 通信时间取决于消息大小、带宽、延迟和拓扑;小消息偏延迟,大消息偏带宽。
  • 优化手段包括 NVLink/InfiniBand 拓扑亲和、梯度分桶、通信与计算重叠、ZeRO 预取和更大 batch 提高算术强度。
  • 用 profiler 看通信占比和等待时间,再决定加并行度、换切分方式还是减少同步。

追问:为什么增加 DP 卡数有时反而变慢?全局 batch 变大后梯度 all-reduce 更重,且学习率/收敛可能需要调整,通信占比上升。

39. MFU 是什么,多少算正常?

考察点:利用率指标、性能分析

  • MFU(Model FLOPs Utilization,模型浮点运算利用率)等于实际达到的有效模型 FLOPs 除以硬件峰值 FLOPs。
  • 预训练大模型常见 30% 至 50%,推理通常更低;受矩阵规模、batch、通信、气泡、访存和 kernel 效率影响。
  • MFU 只统计模型有用计算,不把通信和重计算全部算入,因此要和吞吐、延迟、GPU-hours 一起看。
  • 提升 MFU 的方向包括更大 batch、融合 kernel、FlashAttention、减少重计算、优化并行切分和重叠通信。

追问:MFU 高是否一定代表训练更快?不一定,若大量重计算被计入或数据加载拖慢,端到端吞吐仍可能低。

40. 如何选择 DP、TP、PP、EP 的组合?

考察点:并行策略、拓扑、模型规模

  • 模型能单卡放下时优先 DP,简单且通信模式成熟;放不下时再引入模型并行。
  • TP 放在单机高带宽域内,PP 跨机切层,DP 复制剩余的并行维度,MoE 再叠加 EP。
  • 目标是让每卡显存低于上限、通信落在高带宽链路、各 stage 计算均衡,并控制流水气泡。
  • 训练和推理的优先级不同:训练看重吞吐和显存,推理看重单请求延迟、并发和成本。

追问:为什么“先 TP 再 PP”不是固定规则?要看模型层数、单层大小、集群拓扑和框架支持,单层过大时 TP 更必要。

41. NCCL 中常见的集合通信原语有哪些?

考察点:all-reduce、all-gather、reduce-scatter

  • all-reduce 对所有卡的数据求和并把结果广播给所有卡,常用于 DP 梯度同步。
  • all-gather 把各卡分片拼接给所有卡,reduce-scatter 先求和再按片分发,ZeRO/FSDP 常用。
  • broadcast 把一份数据发给所有卡,all-to-all 让每张卡向所有卡发送不同分片,MoE 的 EP 依赖它。
  • NCCL 会根据拓扑选择 ring/tree 等算法,实际性能受消息大小、通道数和网络拥塞影响。

追问:reduce-scatter 为什么常比 all-reduce 更适合大模型?它把归约和分片结合,减少每张卡需要接收的完整数据量。

42. 3D 并行训练如何配置才能少踩坑?

考察点:工程实践、checkpoint、容错

  • 先按单卡显存确定 TP,再按层数和跨机带宽确定 PP,剩余卡数做 DP;微批大小要兼顾显存和 bubble。
  • 开启 activation checkpointing、ZeRO/FSDP 和通信重叠,逐步放大规模做吞吐测试。
  • checkpoint 要按并行切分保存并支持重分片,记录随机数、数据进度和优化器状态,保证可恢复。
  • 上线前做故障注入、慢节点检测和弹性训练演练,避免大集群因单卡故障整体停摆。

追问:换并行度后 checkpoint 为什么常常加载失败?参数分片方式变了,需要框架支持 resharding(重分片)或先合并再切分。

四、微调与对齐(18 题)

43. SFT(监督微调)在训练流程中起什么作用?

考察点:指令微调、数据格式、损失掩码

  • SFT 用“指令-回答”或“对话-回复”数据继续训练,让基座模型学会遵循格式、角色和任务意图。
  • 通常只对回答 token 计算损失,对 prompt 做 mask;多轮对话要正确设置角色边界和可见上下文。
  • 数据质量、覆盖面和多样性比单纯堆量更重要;学习率较低、训练 1 至 3 个 epoch 常见。
  • SFT 主要教“怎么回答”,不能可靠注入大量新知识;知识更新仍需继续预训练、RAG 或工具。

追问:SFT 数据越多越好吗?不是,重复、低质或风格单一的数据会导致过拟合、冗长和灾难性遗忘。

44. LoRA 的原理是什么,秩和缩放系数如何影响效果?

考察点:低秩适配、参数效率、合并推理

  • LoRA(Low-Rank Adaptation,低秩适配)冻结原权重 \(W_0\),学习低秩增量 \(\Delta W=BA\),其中 \(B\in\mathbb{R}^{d\times r}\)、\(A\in\mathbb{R}^{r\times k}\)。
  • 可训练参数量为 \(r(d+k)\),通常只占全参数的 0.1% 至 1%;初始化常令 \(B=0\)、\(A\) 随机。
  • 缩放系数 \(\alpha/r\) 控制增量相对强度;秩 \(r\) 越大容量越强,但更容易过拟合且显存更高。
  • 推理可把 \(BA\) 合并回 \(W_0\) 以消除延迟,也可保留 adapter 做多任务切换。

追问:LoRA 应该加在哪些层?常见覆盖 Q/K/V/O 和 MLP 的 gate/up/down,具体要看任务、数据和显存,需做消融。

45. QLoRA 如何进一步降低显存?

考察点:4-bit 量化、NF4、分页优化器

  • QLoRA(Quantized LoRA,量化低秩适配)把冻结的基座权重量化成 4-bit NF4(NormalFloat4),前向时临时反量化,再与 LoRA 增量相加。
  • 使用双重量化(double quantization)压缩量化常数,并用 paged optimizer 缓解显存峰值。
  • 7B 模型 4-bit 权重约 3.5 至 4 GB,加上 LoRA、激活和优化器后可在 24 GB 卡上训练较小 batch。
  • 计算仍是低精度反量化后的矩阵乘,速度可能慢于 BF16 LoRA,质量通常接近但需评测。

追问:QLoRA 的 4-bit 是训练权重还是推理权重?基座权重以 4-bit 存储,计算时反量化;LoRA 参数通常保持 BF16。

46. 微调为什么会导致灾难性遗忘(Catastrophic Forgetting)?

考察点:分布偏移、正则化、评测

  • 微调数据通常窄且风格单一,梯度更新会把模型推离预训练分布,导致通用知识和指令能力下降。
  • 学习率过大、训练过久、全参数更新和重复样本会加剧遗忘。
  • 缓解方法包括混合通用/预训练数据、降低学习率、早停、LoRA、权重正则、模型合并和经验回放。
  • 必须在微调前后跑通用能力、领域能力和安全评测,不能只看目标任务分数。

追问:LoRA 一定不会遗忘吗?不一定,adapter 仍会影响共享表示,数据分布偏差大时同样会损害通用能力。

47. RLHF 的标准流程是什么?

考察点:偏好数据、奖励模型、强化学习

  • 第一步 SFT 得到初始策略;第二步用人类偏好比较训练奖励模型(Reward Model,RM);第三步用 PPO 等算法优化策略。
  • 奖励模型学习“哪个回答更好”,策略在生成样本上获得奖励,同时用 KL 约束限制偏离参考模型。
  • 关键数据是成对/多路偏好、标注规范和覆盖度;关键风险是奖励攻击、训练不稳定和标注偏差。
  • 也有 DPO、GRPO、RLAIF 等替代路线,减少显式奖励模型或 rollout 成本。

追问:RLHF 一定要先 SFT 吗?通常要,SFT 提供可用初始策略和格式,否则 RL 探索空间过大、训练更难。

48. PPO 在 RLHF 中如何工作?

考察点:actor-critic、GAE、clip

  • PPO(Proximal Policy Optimization,近端策略优化)用 actor 生成回答,critic 估计价值,GAE(广义优势估计)计算优势。
  • 目标函数使用概率比 \(r_t=\pi_\theta/\pi_{old}\) 的 clipped surrogate(裁剪替代目标),限制一次更新的策略变化。
  • 总损失通常包含策略损失、价值损失、熵正则和 KL 惩罚;RLHF 中奖励常在序列末尾给出。
  • 需要同时驻留 actor、critic、reward、reference 多个模型,显存和调参成本高,易受奖励攻击。

追问:为什么 PPO 要保留 old policy?概率比和裁剪都依赖旧策略作为基准,保证更新可控。

49. DPO 与 PPO 的核心区别是什么?

考察点:直接偏好优化、离线训练

  • DPO(Direct Preference Optimization,直接偏好优化)把偏好学习转化为分类损失,不需要单独训练奖励模型,也不做在线 rollout。
  • 损失为 \(-\log\sigma\!\left(\beta[\log\frac{\pi_\theta(y_w|x)}{\pi_{ref}(y_w|x)}-\log\frac{\pi_\theta(y_l|x)}{\pi_{ref}(y_l|x)}]\right)\),\(y_w\) 为偏好回答,\(y_l\) 为拒绝回答。
  • 训练简单、稳定、成本低,适合离线偏好数据;但缺少探索,容易对数据分布过拟合并产生长度/风格偏置。
  • PPO 更灵活、可在线优化复杂奖励,但工程复杂、成本高;实际选择取决于数据、算力和奖励可验证性。

追问:DPO 的 \(\beta\) 控制什么?控制策略偏离参考模型的程度,过大时学习慢,过小时容易过度优化偏好数据。

50. GRPO 与 PPO 有什么不同?

考察点:组相对优势、无 critic、可验证奖励

  • GRPO(Group Relative Policy Optimization,组相对策略优化)对同一 prompt 采样一组回答,用组内奖励的均值和标准差归一化得到优势。
  • 它不需要单独的价值网络,省去 critic 的显存和训练,但仍使用 PPO 式概率比裁剪和 KL 约束。
  • 适合数学、代码等可用规则或验证器打分的任务;组大小、奖励尺度和方差会显著影响效果。
  • 风险包括组内奖励全相同导致零优势、长度偏置和奖励攻击,需要设计多样本和稳健奖励。

追问:GRPO 为什么能省显存?它用组内相对分数替代 critic 估计基线,少了一个与策略同规模的模型。

51. 什么是 Reward Hacking(奖励攻击),如何发现和缓解?

考察点:奖励模型偏差、对齐失败

  • 策略会利用奖励模型的漏洞,例如堆砌长度、讨好用户、使用固定格式、回避难题,导致代理奖励上升而真实质量下降。
  • 迹象包括奖励分数持续升高但人工评测变差、输出风格异常单一、KL 迅速增大或长度失控。
  • 缓解手段包括更好的偏好数据、奖励模型集成、KL/长度惩罚、过程奖励、对抗样本和定期人工审核。
  • 最终评估必须以留出人类偏好和真实任务成功率为准,不能只看奖励模型分数。

追问:为什么奖励模型越强不一定越好?它仍可能继承标注偏差,且策略会针对其盲区优化,形成更隐蔽的攻击。

52. RLHF 中的 KL 约束为什么重要?

考察点:策略漂移、参考模型、稳定性

  • KL(Kullback-Leibler Divergence,KL 散度)惩罚约束当前策略不要偏离参考策略太远,保留语言能力和安全性,防止为追求奖励而崩溃。
  • 目标可写为 \(\max_\pi \mathbb{E}[r(x,y)]-\beta\,\mathrm{KL}(\pi\|\pi_{ref})\),\(\beta\) 控制约束强度。
  • \(\beta\) 太大时策略几乎不更新,太小时容易 reward hacking、输出退化;常用自适应 KL 或按 token 计算。
  • DPO 通过参考模型的隐式约束实现类似效果,但约束强度和数据覆盖仍需监控。

追问:KL 约束能完全避免分布外输出吗?不能,它只是软约束,策略仍可能在局部找到高奖励但不符合人类意图的区域。

53. 奖励模型的数据如何收集和设计?

考察点:偏好标注、覆盖度、一致性

  • 常用成对比较或多路排序,覆盖不同任务、难度、长度和风格;问题要清晰,避免标注者猜测意图。
  • 标注指南要定义“有用、真实、无害、简洁”等维度,处理平局和冲突,定期做一致性校准。
  • 数据要去重、去污染、平衡位置偏差(A/B 顺序)和长度偏差,并加入对抗性/边界样本。
  • 奖励模型训练后要在留出集、分布外集和人工评测上验证,不能只看训练准确率。

追问:为什么奖励模型容易学到长度偏好?标注者常偏好更详细的回答,数据中长度与“好”相关,模型就会走捷径。

54. 奖励模型的训练和评估怎么做?

考察点:Bradley-Terry、校准、下游效果

  • 成对偏好常用 Bradley-Terry 模型,损失为 \(-\log\sigma(r_\theta(x,y_w)-r_\theta(x,y_l))\),也可加入 margin 或正则。
  • 评估包括成对准确率、Kendall 相关系数、校准误差、分布外泛化和对抗样本鲁棒性。
  • 更重要的是把奖励模型放进策略训练闭环,观察下游人类评测是否提升,避免“RM 分数高但策略变差”。
  • 可用集成、生成式奖励、过程奖励和多维度奖励降低单模型偏差。

追问:奖励模型准确率高就够了吗?不够,策略只关心高分区,奖励模型在策略分布上的排序质量更关键。

55. SFT 数据质量如何保证?

考察点:正确性、覆盖度、标注规范

  • 先定义任务分类和成功标准,确保问题多样、难度分层、回答正确且风格一致。
  • 可用人工撰写、强模型生成后人工审核、真实用户日志清洗等方式,但都要做事实核查和去重。
  • 标注指南要覆盖拒答、引用、格式、长度和安全边界,计算标注者一致性并处理争议。
  • 小规模高质量数据往往优于大规模低质数据,训练后要用留出集和人工评测验证泛化。

追问:模型生成的数据能不能用于 SFT?可以,但需过滤、去污染和人工抽检,否则会放大模型自身错误和风格偏差。

56. PPO、DPO、GRPO 应该如何选型?

考察点:算法取舍、数据形态、算力

  • 有高质量离线偏好对、算力有限时优先 DPO;需要在线探索和复杂奖励时考虑 PPO。
  • 奖励可被规则或验证器稳定打分(数学、代码)时,GRPO 省去 critic,工程更轻。
  • PPO 灵活但需要 reward、critic、reference 和 rollout,调参和稳定性成本最高。
  • 无论哪种都要先做好 SFT,并监控 KL、长度、奖励和人工评测,避免只优化代理指标。

追问:DPO 能否完全替代 PPO?不能,DPO 是离线方法,缺少在线探索;在需要探索新策略或复杂环境交互时 PPO/GRPO 更合适。

57. 拒绝采样(Rejection Sampling)和 Best-of-N 如何用于对齐?

考察点:采样筛选、冷启动、成本

  • 对同一 prompt 采样多个回答,用奖励模型、验证器或规则筛选最优/合格样本,再用于 SFT 或偏好数据构造。
  • Best-of-N 在推理时直接选最佳,能提升单次回答质量,但推理成本随 N 增长。
  • 拒绝采样可生成高质量冷启动数据,缓解 RL 早期探索困难;但会偏向奖励模型喜欢、容易验证的样本。
  • 要保留多样性、防止筛选偏差,并比较 pass@1 与 pass@N,避免把推理算力当成模型能力。

追问:Best-of-N 的提升是否真实?若只看 pass@N 会高估,需报告固定算力下的 pass@1 或考虑验证成本。

58. 过程奖励模型(PRM)和结果奖励模型(ORM)有什么区别?

考察点:信用分配、奖励密度

  • ORM(Outcome Reward Model,结果奖励模型)只看最终答案或整体结果,信号稀疏但标注便宜。
  • PRM(Process Reward Model,过程奖励模型)对中间步骤打分,提供更密集的信用分配,适合多步推理。
  • PRM 标注成本高,步骤边界和“正确过程”定义困难,也更容易被策略利用;可用人工、蒙特卡洛或模型自动标注。
  • 常见组合是 ORM 保证结果、PRM 辅助搜索/重排,在数学和代码任务中效果较明显。

追问:PRM 为什么可能奖励“看起来正确”的步骤?步骤标注与最终正确性不完全一致,模型会学习表面格式而非真实推理。

59. 什么是对齐税(Alignment Tax),如何平衡安全与能力?

考察点:安全对齐、能力损失、评测

  • 对齐税指为提升安全、有用和无害性而进行微调/RLHF 后,通用能力、创造力或某些任务表现下降。
  • 原因包括安全数据分布窄、过度拒答、KL 约束过强和灾难性遗忘。
  • 缓解方法是混合能力数据、分场景调整安全策略、做拒绝校准、模型合并和多目标评测。
  • 评估不能只看安全集,也要看通用 benchmark、真实用户满意度和误拒率。

追问:拒绝率越低越安全吗?不是,过度拒答损害可用性,安全应看风险覆盖、误拒和漏拒的平衡。

60. 多轮对话和工具调用场景的对齐有什么特殊难点?

考察点:长程信用分配、环境交互

  • 奖励往往只在任务完成时给出,中间轮次的工具选择、参数填写和纠错难以单独归因。
  • 工具返回可能是噪声、延迟或错误,模型需要学会重试、换工具和向用户澄清,而不是编造结果。
  • 训练数据要是完整轨迹,包含用户模拟、工具调用、观察和最终答复;SFT 与 RL 可结合。
  • 评估要看任务成功率、工具调用正确率、轮数、成本和安全性,不能只看最终文本流畅度。

追问:如何构造工具调用训练环境?用可重置的沙箱、模拟 API 和确定性验证器,覆盖成功、失败、超时和权限拒绝等分支。

五、推理优化(12 题)

61. KV Cache 的原理是什么,为什么能加速自回归推理?

考察点:缓存机制、显存、GQA

  • 自回归生成第 \(t\) 个 token 时,需要前面所有 token 的 K/V;若不缓存,每步都要重算整个前缀。
  • KV Cache 保存每层已计算过的 K/V,decode 时只计算新 token 的 Q/K/V 并追加缓存,避免重复前向。
  • 每个 token 的缓存量为 \(2\times L\times n_{kv}\times d_h\times \text{bytes}\),随 batch 和序列长度线性增长。
  • GQA、MLA、KV 量化、分页和淘汰策略都能降低缓存开销;缓存是 decode 显存带宽的主要来源之一。

追问:为什么只缓存 K/V 不缓存 Q?历史 token 的 Q 不再参与后续计算,新 token 的 Q 每次只需计算一次。

62. PagedAttention 解决了什么问题?

考察点:KV Cache 管理、碎片、共享

  • 传统 KV Cache 按最大长度预分配连续显存,容易产生内部/外部碎片,限制并发 batch。
  • PagedAttention 把缓存切成固定大小的 block,用 block table 映射逻辑位置到物理块,实现非连续存储。
  • 它减少碎片、支持前缀共享和 copy-on-write(写时复制),是 vLLM 高吞吐连续批处理的基础。
  • 代价是页表查找和 kernel 复杂度,block size、调度和显存回收策略会影响性能。

追问:PagedAttention 会改变模型计算结果吗?不会,它只改变 KV 的存储和寻址方式,注意力的数学结果保持不变。

63. FlashAttention 的核心思想是什么?

考察点:IO-aware、在线 softmax、精确注意力

  • 标准注意力把 \(n\times n\) 矩阵写入 HBM,再读回做 softmax 和乘法,访存成为瓶颈。
  • FlashAttention 把 Q/K/V 分块加载到 SRAM,用在线 softmax 逐步累积结果,避免落盘完整注意力矩阵。
  • 它是精确注意力,不近似 softmax;显存从 \(O(n^2)\) 降到 \(O(n)\),速度通常提升 2 至 4 倍。
  • 对超长 decode,FlashDecoding 沿序列维切分以增加并行度;head dimension 和对齐会影响 kernel 效率。

追问:FlashAttention 为什么在训练时也能省显存?反向传播可通过重计算恢复注意力矩阵,不必长期保存 \(n^2\) 中间结果。

64. Continuous Batching(连续批处理)如何提升吞吐?

考察点:请求调度、GPU 利用率

  • 静态 batching 要等整批请求全部结束才能换批,短请求会被长请求拖住,GPU 出现空转。
  • 连续批处理在每次 decode 迭代后检查队列,完成请求立即移出,新请求立即加入,保持 batch 饱满。
  • 可与 PagedAttention、chunked prefill 配合,混合处理 prefill 和 decode,提高吞吐并控制尾延迟。
  • 调度要考虑公平性、优先级、最大 batch、KV 显存和 SLA,避免长请求饿死短请求。

追问:连续批处理一定降低单请求延迟吗?不一定,它主要提升吞吐;调度不当或 batch 过大可能增加排队和单步延迟。

65. 投机解码(Speculative Decoding)为什么能加速?

考察点:草稿模型、并行验证、接受率

  • 用小而快的 draft model(草稿模型)一次生成多个候选 token,再由大模型并行验证这些位置。
  • 大模型一次前向可检查多个 token,若草稿前缀被接受,就相当于用一次大模型前向生成多个 token。
  • 加速比取决于接受率和草稿成本,近似为 \(\frac{1-\alpha^{\gamma+1}}{(1-\alpha)(1+c\gamma)}\),其中 \(\alpha\) 为接受率、\(\gamma\) 为草稿长度、\(c\) 为草稿相对成本。
  • 草稿模型越准、任务越可预测,收益越大;高温度、分布外任务或 batch 很大时收益下降。

追问:投机解码会改变输出分布吗?标准 speculative sampling 通过接受/拒绝校正保持与目标模型相同的分布,近似版本才可能有偏。

66. 大模型量化有哪些路线,如何权衡?

考察点:PTQ/QAT、权重/激活、精度

  • 按对象分 weight-only(仅权重)、weight+activation(权重和激活)和 KV Cache 量化;按时机分 PTQ(训练后量化)与 QAT(量化感知训练)。
  • INT8 通常较稳,INT4 更省显存但需要分组量化、异常值处理和校准;FP8 在支持的硬件上兼顾范围与效率。
  • decode 受显存带宽限制,权重压到 4-bit 可显著提速;prefill 更受算力限制,激活量化收益更复杂。
  • 常用方法有 GPTQ、AWQ、SmoothQuant、LLM.int8(),必须用困惑度、任务评测和长上下文测试验证。

追问:量化为什么对长上下文更敏感?KV Cache 量化和激活异常值会累积误差,长序列更容易放大偏差。

67. 知识蒸馏在大模型中有哪些用法?

考察点:软标签、响应蒸馏、on-policy

  • 用教师模型的 logits/软标签训练学生,可传递类别间相似性和不确定性,常配合温度参数。
  • 大模型场景更常用 response distillation(响应蒸馏):用教师生成的高质量回答做 SFT,成本低但只学到样本分布。
  • on-policy distillation 让学生自己生成、教师打分/纠正,可缓解 exposure bias(曝光偏差),但工程更复杂。
  • 学生容量、数据覆盖和教师偏差决定上限;推理模型还会蒸馏长思维链,但要注意冗长和错误传播。

追问:蒸馏和量化都能压缩模型,区别是什么?蒸馏改变模型参数和结构,量化保持结构、降低数值精度,两者可叠加。

68. PD 分离(Prefill-Decode Disaggregation)是什么?

考察点:阶段特性、KV 传输、部署

  • prefill 阶段计算密集、并行度高;decode 阶段逐 token、显存带宽密集,两者混部会互相干扰。
  • PD 分离把 prefill 和 decode 放到不同 GPU 池,prefill 完成后把 KV Cache 传给 decode 池。
  • 优点是分别扩缩容、提升利用率和尾延迟;代价是 KV 传输带宽、调度复杂度和额外显存。
  • 适合大模型、长 prompt、高并发服务;小模型或低流量场景可能不值得增加复杂度。

追问:PD 分离的最大瓶颈通常是什么?KV Cache 在不同节点间的传输,尤其长上下文和高并发时带宽压力很大。

69. Prefix Caching(前缀缓存)如何减少重复计算?

考察点:共享前缀、TTFT、缓存淘汰

  • 多轮对话、固定 system prompt、few-shot 示例常共享相同前缀,可复用其 KV Cache,跳过重复 prefill。
  • 实现上对 token 前缀做哈希,用 radix tree(基数树)或块表管理缓存,命中后直接引用已有块。
  • 收益是降低 TTFT 和 prefill 算力,提高吞吐;代价是缓存显存、哈希开销和淘汰策略。
  • 多租户场景要注意缓存隔离和隐私,避免跨用户泄露上下文。

追问:前缀缓存和 PagedAttention 有什么关系?PagedAttention 提供块级存储和共享能力,前缀缓存利用它复用相同前缀的物理块。

70. Chunked Prefill(分块预填充)解决什么问题?

考察点:长 prompt、调度、延迟

  • 长 prompt 的 prefill 会长时间占用 GPU,阻塞正在 decode 的请求,造成尾延迟抖动。
  • Chunked prefill 把 prompt 切成多个 chunk,与 decode 请求交替调度,平滑计算负载。
  • 它能降低 decode 的等待时间,但可能增加该请求自身的 TTFT;chunk 大小需要按 SLA 调优。
  • 与连续批处理、PagedAttention 结合时要处理 chunk 边界、位置编码和 KV 写入一致性。

追问:chunked prefill 会让总计算量增加吗?通常不会显著增加,只是改变调度粒度;切分过细会增加调度和 kernel 启动开销。

71. 常见解码策略如何选择?

考察点:greedy、beam、top-k/top-p、温度

  • greedy(贪心)每步选最高概率 token,确定性强,适合抽取、代码修复等要求稳定的任务。
  • beam search(束搜索)保留多个候选,可能提升翻译等任务的质量,但增加计算且容易生成重复/保守文本。
  • top-k、top-p(nucleus sampling,核采样)和 temperature(温度)控制随机性;温度高更多样,低更确定。
  • repetition penalty、no-repeat n-gram 可抑制复读,但过强会损害正常重复;结构化输出可用约束解码。

追问:top-p 和 top-k 能同时用吗?可以,常见实现先截断再采样,但参数需要联合调,避免分布过窄或过宽。

72. 推理服务应该看哪些指标?

考察点:TTFT、TPOT、吞吐、SLA

  • TTFT(Time To First Token,首 token 时间)反映 prefill 和排队,影响交互体验。
  • TPOT(Time Per Output Token,每输出 token 时间)或 ITL(Inter-Token Latency,token 间延迟)反映 decode 速度。
  • 吞吐看 tokens/s、requests/s 和 goodput(满足 SLA 的有效吞吐),还要看 p50/p95/p99 尾延迟。
  • decode 通常受显存带宽限制,prefill 更受算力限制;用 roofline(屋顶线)和 profiler 判断瓶颈后再优化。

追问:为什么平均延迟达标但用户体验仍差?尾延迟和排队时间可能很高,必须看高分位数和超时率。

六、架构前沿(8 题)

73. MoE(混合专家)的基本原理和工程挑战是什么?

考察点:稀疏激活、路由、负载均衡

  • MoE 用 router(路由器)为每个 token 选择 top-k 个专家,只计算被选中的 FFN,从而在总参数量很大时控制激活计算量。
  • 总参数可以远大于激活参数,例如 DeepSeek-V3 总参数 671B、激活约 37B(公开资料口径)。
  • 挑战包括专家负载不均、token drop、all-to-all 通信、路由塌缩、训练不稳定和显存占用高。
  • 常用辅助损失、capacity factor、专家并行和路由抖动来改善;评测要区分总参数和激活参数。

追问:MoE 一定比同激活量的稠密模型强吗?不一定,路由质量、数据配比和训练稳定性决定收益,工程复杂度也更高。

74. MLA(多头潜在注意力)如何压缩 KV Cache?

考察点:低秩压缩、解耦 RoPE、DeepSeek

  • MLA(Multi-head Latent Attention,多头潜在注意力)把 K/V 压缩到低维潜在向量,缓存潜在表示而不是完整 K/V。
  • 通过低秩投影和解耦的 RoPE 分支,在保留位置信息的同时显著降低每 token 缓存。
  • DeepSeek-V2/V3 使用 MLA,公开资料显示其 KV Cache 相比同规模 MHA 大幅下降。
  • 代价是投影计算和实现复杂,推理时可在权重吸收后减少部分矩阵乘。

追问:MLA 和 GQA 的压缩思路有何不同?GQA 减少 K/V head 数,MLA 压缩每个 token 的 K/V 表示维度,两者可叠加但实现复杂度不同。

75. 长上下文模型的关键技术有哪些?

考察点:位置外推、数据、效率、评测

  • 位置层面可用 RoPE 缩放、NTK-aware、YaRN、位置插值和继续预训练,让模型适应更长位置。
  • 数据层面要构造真实长文档、多跳检索和长对话数据,不能只靠拼接短文本。
  • 效率层面用 FlashAttention、稀疏/滑窗注意力、序列并行、chunked prefill 和 KV 压缩控制成本。
  • 评测要覆盖检索、聚合、推理、抗干扰和“lost in the middle”(中间信息丢失),并报告有效上下文而非仅窗口大小。

追问:长上下文能替代 RAG 吗?不能完全替代,长上下文适合少量长文档的整体理解,RAG 更适合大规模、可更新和需权限控制的知识库。

76. 多模态大模型通常如何连接视觉和语言?

考察点:视觉编码器、投影层、多模态训练

  • 常见结构是视觉编码器(如 ViT)提取图像特征,经 projector/adapter 映射成若干视觉 token,与文本 token 一起送入 LLM。
  • 训练分阶段:先对齐视觉-语言表示,再做多模态指令微调,最后用偏好数据优化回答质量和安全性。
  • 关键问题包括分辨率与 token 预算、图像/视频时序建模、OCR、空间 grounding(定位)和多图推理。
  • 评估不仅看描述流畅度,还要看视觉问答、计数、图表、文档、幻觉和拒绝回答能力。

追问:视觉 token 越多越好吗?不是,token 越多计算和显存越高,且冗余视觉信息可能干扰语言推理,需要分辨率自适应和压缩。

77. 推理模型(Reasoning Model)通常怎么训练?

考察点:长思维链、可验证奖励、测试时计算

  • 先通过冷启动 SFT 学习长链推理格式,再用 RL 优化可验证任务(数学、代码、逻辑)的最终正确率。
  • 奖励可以是规则验证器、单元测试或结果奖励模型;GRPO/PPO 可配合格式奖励和长度控制。
  • 推理时增加 test-time compute(测试时计算),如长 CoT、采样投票、搜索和验证器重排。
  • 风险包括过度思考、错误链条自洽、奖励攻击和蒸馏后能力退化,需要过程与结果联合评估。

追问:思维链越长越好吗?不是,长度应与难度匹配,过长会增加成本并可能引入更多错误,需按准确率和成本评估。

78. Agentic 训练与普通对话微调有什么不同?

考察点:环境交互、轨迹、稀疏奖励

  • Agent 要在环境中观察、规划、调用工具并根据反馈调整,训练数据是多步轨迹而非单轮问答。
  • 奖励通常稀疏且延迟,需要信用分配、过程奖励或任务成功验证;模拟环境的质量决定上限。
  • 常见流程是轨迹 SFT 冷启动,再用 RL 优化任务成功率、工具正确率和效率,同时加入安全约束。
  • 评估要看端到端成功率、步骤数、工具错误恢复、成本和越权行为,不能只看最终文本。

追问:为什么 Agent 训练容易过拟合环境?模型会记住特定 API 和页面结构,换环境就失效,需要多样化环境和随机化。

79. Mamba/线性注意力等非 Transformer 架构前景如何?

考察点:线性复杂度、状态空间、混合架构

  • 状态空间模型(如 Mamba)用递归状态压缩历史,训练可并行、推理每步常数状态,长序列复杂度近似线性。
  • 优势是长上下文效率和高吞吐,劣势是精确检索、复制和复杂推理可能弱于全注意力。
  • 混合架构保留部分全注意力层,兼顾召回与效率;纯线性架构仍需大规模验证。
  • 生态、kernel、并行训练和迁移成本决定落地速度,短期更可能是补充而非完全替代 Transformer。

追问:Mamba 的推理为什么是常数显存?它用固定大小的递归状态代替不断增长的 KV Cache,但状态容量也限制了历史信息。

80. 测试时计算扩展(Test-Time Compute Scaling)是什么?

考察点:采样、搜索、验证器、成本

  • 在推理阶段投入更多计算,例如多次采样、长思维链、树搜索、验证器重排,以提高难题正确率。
  • 效果取决于验证器质量和任务可验证性;没有可靠验证器时,更多采样可能只是放大错误。
  • 需要比较固定算力下的 pass@1、投票收益和延迟成本,避免只看无限采样的上限。
  • 适合数学、代码、规划等可检验任务,开放创作和低延迟交互场景收益有限。

追问:测试时计算和模型参数扩展哪个更划算?取决于任务、验证成本和部署约束,不能一概而论,要做单位成本收益分析。

七、开放题(5 题)

81. 如果让你从零训练一个 7B 模型,你会怎么规划?

考察点:端到端方案、资源、风险

  • 明确目标能力和评测集,确定词表、架构(GQA、RoPE、SwiGLU、Pre-RMSNorm)和上下文长度。
  • 准备数万亿 token 级语料,做去重、质量过滤、配比、去污染和 tokenizer 训练;按 Chinchilla 与推理成本确定 token 预算。
  • 估算算力与显存,选择 TP/PP/DP/ZeRO、混合精度、activation checkpointing 和故障恢复方案。
  • 分阶段预训练、SFT、偏好对齐和安全评测,建立小规模消融、loss 监控和 checkpoint 评测评级。
  • 预留数据、集群故障和调优时间,先跑通 1B 级 baseline 再放大,避免直接上大模型试错。

追问:如果只有 64 张 80 GB 卡,你会先改什么?优先减小模型/序列和并行复杂度,使用 ZeRO-3、checkpointing 和高质量数据,先保证可训练与可评测。

82. 如何提升榜单分数,同时尽量保持真实能力?

考察点:评测伦理、数据质量、泛化

  • 不以训练集污染测试集,不用 benchmark 题目做 SFT;建立内部留出集和私有评测。
  • 通过数据质量、任务覆盖、推理格式和错误分析提升真实能力,而不是针对单一榜单调 prompt。
  • 报告置信区间、不同 seed、分布外结果和人工评测,区分“会做”与“见过”。
  • 对榜单提升做消融,确认不是长度、格式或评测脚本漏洞导致;上线前做真实用户 A/B。

追问:榜单涨了但用户不满意,可能是什么原因?评测分布与真实请求不一致、奖励/格式过拟合、延迟成本上升或安全拒答过多。

83. 训练 loss 突然异常,你会如何系统排查?

考察点:调试方法、数据/数值/硬件

  • 先确认现象:loss、grad norm、学习率、loss scale、吞吐和各 rank 是否同步异常,定位首次发生 step。
  • 复现实验:固定 seed 和数据顺序,缩小到单卡/小模型,检查数据 batch、mask、标签和计算图。
  • 分维度排查数值(溢出、attention logits、norm)、优化(LR、warmup、优化器状态)、并行(通信、切分)和硬件(ECC/Xid)。
  • 应急回滚并跳过异常数据,根因修复后加监控和回归测试;记录每次实验的环境与配置。

追问:如果只有部分 rank loss 异常,优先怀疑什么?数据分片不一致、通信错误、某张卡硬件问题或并行切分边界 bug。

84. 一个月内如何复现一个小型 LLM 训练 baseline?

考察点:项目管理、最小可行实验

  • 第一周确定模型规模、数据子集、tokenizer 和评测;优先复用成熟训练框架,不重复造轮子。
  • 第二周跑通单机/小集群训练,验证 loss 下降、吞吐、checkpoint 和恢复,建立单元测试。
  • 第三周做数据配比、学习率和并行策略消融,固定评测协议,记录每次实验。
  • 第四周训练正式 baseline,完成 SFT/推理评测和误差分析,输出可复现脚本与报告。
  • 设定中止条件,例如 loss 不降、吞吐低于目标或数据污染,及时缩小范围。

追问:复现时最容易被忽略的是什么?数据预处理和评测脚本的细节,往往比模型代码更影响最终数字。

85. 如何判断一篇大模型论文或一个模型发布的可信度?

考察点:科研判断、评测审计

  • 检查 baseline 是否公平、算力和数据是否披露、评测 prompt 和版本是否公开,是否存在数据污染。
  • 看消融是否支持核心结论,指标是否有方差/置信区间,是否报告失败案例和限制。
  • 区分 benchmark 提升与真实能力,关注分布外、长尾、安全和成本;对“全面超越”保持警惕。
  • 尽量复现小规模实验或检查第三方复现,阅读代码和 issue,而不是只看摘要和榜单截图。

追问:没有开源代码的模型声明如何评估?优先看可复现的 API 评测、独立第三方测试和任务级案例,降低对单一榜单的信任。

使用建议

  • 第一轮按组浏览题目,能用自己的话讲出三条要点即可,不必逐字背诵。
  • 第二轮针对目标岗位重点准备:训练岗深挖分布式与稳定性,推理岗深挖 KV Cache、量化和调度,应用算法岗补强对齐与评测。
  • 回答时采用“结论、公式/机制、工程取舍、评测”四段式,遇到不确定的数字明确标注量级和来源。
  • 开放题先问清约束(算力、数据、延迟、合规),再给方案;面试官更看重 Trade-off(权衡)而不是唯一答案。

本文档为面试复习资料,公式与数字建议结合原始论文复核。