☰
大模型算法岗三面面试真题复盘:从Transformer到DeepSpeed分片
2026/10/15 19:09:38 网站建设 项目流程

简介:这份资料整理了字节跳动大模型算法岗位一面、二面、三面的完整面试题目,面向准备冲击大厂算法岗的求职者,尤其是已有一定深度学习基础、希望系统梳理大模型知识体系的中高级候选人。内容覆盖Transformer与LLaMA的LN差异、RMSNorm与FFN结构对比、数据清洗与质量过滤、PPL公式、位置编码、prompt范式、模型结构设计、deepspeed分片阶段、DP与DDP区别、预训练与SFT评估、decoding策略等高频考点,并附有手撕代码题如RMSNorm、SwiGLU、cross-attention。资源包共1个PDF文件,约75KB,轻量便携,适合碎片化复习与面试前突击。已有174人学习下载,可作为一面到三面全流程的复盘清单,帮助读者定位知识盲区、理解面试官追问逻辑,并对照自身项目与论文经历查漏补缺。

1. 大模型算法岗三面连轴转:一份能直接拿来推演面试走向的真题复盘

如果你正在准备大模型算法岗的面试,大概率已经发现一个尴尬的现实:八股文背了一堆,真到面试官问“数据配比怎么量化”“DP 和 DDP 到底差在哪”的时候,脑子里的答案还是散的。这份面经资源的价值不在于告诉你“考了什么”,而在于它把一面到三面的提问逻辑完整暴露出来了——从论文拷打、Transformer 结构细节,一路推到训练框架、硬件利用率、数据清洗策略。适合两类人:一是正在投递大模型算法岗、需要按轮次拆解准备重点的求职者;二是已经入行但想回头补齐训练侧工程认知的从业者。它解决的核心问题是:让你知道每一面面试官到底在验证什么能力,而不是盲目刷题。

2. 一面拆解:从 RMSNorm 手写到数据清洗的 PPL 公式

2.1 Transformer 结构细节为什么总在第一面出现

一面最典型的开场就是“拷打论文”,然后迅速切到 Transformer 和 LLaMA 的结构差异。面试官问 LN 有什么区别、手写 RMSNorm、FFN 有什么不同、写 ReLU 和 SwiGLU,这一串问题的本质是在验证你是不是真的动手改过模型代码,而不是只跑过现成脚本。

LayerNorm 和 RMSNorm 的核心差异在于是否做均值中心化。LayerNorm 对每个样本的特征维度做减均值除标准差,而 RMSNorm 只除以均方根,省掉了减均值这一步。这个改动带来的收益是计算量更小,同时在多数 LLM 训练任务中效果不掉。面试官让你手写,考的是你对公式的肌肉记忆。

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.rsqrt(x.pow(2).mean(-1, keepdim=True) + self.eps) # 归一化后乘以可学习权重 return x * rms * self.weight

这段代码的关键参数是eps,一般取 1e-6 到 1e-8,太小容易在 fp16 下溢出,太大则归一化效果被稀释。weight初始化为全 1 是标准做法,保证训练初期不引入额外偏移。面试时如果被追问“为什么不用 bias”,答案是 RMSNorm 论文里消融实验表明 bias 对最终效果没有显著贡献,去掉反而更省显存。

FFN 部分的差异同样高频。传统 Transformer 用 ReLU 激活,LLaMA 系列换成 SwiGLU。SwiGLU 可以理解为门控线性单元的一种变体,公式是Swish(xW1) * (xW2),然后过一层 W3 投影。它的参数量比标准 FFN 多一个矩阵,所以 LLaMA 在实现时会把中间维度从 4d 缩到约 8/3 d 来对齐总参数量。面试官让你写,重点看你能不能把门控机制和维度调整一起说清楚。

2.2 数据清洗流程与 PPL 公式的落地答法

一面里数据清洗的问题通常不会问得太深,但一定会让你讲流程。质量过滤用什么模型、PPL 公式是什么,这两个问题几乎绑在一起出现。

常见做法是先用规则过滤(去重、去乱码、去短文本),再用模型打分。质量过滤模型一般选轻量级分类器,比如基于 BERT 微调一个二分类器,或者用 fastText 做粗筛。PPL 在这里的角色是衡量文本流畅度,公式是:

PPL = exp(-1/N * Σ log P(wi | w1...wi-1))

