月之暗面 大模型LLM 一面
这个面经是群里 小伙伴分享的 社招, 2年的工作经验 双非本9硕 将近40分钟都在问项目细节 项目这里我全部砍掉了
1. 自我介绍
2. 大模型在推理时通常分哪两个阶段,每个阶段关注点是什么
一般分成 prefill 和 decode 两个阶段。prefill 阶段主要是把输入 prompt 一次性编码进去,重点看吞吐、并行效率和长序列的计算开销;decode 阶段是逐 token 生成,重点看单步延迟、KV Cache 复用和 batch 调度效率。很多线上推理慢,不是模型本身慢,而是 prefill 太重或者 decode 阶段调度策略不合理。理解这两个阶段,才能知道为什么有些优化只对长输入有效,有些只对生成阶段有效。
3. 如果推理时出现 OOM,你会怎么排查
先看是不是显存被参数、激活、KV Cache 或者临时张量占满,再判断是训练阶段还是推理阶段。推理阶段最常见的原因是上下文太长、batch 太大、KV Cache 没做合理管理,或者某些算子产生了额外的临时开销。排查时一般先缩 batch、缩 context、关掉不必要的 profiling,再逐步定位具体层。很多 OOM 不是模型太大,而是调度策略把显存峰值顶上去了。
4. 输入 shape 为 (b, s, h),怎么估算 MHA 的计算量
MHA 的核心计算分成 QKV 投影、注意力分数计算、softmax、加权求和和输出投影几部分。若隐藏维度为 h,头数为 n_head,每头维度为 d = h / n_head,那么 QKV 投影大致是 O(b*s*h*h) 级别,注意力分数计算是 O(b*n_head*s*s*d),也就是常说的二次复杂度来源。最后的输出投影还是 O(b*s*h*h)。所以长序列场景里,真正的瓶颈通常不是 MLP,而是 attention 的 s^2。
def mha_flops(b, s, h, n_head):
d = h // n_head
qkv = 3 * b * s * h * h
attn = b * n_head * s * s * d
out = b * s * h * h
return qkv + attn + out
5. 介绍一下 vLLM 的 page attention 原理
vLLM 的 page attention 核心是把 KV Cache 切成固定大小的 page 来管理,而不是按连续大块显存直接分配。这样做的好处是显存利用率更高,减少碎片,同时能够支持更灵活的请求调度和连续批处理。它本质上是把“变长序列的缓存管理”做成了类似分页系统的思想,避免长短请求互相阻塞。对在线推理来说,这种设计能明显提升吞吐和资源利用率。
6. 讲一下 FlashAttention 的原理
FlashAttention 的核心不是“更快算 attention”,而是“避免把完整 attention matrix 落到显存里”。它通过分块计算、在线 softmax 和重计算,减少 HBM 访问量,把很多中间结果保留在更快的片上存储里。这样做的本质是用更少的内存带宽换更好的速度和更低的显存占用。长序列场景下,它的收益非常明显,因为传统 attention 的瓶颈往往就是读写中间矩阵。
7. 为什么 RMSNorm 在大模型里比 LayerNorm 更常见
RMSNorm 去掉了均值中心化,只保留方差归一化,计算更简单,开销更低,而且在大模型里通常足够稳定。相比 LayerNorm,它少了一部分计算和同步开销,尤其在大规模训练和推理里更有工程优势。很多模型选择 RMSNorm,不是因为它理论上一定更强,而是因为它在稳定性和效率之间更平衡。工程里常见的选择逻辑就是:只要效果差不多,就选更省的。
8. 为什么很多 Transformer
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
本专栏聚焦 AI-Agent 面试高频考点,内容来自真实面试与项目实践。系统覆盖大模型基础、Prompt工程、RAG、Agent架构、工具调用、多Agent协作、记忆机制、评测、安全与部署优化等核心模块。以“原理+场景+实战”为主线,提供高频题解析、标准答题思路与工程落地方法,帮助你高效查漏补缺.
查看10道真题和解析