这 8 个题,我印象里几乎每轮大模型岗位面试都会出现。不是那种可以靠背八股糊弄过去的题,而是那种面试官把一个概念拆开揉碎,一层一层往下追问,答不好整个人的水平就暴露的题。说“直接淘汰”一点不夸张,因为这些问题考察的不是你有没有听说过一个名词,而是你有没有真正跑过模型、算过显存、看过损失曲线、对比过评测集。
我梳理一下我自己面试别人和被别人面时反复碰到的高频题,按底层机制、训练、应用三个梯度来拆。每一题都会说一下面试官到底想听什么、常见的淘汰答案是什么、以及什么样回答能让你在追问里撑住。
1. LLM面试的第一个分水岭:不是背没背过,是能不能把原理讲成自己的话
很多候选人在简历上写着“精通大模型训练、熟悉Transformer架构、了解RAG”,但一到反问环节就开始出问题。比如你问他“为什么Transformer要位置编码”,他能说出“因为注意力没有顺序信息”,你再问他“那RoPE的旋转角度到底怎么计算的”,他就卡住了。这种状态,面试官心里基本已经给你画了一个圈:停留在应用层,没深入源码,也没亲手推过公式。
为什么这8个题能起到淘汰作用?因为它们覆盖了一个大模型工程师日常真正要面对的事:序列位置怎么表征、推理时显存怎么算、数据清洗怎么做、训练怎么稳定收敛、模型产生了幻觉怎么处理、上下文窗口变长之后能力是否跟着涨、用什么指标证明模型确实变好了。这些问题不是单独的八股,而是彼此咬着的一条链。你把一个点彻底讲清楚,旁边几个点也会跟着通;一个点含糊,旁边几个点一定也被带歪。
我自己做面试官时,更偏爱一种回答模式:先给结论,再补推导,最后主动说出局限性。比如讲KV Cache,直接先把公式写出来,再给一个具体模型的数字,然后主动说“这个估算还没把激活值算进去,而且如果用了GQA,KV内存能再压几倍”。这种讲法一出来,我基本不会再追问太多,因为他已经证明自己思考过全链路。反之,如果回答永远是“我项目里用过”“我们当时这么调的”,但问不出背后原因,那基本就到下一轮拜拜了。
下面进入正题。这些题每一道都有明确的考核意图,我尽量按真实对话的语气还原。
2. 从位置编码到显存预算:底层机制题考的是你会不会“算账”
2.1 问题一:为什么需要位置编码?RoPE到底是绝对位置编码还是相对位置编码
这是个典型的“第一题”。面试官这么问,不是为了让你背定义,而是想确认你理解Transformer架构是不是流于表面。
标准回答先说为什么:自注意力机制本身是对输入序列“无感”的,把两个token互换位置,注意力计算得到的数值完全一样。模型根本不知道哪个词在前面、哪个词在后面。所以必须显式把位置信息注入进去,让模型能感知顺序。
然后面试官肯定会追问:“那你怎么注入?RoPE的本质是什么?”这里就出现第一个淘汰点了。你会听到很多候选人背答案:RoPE是旋转位置编码,把每个token的位置旋转一下。等面试官问“那为什么旋转之后就能表示相对位置”,立刻就答不上来。
我通常会给一个偏直觉的解释:RoPE把向量分成若干二维子空间,每个子空间按位置的某种角度旋转。旋转这个操作有一个很好的性质:两个向量做点积时,夹角只跟它们在旋转角度上的差值相关。你设计旋转角度跟位置下标成正比,那么点积结果就只跟两个token位置的差有关,也就是天然带上了“相对位置”的信息。所以你既可以说RoPE用了绝对位置的下标来算角度,也可以说它最终编码的是相对距离,关键在这道点积的桥梁。
到这里,真正拉开差距的追问来了:“RoPE外推性不好,你一般怎么办?”这个问题的背后是实际部署里的长文本需求。模型训练时最长见过4096个位置,你推理时给它塞了8192,它就会崩。常见方案是位置插值,把新的位置下标压缩回训练过的区间;还有NTK-aware类的方法,通过修改旋转角度的缩放比例,让高频维度和低频维度分开处理,从而把外推范围撑大。面试官如果听到你不仅能说出“插值”这个词,还能说出“这一招本质上是在重新数轴刻度”,就已经很满意了。
我建议你在回答这类问题时随身带一个具体数字。比如“我们当时把一个8K的模型外推到32K,用动态NTK方式,困惑度从9.6降到8.8,但KV缓存涨了四倍,最后是靠RAG截断缓解的”。这种话一出口,面试标准瞬间就不一样了。
2.2 问题二:7B模型跑一个100K上下文,KV Cache要吃多少显存?写出你的估算过程
这道题考察的其实是动手算账的能力。很多候选人对显存开销毫无概念,简历上写“部署过LLM”,但问他“权重、激活值、KV Cache各占多少”,他答不上来。
先给一个通用公式。KV Cache的大小等于:
2(K和V各一份) × 层数 × KV头数 × 每头维度 × 序列长度 × 每字节数
为什么K和V要各一份?因为解码生成下一个token时,已有的K和V要被反复用来计算注意力,每次重新算一遍太浪费,所以缓存下来。K和V方向不同,不能合成一份。
我以一个小型7B模型举例。假设有32层,原始多头注意力有32个头,每头维度128。如果不做GQA(分组查询注意力),用一个FP16存储,1342万单位是这样算的:2 × 32 × 32 × 128 = 262144个元素,每个元素2字节,也就是每token约512KB。如果上下文4096,就是约2GB;如果上下文到100K,就是50GB,远大于模型本身的14GB权重。
这就是为什么现在主流模型基本都用GQA或MQA。GQA把多个普通注意力头共享一组K和V,等于把KV头数降下来,比如从32降到8。同样上面这个模型,KV头数是8时,每token只需要约128KB,100K上下文约13GB,虽然还是很大,但已经能塞进一块80GB的卡。面试官看到你能现场算到这个数字,就已经超过一半候选人了。
但别停在这。你还可以主动补一句:此外还有显存峰值问题,序列很长时,激活值可能成为瓶颈,特别是在训练阶段,一切迭代里中间激活和梯度占用经常是权重的数倍。这个补充说明你对“显存”理解是全面的,而不只是背了一个KV Cache概念。
面试官还有可能追问“PagedAttention是不是能把KV Cache省掉?”,这里是个陷阱。你要明确回答:PagedAttention不是压缩KV,只是把KV存储空间切成块、避免碎片化,让显存利用率更高。它不能减少实际数据量,该占的显存还是占。能分清这一点,说明你是真的用过vLLM这类推理框架,而不是只看过几篇宣传稿。
3. 训练题组:数据、收敛、微调,每一环都能暴露出实操深浅
3.1 问题三:预训练的数据清洗和配比,为什么是效果上限的胜负手?
这个问题不是让你背“去重、去广告、去脏数据”三件套,而是想考察你理解数据对模型的根本性影响。用一句话概括:模型学到的知识来自数据分布,数据决定了模型“知道什么”和“偏向什么”,结构再好的Transformer也无法从没有见过的信息里凭空变出知识。
数据清洗里最核心的是去重。你会发现许多人只看“质量过滤”,比如扔掉乱码、HTML标签、低质量段落,但忘了重复数据的问题。重复数据会让模型过度记忆某些段落,同时压缩对其他内容的采样空间。尤其网上爬来的文本,同一个新闻经常出现在几个域名下,如果不做近似去重,你在训练集里可能喂了3%的重复内容,模型对这些段落的“熟练度”虚高,在真正多样化任务上的泛化能力反而被拉低。
去重之后是配比。面试官在这里最想听的是你有自己的判断,而不是背BLOOM或LLaMA公开的配比参数。网上语料、书本、代码、数学和对话数据的比例,决定了模型在不同能力维度上的取舍。代码数据加多一点,逻辑推理常常会变好;科学与数学样本偏少,数学评测就常年提不上去。合理的做法是先参考几个开源模型的数据组成,再用一个小规模的300M或1B模型,对几组候选配比各跑几十亿token,用下游评测集快速对比,选出指标相对好的,再放大到正式训练。
这一题还有一个深层加分点:数据污染。你在训练集里混入了评测集的内容,管你指标刷得多高,上线都会现原形。有经验的候选人会主动说,我在训练前会拿测试集做一下n-gram重叠检查,甚至用模糊匹配把高重叠样本剔除。这句话往往能让面试官眼睛一亮。
3.2 问题四:训练的时候为什么必须做学习率预热(Warmup)?不预热能不能训?
这个问题特别适合考察你有没有真正跑过预训练。不少候选人只在微调阶段调过参数,对预热只管“照抄,一般500步”,不太清楚里面的原理。
预热的本质,是让优化器在模型还没“摆正姿势”的时候,不拿过大的梯度去摧毁已经脆弱的结构。模型在初始化阶段,各层输出分布没有被拉到合理状态,尤其自定义初始化不够理想的情况下,前几步算出来的梯度噪声非常大,统计量也不稳定。Adam这类优化器又用历史梯度估计一阶动量和二阶动量,前几步的统计本身就不可靠,如果你一开始就把学习率推到位,更新的步长可能一步跨到很差的局部区域,后面想绕回来很难。
你可以用一个粗糙通俗的类比来解释:刚启动的车,发动机和变速箱还没进入正常状态,你一上来就地板油,轻则轮胎打滑,重则故障。预热对应的是让引擎慢慢进入工作温度,学习率从0逐渐升到峰值,再去跑高速。这个类比面试官大概率会觉得直观。
更进一步,你可以说:峰值学习率、预热步数、总训练步数和batch size是绑定在一起考虑的。通常采用的策略是线性预热到峰值,再用余弦退火降到最低点。早期训练里有人开玩笑说“warmup设置不当,loss会先下降到一半突然起飞,再也不会回来”,这在超大规模训练里是真实发生过的惨案。能讲出Loss回弹这种细节,说明你不只是调参,而是真的盯着训练曲线排过障。
追问方向通常是“那后面要重新加数据继续训练怎么办”。标准思考是:如果学习率已经降到一个很小的值,模型已经不怎么能吸收新信息了。恢复训练时要么把它当作“新训练重新预热”,要么保留一个较低的学习率和较短的恢复周期。这个问题没有唯一答案,面试官要的是你理解学习率曲线在不同阶段的作用。
3.3 问题五:预训练和后续训练各自负责什么?微调到底能不能给模型注入新知识?
这是概念性极强的一题。我见过太多人把“预训练”和“微调”混在一起说,最后被面试官一个问题问死:“模型不知道你公司内部业务,你直接做一个SFT,它能学会吗?”
正确理解是:预训练阶段,模型通过海量文本学会语言本身和大量世界知识,这个阶段的训练成本极其高昂,动辄几千亿token,需要大量显卡集群。它设定的上限就是“知识上限”。后续的SFT和RLHF主要解决“让模型按人类期望的方式说话”,比如格式复杂、语气自然、拒绝不该回答的请求、选项前置等。它改的是行为和偏好,而不是往脑子里塞新知识。
你可能会反问:那为什么我微调之后,模型确实“学会”了一些我给的业务数据?这里要小心逻辑陷阱。SFT确实可以让模型在有限数据上复述出某些内容,那是把知识微调到输出层上的模仿,但数量稍微一多,模型就会把它们跟原有知识混合,出现编造。如果你真的想注入体系化的新领域知识,正确路径是先做领域继续预训练,再在这个基础上做SFT。先让模型“读过”你的领域文档,再教它怎么回答,知识才稳定。
这一题答得好,后面几乎一定会接一个实战问题:“领域知识是某企业内部资料,不能公开,怎么让模型学会?”这时你可以说分两条线:如果资料适合结构化检索,优先上RAG,让模型先取后答;如果一定要模型内生地掌握,就构造领域语料做持续预训练,再配一个高质量问答集做SFT,最后用线下评测集验证。这条链路讲清楚,面试官基本就认定你有大模型落地的经验了。
4. 应用工程题:RAG、长文本、评测,三个最容易被讲成“什么都能治”的地方
4.1 问题六:模型产生了幻觉,你第一反应是上RAG吗?
幻觉是LLM应用落地躲不开的问题。面试官问这个,是想看你是真的排查过问题,还是只会一招“所有病都撒RAG这贴万能药”。
先定义清楚幻觉的来源。模型的语言生成目标不是“陈述事实”,而是“生成最连贯的下一个token”。它并没有内在机制区分“知道这件事”和“不知道这件事”,所以遇到不知道的问题时,也会流畅地编一段。这是生成式模型的天然属性,没有哪个模型能保证100%不幻觉。
RAG确实是缓解幻觉的关键手段,它的价值在于给模型一个可靠的“外部资料库”,让模型先检索再回答,降低胡说八道的概率。带引用的RAG甚至能让用户去查原文。但你要清楚RAG的边界:检索召回的内容本身不相关,或者文档里有噪声,模型照样会接错;再者,如果问题属于“跨多个文档的复杂推理”,单纯的TopK检索就不够,需要结合重排、窗口重排、甚至图结构召回。你不能说“我RAG一上,幻觉就没了”,这会被面试官一句话顶回去:那检索到的文档是错的呢?你的防线在哪?
第二层防线是让模型学会“拒绝”。你可以给模型一个明确的边界,让它判断当前问题是否在已知范围内,不确定就回答“不知道”。你可以在SFT阶段构造“未知问题”的数据,让它在面对领域外问题时不再硬编。这种“拒绝式回答”在实际业务里很有用,尤其客服、医疗、金融场景,客户宁愿你说不知道,也不愿得到一个貌似正确的结论。
第三层是比较取巧的一致性检查。同一个问题让模型独立回答两三次,把结果做语义相似度对比,分数低就说明不稳定,有幻觉风险。这在某些高精场景下可以用,只是增加了一次查询成本。
我的建议是回答时把问题分层:说是知识边界导致的幻觉还是推理链条导致的幻觉;然后分维度给方案:RAG负责知识召回,提示词和SFT负责表达方式,规则引擎负责兜底校验。这种结构化回答,比只丢一个“用RAG”高出好几个level。
4.2 问题七:上下文窗口越长,模型就越强吗?
这是近年特别爱考的一道题,因为它直接跟长文本场景绑定。很多AI产品天天宣传“我们支持1M上下文”,但面试官想听的不是这个。
长上下文带来的问题有三个层面。第一是位置编码的外推压力,也就是前面问题一里提到过的,RoPE训练长度有限,硬拉长会性能衰减。第二是KV Cache显存线性增长,还是用刚才的公式,上下文从4K涨到32K,KV开销直接8倍,部署成本和时延一起上涨。第三是注意力分散:序列越长,模型越容易忽略关键信息,Middle相关性问题。你给模型塞5万字让它找其中一句话,它真不一定比RAG好用。
所以理想的思考路径是:先看业务是否真的需要长上下文。如果是整本文档理解、代码库分析、超长对话总结,那长上下文有不可替代的价值。但如果只是知识问答,RAG把需要的内容召回成几千token,再塞给模型,成本低、效果好、还有引用可追溯。很多场景用RAG而不是长上下文,不是因为技术落后,是因为在工程上更优雅。
如果面试官继续追问“部署一个128K上下文的模型,你怎么处理资源问题”,你可以提三点:一是用GQA压缩KV cache;二是用PagedAttention和Prefix Caching提高复用;三是配合上下文压缩手段,把历史对话摘要化,把已经处理过的大段落替换成摘要,让实际进入模型的token数大幅减少。这里面每一点展开都能聊三分种,证明你真的考虑过成本。
4.3 问题八:你用“MMLU提升2个点”来说服我项目成功?评测题怎么答才过关
大模型评估是一个很容易被糊弄过去但实际上极难做好的环节。很多人简历里写着“模型效果显著提升”,问他评测集是什么,他支支吾吾只说“用了公开评测集”。
首先你要对公开基准保持警惕。MMLU、GSM8K、HumanEval这些基准有相当高的可能性混入过大模型训练数据,尤其年代久远的基准,很多开源模型都是在大规模网页语料里见过了题目的。你几十亿token训一版模型,MMLU过拟合往上提几个点,看起来很美,一到真实业务场景又被打回原型。所以公开指标只能当一个参考坐标,而不是认证。
真正能反映项目效果的评测,一定是围绕业务场景构造的任务集。比如你要做一个合同审查助手,评测就应该分成三项:关键条款是否被正确抽出,异常风险是否被识别,对比结论是否准确。每条样例必须有业务人员标注的参考答案,评测指标也该从“精确定率”开始,而不是笼统地用BLEU或ROUGE。我会用一个小表格把常见的评测维度列清楚,方便你临场讲:
| 评测维度 | 常用方式 | 注意点 |
|---|---|---|
| 通识能力 | MMLU、C-Eval等公开基准 | 可能存在训练数据污染,要看发布时间和重叠度 |
| 代码能力 | HumanEval、LiveCodeBench | LiveCodeBench这类新基准更不容易被刷 |
| 业务效果 | 自建黄金集 + 人工盲评 | 黄金要定期更新,防止模型过拟合 |
| 稳定性与幻觉 | 多次采样一致性、拒绝率 | 高精度场景重点看错误答出率,而不是平均分 |
另外一个进阶点是“用模型评模型”。LLM-as-judge在业界很常用,但容易踩坑:让GPT-4当裁判,可能偏爱长度更长、措辞更华丽的答案。实际做法是人机结合——模型做初筛,标出高分和低分,人类只审边界样本。这样既能节省人力,又不至于被模型偏见带偏。
这道题你可以这样收尾:评测不是一把尺子量所有模型,它是你每轮迭代的仪表盘,你要盯着那些对业务最重要的指标,而不是盯着一个排行榜给自己贴金。能说出这句话,面试官对你的工程成熟度会有一个明显加分。
5. 现场被追问时别沉默,也别硬编:最后送你几条保命话术
我面过很多人,也带过很多候选人做复盘,发现淘汰往往不是发生在第一问,而是发生在追问轮。第一问还能靠临时记忆撑住,追问到第三层时,脑子里没真货的人就沉默了。这里有几个实操技巧,我分享给你。
第一,回答问题前先定框架。遇到“讲讲KV Cache”这种开放式问题,先在脑子里定三件事:是什么、怎么算、有什么坑。回答时按顺序展开,讲完“怎么算”就顺手给个具体模型的数据。框架感是训练出来的,平时多拿自己的项目练几次,面试时就不会因为紧张而乱掉。
第二,遇到不会的问题,把已知边界说出来。不用慌着说“我不知道”,而是说“这个点我没有完整跑过,但基于我对XX的理解,可能是……然后我会用XX去验证它”。面试官要的不是全知全能,而是诚实和逻辑。硬编一套所谓答案,基本是拿职业信誉赌博。
第三,主动往你擅长的方向带。比如你特别熟RAG,就多在工程应用题里展开讲长文召回、重排序、引用溯源,把面试官的追问锁定在你的优势区。这不算投机,因为面试官也想通过你最熟悉的环节看清你的天花板。
第四,准备一张自己的“数字卡片”。你项目里模型的参数量级、上下文长度、KV Cache占用、训练数据量、按迭代对比的评测成绩,都背下来。面试中带出数字比带出形容词有用一百倍,因为只有真的亲手操作过,才会有这些第一手数字。
这8个题说到底,不是为了刁难你,而是在帮你过滤掉那些没有亲手训练过模型、没有排查过线上问题、没有认真思考过数据配比的人。你把这条链路前前后后想明白,面试自然能聊出专业感和可信度,而不是背答案的紧绷感。
我自己面试别人时的体会是:能坦然说出“这里我计算得比较粗,误差主要来自激活值波动,但数量级不会错”的候选人,往往比那个什么都答得完美的人更适合一起共事。大模型这条技术栈更新快到自己人都追不上,承认边界并持续逼近本质,才是这份工作真正需要的样子。