其中 N 是 token 总数,P(wi | ...) 是模型预测第 i 个 token 的概率。PPL 越低说明文本越符合语言模型学到的分布,通常质量越高。但这里有个坑:PPL 低不一定代表内容好,重复文本的 PPL 也可能很低。所以实际流程里 PPL 只作为一个过滤维度,还要配合去重和分类器打分。

面试时如果被追问“PPL 用什么模型算”,可以说用一个小型语言模型(比如 1B 以下)在目标领域数据上算,不要用太大的模型,否则计算成本扛不住。阈值一般卡在训练集 PPL 分布的某个分位数,比如去掉最高的 10% 和最低的 5%。

2.3 位置编码与 BERT 预训练任务的答法边界

位置编码的问题一面二面都会出现。面试官问“讲讲位置编码”,不是让你背正弦余弦公式,而是看你能不能把绝对位置、相对位置、旋转位置编码的演进讲清楚。BERT 用的是可学习绝对位置编码,LLaMA 用 RoPE。RoPE 的核心思想是把位置信息编码成旋转矩阵作用在 Q 和 K 上,好处是天然支持外推,而且相对位置关系在点积中自然体现。

BERT 预训练任务两个:MLM 和 NSP。MLM 随机 mask 15% 的 token 让模型预测,NSP 判断两句话是否连续。但后续研究(比如 RoBERTa)发现 NSP 任务收益不大,去掉反而更好。面试时如果被问到“BERT 的预训练任务有什么问题”,可以答 NSP 太简单,模型容易学到浅层启发式规则,而且 mask 策略固定导致预训练和微调阶段不一致。

开放性问题“端到端大模型和多个小模型各自的优缺点”在一面出现,说明面试官在看你有没有系统设计思维。端到端大模型的优势是全局优化、信息不丢失,缺点是训练成本高、迭代慢、单点故障影响大。多个小模型的优势是模块可独立迭代、部署灵活,缺点是级联误差、模块间接口设计复杂。答的时候要结合具体场景,比如搜索推荐里多阶段小模型仍然是主流,而对话生成端到端更合适。

3. 二面拆解:数据配比、模型评估与工具调用的追问逻辑

3.1 数据配比思路与策略的量化表达

二面比一面更偏工程决策。数据配比能说下思路吗、采用什么样的策略、什么样的数据才便于模型学习,这三个问题其实是一个问题的三个层次。

数据配比的核心是在不同来源、不同质量、不同领域的数据之间分配采样权重。常见做法是:先按领域分层(比如通用语料、代码、数学、多语言),每层内部再按质量分档。配比策略有两种主流思路:一种是固定比例,比如通用 70%、代码 15%、数学 10%、其他 5%;另一种是动态调整,根据训练阶段调整权重,前期多用通用数据打基础,后期增加高质量领域数据。

面试时如果被追问“怎么量化”,可以引入一个简单框架:定义每个数据源的效用函数,综合考虑质量分、领域覆盖度、重复率,然后做归一化加权。更工程化的做法是用小规模消融实验,跑几组不同配比,看下游任务表现,选最优。这里有个血泪经验:配比实验不要一次跑太多组,显存和时间都扛不住,一般一次跑 3 到 5 组,固定其他变量。

“什么样的数据便于模型学习”这个问题,面试官想听的是你对数据难度的理解。太简单的数据(比如重复模板文本)学不到东西,太难的(比如全是乱码或超长逻辑链)模型也学不动。理想数据是略高于模型当前能力的样本,类似课程学习里的概念。实际操作中可以通过 PPL 分布来筛选,保留中间段的数据。

3.2 主流 LLM 结构设计与评估方法

二面会问“主流 LLM 模型结构设计有什么特点”,这个问题覆盖面很广,但答的时候要收住。核心讲三点:decoder-only 成为主流、注意力机制优化(MQA/GQA)、激活函数和归一化位置调整。

Decoder-only 胜出的原因是训练目标统一(next token prediction)、扩展性好、推理时 KV Cache 管理简单。MQA 和 GQA 是为了减少 KV Cache 显存占用,MQA 是所有头共享一组 KV,GQA 是分组共享,后者在效果和效率之间更平衡。归一化位置从 Post-LN 转向 Pre-LN,再到 RMSNorm,都是为了训练更稳定。

