17道大模型后训练高频面试题,覆盖Attention到FSDP全链路
大模型后训练面试准备:17 道高频题,从 Attention 到 GRPO、FSDP (部分思路和题目是网友启发 感谢)
如果面试 LLM Post-training / Training Infra / RL Engineer,建议按这条路线准备: Attention 架构 → SFT / RL / OPD → GRPO → KL 散度 → FSDP / ZeRO。 每道题都按三个层次回答:解决什么问题、具体怎么做、有什么代价。
大模型后训练面试 01/17:标准 Attention 的瓶颈
标准 Self-Attention 怎么工作? 先把输入映射成 Query、Key、Value,计算 Q 和 K 的相似度,经 Softmax 得到权重,再对 V 加权求和。 公式: Attention(Q,K,V) = Softmax(QKᵀ / √dₖ)V 序列长度为 L 时,全注意力的计算量与 L² 同阶。朴素实现还会产生 L×L 的注意力矩阵,但 FlashAttention 可以避免显式保存完整矩阵。
推理阶段还有 KV Cache:模型需要缓存历史 token 的 Key 和 Value,上下文越长,缓存越大。 要区分两个阶段: Prefill 一次处理整个输入,主要涉及矩阵计算和注意力计算。 Decode 逐 token 生成,需要反复读取历史 KV Cache,往往更受显存带宽和访存效率影响。 很多 Attention 优化,都是在降低缓存成本、减少注意力计算,或者改进状态更新方式。
大模型后训练面试 02/17:MHA、MQA、GQA 有什么区别?
三者的核心区别是 Query Head 与 Key/Value Head 的对应关系。 MHA:每个 Query Head 都有独立的 Key 和 Value Head,表达能力强,但 KV Cache 较大。 MQA:所有 Query Head 共享一组 Key 和 Value,KV Cache 最小。 GQA:多个 Query Head 共享一组 Key 和 Value,是两者之间的折中。
假设有 32 个 Query Head: MHA 对应 32 个 KV Head;GQA 可以对应 8 个;MQA 则只有 1 个。 其他条件相同的情况下,KV Cache 大致随 KV Head 数量线性变化。 注意:GQA 主要减少缓存和推理访存开销,并不会自动把全注意力的计算复杂度从 O(L²) 降到 O(L)。 这也是为什么 GQA 常用于兼顾模型质量与推理效率的架构。
大模型后训练面试 03/17:DeepSeek 的 MLA 为什么能省显存?
MLA,全称 Multi-head Latent Attention,是 DeepSeek-V2 引入、DeepSeek-V3 延续使用的注意力架构。 传统 MHA/GQA 会缓存每层的 Key 和 Value。MLA 则把相关信息压缩到低维潜在表示中,推理时主要缓存这个压缩表示,再通过相应映射参与注意力计算。 它还采用了解耦的位置编码设计,将位置相关信息与内容表示的压缩处理分开。
核心收益:减少 KV Cache,缓解长上下文推理的显存压力,并为更大的 Batch Size 或更多并发请求腾出空间。 DeepSeek-V2 论文报告,相比其 DeepSeek 67B 基线,KV Cache 减少了 93.3%。这是特定模型和配置下的结果,不代表 MLA 相比所有 GQA 模型都固定节省 93.3%。 GQA 通过减少 KV Head 压缩缓存;MLA 则通过低维潜在表示压缩 Key/Value 信息。 论文:
大模型后训练面试 04/17:Qwen 为什么混合线性注意力和标准注意力?
以 Qwen3-Next 和 Qwen3.5 为例,它们采用混合注意力架构,把 Gated DeltaNet 与 Gated Attention 结合起来。 标准全注意力需要计算当前 Query 与历史 Key 的相关性。Gated DeltaNet 则属于线性注意力路线,利用递归状态更新和 Delta Rule 处理历史信息,并通过门控调节信息的保留和更新。
合适的实现下,线性注意力的计算量可以随序列长度近似线性增长,也不必像传统 KV Cache 那样为每个历史 token 保存一组 Key 和 Value。 但代价是:固定大小的递归状态并不天然具备标准全注意力对任意历史 token 进行精确检索的能力。 因此,混合架构试图兼顾两点:多数层降低长序列处理成本,部分全注意力层保留内容检索能力。 注意,Gated Attention 的输出门控,与 Gated DeltaNet 的递归状态更新不是同一种机制。 参考:
大模型后训练面试 05/17:DeepSeek DSA 和 Qwen QSA 有什么区别?
两者都属于稀疏注意力:不让每个 Query 都完整计算与所有历史 token 的注意力,而是先筛选值得关注的内容。 DeepSeek DSA 使用轻量级 Lightning Indexer 为历史 token 打分,再选择 Top-K token 参与后续注意力计算。 这里要区分:MLA 主要压缩 KV Cache,DSA 主要减少实际参与注意力计算的历史 token。 Qwen QSA 则侧重对压缩后的 Key 块打分,再选择相关的连续 token 块。块级选择有利于减少索引开销、改善内存局部性。
简单理解: DSA 更侧重细粒度 token 选择;QSA 更侧重块级选择。 还要注意,线性注意力和稀疏注意力不是一回事。线性注意力通过递归状态更新降低序列处理成本;稀疏注意力通过筛选历史内容减少注意力计算。 参考:
大模型后训练面试 06/17:为什么做后训练也要懂 Attention?
因为模型架构直接影响显存占用、推理吞吐量和 RL Rollout 成本。 RL 训练通常需要针对同一个 Prompt 生成多条回答,再进行评估和策略更新。上下文越长、回答越长,Rollout 消耗的计算资源和缓存通常越多。 MLA 可以减少 KV Cache;线性注意力改变长序列的计算与状态存储方式;稀疏注意力减少实际参与注意力计算的历史 token。 这些改进可能提高并发量,或为更长上下文留出资源。
但推理效率提升,不等于训练速度按相同比例提升。训练还要考虑反向传播、激活显存、训练内核、跨卡通信,以及 RL 系统中的权重同步和推理引擎。 好的回答不只是复述架构名称,还要讲清论文设计如何影响实际训练系统。
大模型后训练面试 07/17:SFT、RL、OPD 有什么区别?
三者最大的区别,是学习信号不同。 SFT:用人工标注或合成的标准答案做监督训练,通常使用 Token 级交叉熵,提高目标答案的生成概率。 RL:模型生成回答或执行任务,再根据奖励信号更新策略。奖励可以来自奖励模型、规则验证器或环境反馈。它优化期望奖励,而不只是模仿固定答案。 OPD(On-Policy Distillation):学生模型按照自己的当前策略生成回答,再由教师模型为这些轨迹提供监督,通常利用 Token 级概率分布或 Log Probability。
一句话总结: SFT 学标准答案;RL 根据奖励调整行为;OPD 通过教师监督改善学生策略。 OPD 的具体实现并不唯一,教师反馈、分布距离和监督粒度都可能不同。面试时最好先确认讨论的是哪种方法。
大模型后训练面试 08/17:GRPO 是什么?和 PPO 有什么区别?
GRPO,全称 Group Relative Policy Optimization,是 DeepSeekMath 论文提出的策略优化方法。 流程很直观: 针对同一个 Prompt 采样 G 条回答;计算每条回答的奖励;根据组内奖励构造相对 Advantage;最后用策略比率和裁剪目标更新模型。 一种经典的组内标准化形式是: Aᵢ = (rᵢ − mean(r)) / (std(r) + ε) 奖励高于组内平均水平的回答通常获得正 Advantage,低于平均水平的回答通常获得负 Advantage。
GRPO 与标准 PPO 的关键区别:PPO 通常使用独立的 Value Model 估计 Advantage;GRPO 则利用同一 Prompt 下多条回答的相对奖励,不需要单独训练 Critic 来估计价值函数。 这可以减少一部分显存和计算开销,但每个 Prompt 仍需要多条 Rollout,生成成本可能很高。 论文:
大模型后训练面试 09/17:GRPO 为什么需要 Probability Ratio 和 Clipping?
GRPO 需要比较新策略和生成样本时所使用的旧策略。 对第 i 条回答的第 t 个 Token,可以定义: ρᵢₜ = πθ(token | context) / πold(token | context) 如果某个 Token 的 Advantage 为正,提高它在新策略中的概率通常有利于目标;如果 Advantage 为负,降低它的概率通常有利于目标。
但策略更新不能无限放大,否则模型可能因为一批样本而大幅偏离旧策略,训练变得不稳定。 因此,GRPO 沿用 PPO 的 Clipping 机制,将 Probability Ratio 裁剪到由 ε 控制的范围,并使用裁剪前后目标中更保守的一项。 直观理解:鼓励模型向奖励更高的方向更新,但限制单次更新的幅度。 实际实现中的 Token 级目标、裁剪方式和 KL 处理可能不同,面试时要注意具体版本。
大模型后训练面试 10/17:GRPO 训练有哪些常见问题?
第一,奖励信号失效。同一个 Prompt 的多条回答获得几乎相同的奖励,组内 Advantage 可能接近零,训练缺少有效的区分信号。 第二,Reward Hacking。模型学会利用奖励函数的漏洞,而不是真正完成任务。 第三,Rollout 成本高。每个 Prompt 要生成多条回答,组大小和回答长度都会影响推理开销。 第四,策略更新不稳定。策略偏离过快,可能导致 KL、概率比率和奖励指标异常。 第五,奖励稀疏。如果只根据最终答案是否正确评分,长推理中哪些步骤真正有帮助可能很难判断。
因此,优化 GRPO 不能只看训练奖励是否上涨,还应观察奖励质量、采样效率、KL、响应长度、梯度范数,以及独立评测集上的表现。
大模型后训练面试 11/17:OPD 和 GRPO 如何选择?
核心区别是学习信号。 GRPO 利用奖励信号,比较同一个 Prompt 下多条回答的相对表现,再根据 Advantage 更新策略。 OPD 利用教师模型的监督。学生自己生成回答,教师再对这些轨迹提供指导,通常包括 Token 级概率信息。 GRPO 更依赖有效的奖励函数;OPD 通常需要教师模型,但不一定需要显式奖励函数。 成本上,GRPO 需要多条 Rollout 与评估;OPD 需要学生生成轨迹、教师推理及分布监督。
两者不是二选一。可以先用 SFT 建立基本能力,再用 OPD 迁移教师的行为,最后通过 RL 优化可验证奖励。 也可以准备 DPO:它通常通过偏好数据直接构造优化目标,不需要执行完整的在线 RL Rollout 循环,但仍受数据质量和分布偏差影响。
大模型后训练面试 12/17:什么是 KL 散度?
KL 散度衡量两个概率分布的差异: D_KL(P || Q) = Σₓ P(x) log(P(x) / Q(x)) 它非负,但一般不对称,因此不是严格意义上的距离。 在 RLHF 或 GRPO 中,KL 常用于约束当前策略不要偏离参考策略太远。一个简化目标是: 目标 = 期望奖励 − β × KL(当前策略 || 参考策略) β 控制奖励优化与策略约束之间的权衡。
β 太小,模型可能为了提高奖励而大幅偏离参考分布,产生奖励投机或能力退化。 β 太大,模型又可能受到过强约束,难以学习新的推理能力。 实际算法可能使用不同的 KL 方向、Token 级估计方法和正则形式。面试时不只要背公式,还要解释 KL 在约束什么。
大模型后训练面试 13/17:Forward KL 和 Reverse KL 有什么区别?
在 OPD 中,常用分布损失让学生模型学习教师模型的输出分布,但 KL 的方向很重要。 Forward KL: D_KL(π_teacher || π_student) 它要求学生覆盖教师分布中的概率质量,通常被直观描述为偏向 Mode Covering。 Reverse KL: D_KL(π_student || π_teacher) 它从学生分布出发衡量与教师分布的差异,通常被直观描述为偏向 Mode Seeking。 这只是经验性概括,并不是所有模型和损失设置下都成立的绝对规律。
还有一个容易混淆的地方:OPD 使用学生生成的轨迹,并不意味着它一定使用 Reverse KL。具体方案可能采用 Forward KL、Reverse KL 或其他损失。 面试时要说明 KL 的方向,以及期望是在什么分布下计算。
大模型后训练面试 14/17:为什么需要 FSDP 或 ZeRO?
训练大模型时,GPU 不只要保存参数,还要保存梯度、优化器状态和前向传播的中间激活。 以 Adam 为例,一阶和二阶动量也会占用大量显存。所以参数能放进 GPU,不代表完整训练状态也能放进去。 FSDP 和 ZeRO 的核心思路,是把参数、梯度和优化器状态分片到多个 GPU,降低单卡长期保存的状态规模。
但它们不能自动解决所有 OOM。激活、长序列 Attention、通信缓冲区,以及 RL Rollout 阶段的 KV Cache,仍然可能占用大量显存。 排查问题时,先判断显存到底花在哪里,再决定使用分片、激活重计算、注意力优化,还是降低推理并发。
大模型后训练面试 15/17:ZeRO-1、2、3 有什么区别?
ZeRO 是 DeepSpeed 提供的大模型训练状态分片技术,三个阶段逐步增加被切分的状态。 ZeRO-1:切分优化器状态,梯度和模型参数通常仍然复制。 ZeRO-2:进一步切分梯度,模型参数通常仍然复制。 ZeRO-3:继续切分模型参数,前向和反向计算时按需收集所需参数。
切分越彻底,单卡长期驻留的训练状态通常越少,但通信和参数管理也会更复杂。 ZeRO-3 通常需要 All-Gather 等通信操作。如果跨卡通信很慢,或者参数收集安排不合理,通信开销可能抵消一部分显存收益。 所以不能只看能否把模型装进去,还要看最终吞吐量。 官方资料:
大模型后训练面试 16/17:FSDP 和 ZeRO-3 有什么关系?
FSDP 是 PyTorch 的 Fully Sharded Data Parallel 方案,与 ZeRO 的目标相似:把训练状态分片到多个 GPU,降低单卡显存需求。 以 FSDP Full Shard 为例: 每张卡长期保存自己负责的参数分片;前向计算前通过 All-Gather 收集需要的参数;计算结束后可重新分片;反向计算时必要时再次收集参数;梯度则通过 Reduce-Scatter 等机制归约并分片。
FSDP Full Shard 与 ZeRO-3 的目标和分片粒度相近,但参数生命周期、通信编排和 API 并不完全相同。 还有版本差异:PyTorch 同时提供传统 FSDP1 和 FSDP2 的 fully_shard()。面试时最好说明使用的版本,不要把两个版本的接口混为一谈。 资料:
大模型后训练面试 17/17:FSDP / ZeRO-3 能解决所有 OOM 吗?
不能。它们主要降低训练状态的显存占用,其他显存来源还有: Activation Memory:反向传播需要的中间激活。 Attention Memory:长序列注意力计算及临时张量。 Communication Buffers:参数收集和梯度归约的临时内存。 Rollout KV Cache:RL 生成长回答时的推理缓存。 Inference / Training Weight Copies:某些 RL 系统会同时维护训练和推理引擎使用的模型权重。
排查 OOM 时,先确认错误发生在前向、反向、优化器更新、参数收集还是 Rollout 阶段。 激活占用高,可以考虑 Activation Checkpointing;长序列可以优化 Attention 实现;Rollout 占用高,可以降低并发、控制生成长度;训练状态占用高,再考虑 FSDP 或 ZeRO。 后训练工程既是算法问题,也是 GPU 内存、通信和训练系统问题。