简介:这份PDF资料整理自字节跳动大模型算法岗一面、二面、三面的真实面试记录,面向准备冲击大厂算法岗位的求职者,尤其是已有一定深度学习基础、希望系统梳理大模型知识体系的中高级候选人。内容按面试轮次组织,一面聚焦Transformer与LLaMA的LN差异、RMSNorm与FFN手写、数据清洗流程、PPL公式、位置编码及prompt范式等基础考点;二面深入数据配比策略、主流LLM结构设计、模型评估与工具调用实现;三面覆盖DeepSpeed各阶段分片代价、DP与DDP区别、训练时间估计、模型监控、预训练与SFT评估及decoding策略,并附cross-attention手撕题。资源包仅含1个PDF文件,大小约75KB,轻量便携,适合通勤或面试前快速翻阅。目前已有175人学习,可帮助读者对照真实面试节奏查漏补缺,理解各轮考察重点与追问方向,为算法求职面试提供有针对性的复习线索。
1. 大模型算法面试到底在考什么:从一道 RMSNorm 手写题说起
很多人第一次看到“大模型算法面试”这几个字,脑子里浮现的画面是:面试官坐在对面,抛出一个高深莫测的公式,你答不上来,空气凝固。其实真实的面试现场往往更朴素——面试官可能只是问你一句:“Transformer 和 Llama 的 LayerNorm 有什么区别?你手写一下 RMSNorm。”
这个问题看起来简单,但它像一把钥匙,能打开大模型算法岗考察的整条链路。为什么?因为一道 RMSNorm 手写题背后,藏着对归一化原理的理解、对模型结构演进的关注、对代码实现细节的敏感度,甚至能延伸到你有没有真正读过论文、跑过训练。换句话说,大模型算法面试考的不是“你背了多少名词”,而是“你对这套技术栈有没有形成自己的认知网络”。
打个比方,这就像考驾照。科目一考交规,科目二考场地操作,科目三考上路实战。大模型算法面试的一二三面,也大致对应三个层次:一面考基础概念和代码手感,二面考系统设计和数据思维,三面考工程落地和全局判断。每一面的侧重点不同,但底层逻辑是一致的——面试官在判断你是不是一个“能上手干活、能想清楚问题”的人。
所以这篇内容想做的事,不是给你一份“标准答案背诵手册”,而是把这份面试试题里反复出现的概念拆开揉碎,让你搞懂每个术语到底在说什么、为什么面试官爱问它、以及它和相近概念的区别在哪里。读完你至少能做到:听到 RMSNorm、SwiGLU、PPL、DeepSpeed 这些词的时候,不再发懵,而是能接住话头往下聊。
2. 一面考的那些基础概念:归一化、激活函数与数据清洗
2.1 LayerNorm 和 RMSNorm 到底差在哪:一个“减均值”的动作
Transformer 原始论文里用的是 LayerNorm,而 Llama 系列模型换成了 RMSNorm。面试官问这个区别,不是想听你背定义,而是想看你有没有理解“归一化到底在解决什么问题”。
通俗地说,归一化的作用是让每一层输出的数值分布保持稳定,不至于越传越大或越传越小。LayerNorm 的做法是:先算出一个向量里所有元素的均值,把均值减掉,再除以标准差,最后乘一个缩放系数、加一个偏移量。你可以把它想象成给一排高低不平的柱子“找平”——先找到平均高度,把每根柱子相对平均高度的偏差算出来,再统一压缩到一个标准范围。
RMSNorm 则省掉了“减均值”这一步。它只算均方根(Root Mean Square),也就是先把每个元素平方、求平均、开根号,然后直接用原向量除以这个均方根。用同样的比喻:它不找平均高度,而是直接看这排柱子的“整体能量”有多大,然后按能量大小做缩放。
为什么 Llama 要这么改?核心原因是计算效率。少算一次均值、少存一个偏移参数,在大规模训练里能省下可观的计算量和显存。而且实践中发现,省掉减均值这一步对模型效果的影响很小。面试官让你手写 RMSNorm,就是在确认你是不是真的理解这个“省”字省在了哪里。
import torch import torch.nn as nn class RMSNorm(nn.Module): def __init__(self, dim, eps=1e-6): super().__init__() self.eps = eps # 可学习的缩放参数,初始化为全1 self.weight = nn.Parameter(torch.ones(dim)) def forward(self, x): # 计算均方根:先平方,再求均值,最后开根号 rms = torch.sqrt(torch.mean(x ** 2, dim=-1, keepdim=True) + self.eps) # 用原向量除以均方根,再乘缩放参数 return (x / rms) * self.weight这段代码里有两个关键点值得注意。第一,eps的作用是防止均方根为零时出现除零错误,通常取一个很小的数。第二,keepdim=True保证了归一化维度上的形状对齐,否则广播机制会出错。面试时如果能把这两点主动说出来,比单纯写出代码更能体现你的工程直觉。
2.2 FFN 和 SwiGLU:激活函数换了个“门”
Transformer 里的 FFN(前馈网络)通常是“线性层 → 激活函数 → 线性层”的结构。原始版本用的是 ReLU 激活,后来出现了 GELU,而 Llama 用的是 SwiGLU。面试官问“FFN 有什么不同”,其实是在问你对激活函数演进的理解。
ReLU 最简单:负数变零,正数不变。它的优点是计算快,缺点是负数区域梯度为零,可能导致神经元“死掉”。SwiGLU 则复杂一些,它引入了“门控”机制——用两个线性变换分别得到两组结果,其中一组经过 Swish 激活函数后,与另一组做逐元素相乘。你可以把它理解成:一组数据负责“提供信息”,另一组数据负责“控制阀门开多大”,两者配合决定最终输出多少。
这种门控设计让模型在表达能力和训练稳定性之间取得了更好的平衡。代价是参数量增加了——因为多了一个线性变换。所以面试官如果追问“SwiGLU 的代价是什么”,你可以直接回答:多了一组投影矩阵,参数量和计算量都会上升,但换来的是更好的效果。
2.3 数据清洗里的 PPL:困惑度到底在衡量什么
一面里还问到了数据清洗流程和质量过滤用什么模型,以及 PPL 公式是什么。PPL 全称是 Perplexity,中文叫困惑度。它的直观含义是:模型看到一段文本时“有多困惑”。困惑度越低,说明模型对这段文本越“熟悉”,越认为它通顺合理。
公式上,PPL 是交叉熵损失的指数形式。通俗地说,如果模型对下一个词的预测越准确,交叉熵越小,PPL 就越低。在数据清洗场景里,常用一个训练好的语言模型给海量文本打分,PPL 过高的文本往往被认为是低质量或不通顺的,会被过滤掉。
这里有个容易踩坑的地方:PPL 低不一定代表文本质量高。如果模型本身训练数据有偏,它可能对某些重复性、模板化的文本给出很低的 PPL,但这并不意味这些文本有学习价值。所以实际的数据清洗流程往往是多策略组合,PPL 只是其中一道筛子,还要配合规则过滤、去重、质量分类模型等手段。
3. 二面往深里走:模型结构、数据配比与评估难题
3.1 主流 LLM 结构设计有什么特点:Decoder-only 为什么成了主流
二面问“主流 LLM 模型结构设计有什么特点”,这个问题看似宽泛,其实有一个明确的落脚点:为什么现在主流大模型几乎都是 Decoder-only 架构?
要回答这个,得先分清三种结构。Encoder-only(比如 BERT)擅长理解任务,它能看到完整输入,做双向注意力;Encoder-Decoder(比如 T5)适合输入到输出的转换任务,编码器理解输入、解码器生成输出;Decoder-only(比如 GPT 系列、Llama 系列)则是“只看左边”的自回归结构,每次预测下一个词。
Decoder-only 胜出的原因不复杂:结构简单、容易扩展、训练目标统一(就是预测下一个词),而且在大规模数据上展现出了很强的通用能力。打个比方,Encoder-Decoder 像是一个“翻译官”,专门做转换;Decoder-only 像是一个“接话高手”,你给个开头它就能往下编,编着编着发现它什么都能干。工程上,单一结构也更容易做并行优化。
3.2 数据配比怎么量化:不是“多放点代码数据”就完事
二面里连续追问了数据清洗策略、数据配比思路、数据配比如何量化。这说明面试官非常看重数据侧的思考,因为在大模型训练里,数据质量往往比模型结构更能决定上限。
数据配比指的是不同来源、不同类型数据(网页文本、代码、书籍、论文等)的混合比例。一个好的配比方案不能拍脑袋决定,需要有量化依据。常见的做法是:先在小规模模型上做消融实验,观察不同配比下验证集表现的变化;或者用数据影响力评估方法,衡量某类数据对目标能力的贡献度。
这里有个血泪经验:配比不是一成不变的。预训练早期可能需要更多通用网页数据来打底,后期则可能提高高质量数据的比例来做“精调式”预训练。面试官如果问你“怎么判断一个配比方案好不好”,你可以从两个角度回答:一是看下游任务评估指标是否提升,二是看训练过程是否稳定、是否出现某类能力退化。
3.3 评估 LLM 为什么难:没有标准答案的考试
二面问“如何评估 LLM”和“训 LLM 最大的困难是什么”,这两个问题其实是一体两面。评估难,恰恰是训练难的核心原因之一。
传统机器学习任务有明确的标签,准确率、召回率一算就清楚。但大模型的输出是开放文本,同一个问题可以有多种合理回答。你用 BLEU、ROUGE 这类指标去衡量,会发现它们和人类判断的相关性并不高。用人工评估,成本高、速度慢、还带有主观性。用另一个更强的模型来打分,又存在“裁判偏好”的问题。
所以实际工作中,评估往往是多维度组合:自动指标看趋势,人工抽检看质量,特定任务用专门设计的评测集。面试官想听到的是你对“评估没有银弹”这件事有清醒认识,而不是背一堆指标名字。
3.4 工具调用怎么实现:让模型学会“伸手拿东西”
工具调用(Tool Calling)是让大模型在需要时调用外部函数或接口的能力。实现思路大致分几步:先在训练数据里构造“用户提问 → 模型输出调用指令 → 工具返回结果 → 模型整合结果”的样本,让模型学会在什么场景下该调用什么工具;推理时,模型输出结构化的调用请求,系统解析后执行工具,再把结果拼回上下文让模型继续生成。
这个过程中最容易被问到的细节是:模型怎么知道有哪些工具可用?答案是把工具的描述信息(名称、功能、参数格式)放进提示词或系统消息里。模型本质上是在做“根据描述选择动作”的决策。
4. 三面看工程功底:DeepSpeed、并行策略与训练监控
4.1 DeepSpeed 的几个阶段分别在分片什么
三面问 DeepSpeed 的几个阶段,这是工程侧的高频考点。DeepSpeed 的 ZeRO 优化分为三个阶段,核心思路都是“把占显存的东西切开分到不同卡上”。
ZeRO-1 分片的是优化器状态。训练时优化器需要维护动量、方差等状态,这部分显存占用不小,切开后每张卡只存一部分。ZeRO-2 在此基础上进一步分片梯度。ZeRO-3 则连模型参数本身也分片,每张卡只保留一部分参数,需要时再通信获取。
代价是什么?通信量增加。分片越细,卡与卡之间同步数据越频繁,通信开销越大。所以选择哪个阶段,本质上是在显存和通信之间做权衡。面试官如果追问“什么时候用 ZeRO-3”,你可以回答:当单卡显存放不下模型参数时不得不用,但如果通信带宽有限,要谨慎评估训练速度的下降。
4.2 DP 和 DDP 的区别:一字之差,机制不同
DP(Data Parallel)和 DDP(Distributed Data Parallel)都是数据并行,但实现机制有本质区别。DP 是单进程多线程模式,主卡负责汇总梯度再分发,容易形成通信瓶颈。DDP 是多进程模式,每张卡一个独立进程,通过环状通信做梯度同步,效率更高、扩展性更好。
用个比喻:DP 像一个组长收作业再统一发回,组长忙不过来时全组等着;DDP 像每个人同时和邻居交换批改,没有单点瓶颈。实际训练中,规模稍大基本都用 DDP 或更高级的并行方案。
4.3 训练过程如何做模型监控:别等 loss 炸了才发现
训练监控不是只看 loss 曲线。实际工作中要关注的东西包括:梯度范数是否异常增大(可能是梯度爆炸的前兆)、学习率是否按预期变化、各层参数更新幅度是否正常、显存占用是否持续攀升、吞吐量是否稳定。
面试官问这个,是想确认你有没有“训练翻车”的实战意识。一个靠谱的回答应该体现出你知道哪些指标是“黑匣子”里的关键读数,以及异常时该从哪里排查。
5. 常见误区与易混概念:这几组词别再搞混了
5.1 误区一:RMSNorm 是 LayerNorm 的“简化版”,所以效果更差
易混点:很多人以为省掉减均值一定损失表达能力。为什么混:直觉上“做得少”等于“效果差”。怎么区分:RMSNorm 省的是计算,不是表达能力的核心。归一化的关键是尺度稳定,减均值主要影响的是平移不变性,而实践中这个影响很小。判断标准看实验结论,不看直觉。
5.2 误区二:PPL 低就代表数据质量高
易混点:把困惑度当成质量分数。为什么混:两者都用一个数值表示“好坏”。怎么区分:PPL 衡量的是模型对文本的“熟悉程度”,不是文本本身的信息价值。重复模板文本 PPL 很低但没学习价值,所以要配合去重和多样性筛选。
5.3 误区三:Decoder-only 比 Encoder-Decoder 更“先进”
易混点:把主流选择当成技术优劣。为什么混:看到大模型都用 Decoder-only 就以为其他结构被淘汰了。怎么区分:结构选择取决于任务和工程约束。翻译、摘要等输入输出界限清晰的任务,Encoder-Decoder 仍有优势。Decoder-only 胜在通用性和扩展性,不是全面碾压。
5.4 误区四:数据配比就是调一个比例数字
易混点:以为配比是静态超参数。为什么混:听起来像调学习率一样调个值就行。怎么区分:配比是动态策略,和训练阶段、目标能力、数据质量分布都相关,需要实验验证和迭代调整。
5.5 误区五:工具调用是模型“自己学会了用工具”
易混点:把工具调用当成模型的内生能力。为什么混:模型输出看起来像是主动决策。怎么区分:工具调用本质是“根据描述做模式匹配”,工具列表和执行逻辑都由外部系统提供,模型负责的是选择和建议,不是真正执行。
6. 什么时候该用这些知识、什么时候别硬套
聊到这里,你可能会问:这些概念我搞懂了,但实际面试或工作中,什么时候该往深里讲,什么时候点到为止?
我的建议是看对方的问题意图。如果面试官问“RMSNorm 和 LayerNorm 有什么区别”,你花三十秒说清“省了减均值、省了计算、效果影响小”就够了,除非他追问实现细节,否则不需要现场推导公式。但如果他接着问“那你手写一下”,这时候就要把eps防除零、keepdim对齐这些工程细节带出来,因为他在考察你的代码手感。
再比如数据配比。如果面试官只是问“你们怎么做配比”,你回答“小规模消融实验加下游评估”就能过关。但如果他追问“怎么量化”,你就需要说出具体的评估维度,比如某类数据占比变化对特定评测集分数的影响趋势。硬套一个“万能配比公式”反而会翻车,因为真实场景里没有放之四海皆准的比例。
有一个具体的判断原则:概念题答边界,工程题答代价。问概念区别,你说清“它是什么、它不是什么”;问工程选择,你说清“选它的好处和付出的成本”。这两条能覆盖大部分面试场景。
提示:面试里遇到自己不确定的细节,直接说“这块我了解得不够深,我的理解是……可能不准确”,比硬编一个答案更安全。面试官对“知道边界”的候选人通常评价更高。
从那以后我每次准备这类面试,都会强制自己把每个概念按“一句话定义 → 为什么存在 → 代价是什么”走一遍,说不通的地方就是没真懂的地方。这份试题里反复出现的那些词,本质上就是一张认知地图的节点,节点连成线,线织成网,面试时才能接得住任何方向的追问。希望帮到你。
本文还有配套的精品资源,点击获取