“如何评估 LLM”这个问题,面试官通常期待你分阶段回答。预训练阶段看 loss 曲线和 PPL,但 loss 不直接等于下游能力。SFT 阶段看人工评估和自动指标(比如 win rate、BLEU 在特定任务上)。最终评估要结合具体任务,比如代码生成看 pass@k,数学推理看准确率,对话看人工打分。这里容易翻车的地方是只讲指标不讲数据污染,面试官如果追问“评估集和训练集重叠怎么办”,要能答出去重和动态评估集。

3.3 工具调用实现与推理能力天花板的答法

工具调用怎么实现,这个问题在二面出现说明岗位可能涉及 Agent 方向。常见实现方式有两种:一种是把工具描述拼进 prompt,让模型生成调用指令,然后解析执行;另一种是训练模型直接输出结构化调用格式(比如 JSON),配合约束解码保证格式合法。

# 示例:基于 prompt 的工具调用解析 import json def parse_tool_call(model_output): # 假设模型输出格式为 <tool>{"name": "search", "args": {...}}</tool> start = model_output.find("<tool>") end = model_output.find("</tool>") if start == -1 or end == -1: return None try: call = json.loads(model_output[start+6:end]) return call except json.JSONDecodeError: # 格式错误时返回 None,触发重试或降级 return None

这段代码的关键在于容错。模型输出格式不一定稳定,所以解析失败要有兜底策略。参数上要注意json.loads对引号和转义的要求,实际部署时通常配合约束解码(比如用 outlines 或 guidance 库)来保证输出合法。

“LLM 推理能力的天花板现在是什么程度”是个开放题,答的时候要避免绝对化。可以说当前推理能力在数学和代码任务上已经超过多数人类基准,但在需要长期规划和跨领域常识的任务上仍然有限。瓶颈主要在训练数据质量、推理链的稳定性、以及模型对自身不确定性的感知。

4. 三面拆解:DeepSpeed 分片、DP 与 DDP 区别及训练监控

4.1 DeepSpeed 几个阶段的分片代价

三面直接问硬件和硬件利用率,然后切 DeepSpeed 几个阶段分别分片什么、代价是什么。这是训练侧工程能力的核心考点。

DeepSpeed ZeRO 分三个阶段:Stage 1 分片优化器状态,Stage 2 在 Stage 1 基础上分片梯度,Stage 3 再分片模型参数。代价逐级递增:Stage 1 通信量增加最少,主要是优化器状态的 all-gather;Stage 2 梯度分片后需要 reduce-scatter;Stage 3 参数分片后前向和反向都要 all-gather 参数,通信开销最大。

阶段分片内容显存节省通信代价
Stage 1优化器状态约 4 倍低
Stage 2优化器状态 + 梯度约 8 倍中
Stage 3优化器状态 + 梯度 + 参数与卡数成正比高

面试时如果被追问“什么时候用 Stage 3”,答案是模型参数量大到单卡放不下时。如果单卡能放下模型但放不下优化器状态,Stage 1 或 2 就够了。Stage 3 的通信开销在低带宽集群上可能抵消显存收益,所以不是无脑上。

4.2 DP 与 DDP 的区别及训练时间估计

DP 和 DDP 的区别是经典题,但三面问出来往往期待更工程化的回答。DP 是单进程多线程,参数服务器在主卡上,梯度汇总到主卡再广播,通信瓶颈明显。DDP 是多进程,每个进程独立计算梯度,然后通过 all-reduce 同步,通信效率高得多。

# DDP 启动示例,4 卡训练 torchrun --nproc_per_node=4 train.py \ --batch_size 32 \ --lr 1e-4 \ --gradient_accumulation_steps 4

nproc_per_node是每台机器的进程数,通常等于 GPU 数。gradient_accumulation_steps用于模拟更大 batch,实际 batch 等于batch_size * nproc_per_node * gradient_accumulation_steps。训练时间估计可以用公式:总时间 ≈ (总 token 数 / 每秒处理 token 数) / 卡数。每秒处理 token 数受模型大小、序列长度、硬件利用率影响,实际估算时留 20% 到 30% 余量。

“最多用过多少张卡”这个问题,面试官在验证你的分布式训练经验边界。答的时候要具体到卡型和并行策略,比如“用过 64 张 A100,采用 8 路张量并行加 8 路流水线并行”。如果卡数不多,就如实说,但可以补充你了解的更大规模方案。

4.3 训练监控与数据配比量化方案

训练过程如何做模型监控,这个问题三面必问。监控分三个层面:硬件层看 GPU 利用率、显存占用、通信带宽;框架层看 loss 曲线、梯度范数、学习率;模型层看下游任务指标和生成样本质量。

常见做法是接 TensorBoard 或 WandB,记录 loss、lr、grad_norm、吞吐量。梯度范数突然变大通常意味着训练不稳定,需要检查数据或降低学习率。GPU 利用率长期低于 70% 说明数据加载或通信是瓶颈。

“数据配比怎么量化才是一个好的方案”在三面再次出现,说明面试官很看重这个能力。好的量化方案要满足三点:可复现(配比规则明确)、可解释(每个数据源权重有依据)、可调整(能根据训练阶段动态改)。实际操作中可以用数据混合定律(data mixing law)来指导,先在小模型上做消融,找到最优配比再放大。

5. 避坑与常见问题:从手撕 cross-attention 到面试节奏把控

5.1 手撕代码环节的常见翻车点

一面手撕两道 easy,三面手撕 cross-attention,难度跨度不小。常见翻车点有三个。

现象:RMSNorm 手写时忘记keepdim=True,导致维度对不上。原因:mean(-1)不保留维度会降维,后续广播出错。解决:养成习惯,归一化操作一律加keepdim=True。

现象:cross-attention 手写时 Q 和 K 的维度搞混。原因:cross-attention 里 Q 来自 decoder,K 和 V 来自 encoder,序列长度不同,容易在 reshape 时弄错。解决:先写清楚维度注释,再写代码。

现象:SwiGLU 手写时忘记调整中间维度。原因:直接套标准 FFN 的 4d 维度,参数量对不上。解决:记住 LLaMA 的中间维度约 8/3 d,实际实现取整到 256 的倍数。

5.2 面试节奏与追问应对

现象:一面当天约二面,二面当天约三面,节奏太快导致准备不足。原因:面试官觉得你匹配度高,想快速推进。解决:每面结束后立刻复盘,把没答好的问题记下来,当天补上。

现象:被追问“前沿 LLM 有了解哪些”时答得太泛。原因:只说了模型名字,没讲技术差异。解决:挑两三个真正了解的模型,讲清楚结构或训练策略上的区别。

现象:三面被问“训练过程如何做模型监控”时只讲了 loss。原因:监控维度太单一。解决:按硬件、框架、模型三层来答,每层给一个具体指标。

5.3 论文拷打的应对边界

现象:面试官一直追问论文细节,答到后面卡住。原因:对自己论文的实验设计理解不够深。解决:面试前把论文的每个消融实验、每个超参数选择理由都过一遍。

现象:被问“你认为好的 prompt 范式是什么”时答得太抽象。原因:没有结合具体任务。解决:举一个自己调过的例子,讲清楚怎么迭代 prompt、怎么评估效果。

6. 从三面反馈反推准备清单:一个可复用的自检流程

三面结束后,面试官问“预训练和 SFT 如何评估”“encoder-decoder、encoder、decoder 区别”“讲一下文本输入大模型到输出的过程”“decoding 策略”“大模型结构有哪些变化”,这些问题串起来其实是一张完整的知识地图。我的习惯是面完当天把没答好的问题按这张地图归类,然后逐个补。

具体做法是建一个自检表,按“结构、训练、数据、评估、推理”五个维度列。结构维度包括 Transformer 变体、位置编码、归一化、激活函数;训练维度包括并行策略、DeepSpeed 阶段、混合精度、梯度检查点;数据维度包括清洗、配比、质量过滤、去重;评估维度包括 PPL、下游任务、人工评估、数据污染;推理维度包括 decoding 策略、KV Cache、量化、工具调用。

每个维度下面写三个问题,能流畅答出来就算过关。比如推理维度可以写:greedy 和 beam search 的区别是什么?temperature 和 top-p 怎么配合?KV Cache 显存怎么估算?

KV Cache 显存估算公式: 显存 ≈ 2 * batch_size * seq_len * num_layers * hidden_dim * dtype_bytes 其中 2 表示 K 和 V,dtype_bytes 在 fp16 下为 2

这个公式在面试里被问到“推理显存怎么估”时可以直接用。参数上注意num_layers和hidden_dim要按实际模型填,seq_len是生成的最大长度。

从那以后我每次面试前都会把这张自检表过一遍,尤其是数据配比和 DeepSpeed 分片这两块,因为它们是区分“跑过模型”和“训过模型”的关键分界线。希望帮到你。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询