AI 应用开发一面面经
完整信息
本篇目录
这场的难度和我准备的方向完全错位。我按 Agent 岗准备了一堆 RAG、Skill、上下文治理,人家前十分钟就问完了。
时间:11.11 一面 80min 结果:挂
一句不太好听的话:大模型独角兽的"应用岗",跟大厂的应用岗是两个岗。大厂招你把模型接进业务,独角兽招你懂模型本身。
前十五分钟:还是常规题
- 自我介绍。
- 你做过最像样的一个 Agent 项目是什么?
- 这个项目里,模型能力是瓶颈吗?
- 如果模型突然变强十倍,你这套系统里哪一部分可以直接删掉?
- 哪一部分删不掉?为什么?
- 你平时怎么用 AI Coding?完整流程说一遍。
- Plan 模式和 Agent 模式的区别,你在什么场景切?
- AI 改坏过历史功能吗?怎么发现的?
- 你的 Skill 是怎么写的?给一个你觉得写得好的。
- 怎么验证一个 Skill 有效?
- RAG 链路里,你觉得最没用的一环是哪个?
- 为什么?拿掉会怎样?
- 反问环节留到最后。
中间三十五分钟:模型侧
- Transformer 的 attention,为什么要除根号 d_k?
- 换成别的缩放值会怎样?不缩放会怎样?
- softmax 在大维度下会有什么数值问题?
- GLM 和 GPT 的结构差异在哪?各自的取舍是什么?
- 为什么现在很多模型都选 decoder-only?
- RoPE 的数学形式写一下。
- RoPE 是绝对位置编码还是相对位置编码?为什么这么说?
- 它具备外推能力吗?为什么训到 4K 就很难直接用到 32K?
- 位置插值(PI)在做什么?会伤害短文本能力吗?
- NTK-aware 和 YaRN 的思路分别是什么?
- ALiBi 呢?和 RoPE 比差在哪?
- 长上下文的 attention 复杂度是多少?
- Sparse Attention 有哪几类典型做法?
- 滑动窗口 + 全局 token 的缺点是什么?
- Linear Attention approximates 什么?代价是什么?
- MoE 的 router 怎么训练?负载均衡怎么保证?
- aux loss 加太大有什么副作用?
- expert 并行里 all-to-all 的通信量怎么估?
- top-2 路由,一个 batch 里 token 分布极不均衡会怎样?
- capacity factor 设多少? dropping token 会发生什么?
- 量化到 INT4,精度掉多少?你怎么测的?
- 权重量化和 KV cache 量化,哪个风险大?
- LoRA 的 A 和 B 为什么不能同时初始化成零?
- P-tuning 和 LoRA 差在哪?
- DPO 和 PPO 在数据选择上有什么区别?
- RLHF 里 reward model 过拟合了会怎样?
- 你怎么评估一个模型"变好了"?
- 评测集泄露怎么发现?
- 反问(他没给,直接下一题)。
(35 题之后我基本只能报关键词了。他能看出来,但没停。)
最后三十分钟:推理和工程
- KV cache 显存怎么算?给公式。
- 7B、32 层、32 头、head_dim 128、fp16、8K 上下文,单序列多大?
- batch 32 呢?
- PagedAttention 解决什么问题?
- 逻辑块和物理块怎么映射?
- block 取多大?太大太小各有什么问题?
- prefix cache 共享之后,一个请求继续生成会不会污染别人?
- copy-on-write 在哪一步触发?
- 连续批处理和静态批处理的区别?
- chunked prefill 会不会拖慢 decode?
- 投机解码的原理?草稿模型怎么选?
- 接受率低的时候反而变慢,为什么?
- vLLM 和 SGLang 你更熟哪个?
- 如果让你自己写一个最小推理服务,你先写哪一块?
- 反问。
手撕:手写 RoPE,并实现位置插值外推
题目:用 numpy 实现 RoPE 的旋转变换。然后加一个要求:模型训练长度 2048,现在要推理 8192,用位置插值做外推,把实现补上,并说清楚两种做法的差别。
这题不看你会不会调库,看你能不能把复数旋转这件事写对。
思路:
- 把 head_dim 两两分组当复数,乘
e^{i*m*theta},theta 按维度递减。 - 实现上不用真复数,用
x1*cos - x2*sin/x1*cos + x2*sin这组旋转矩阵就行。 - 位置插值不是改频率,是把位置索引按
L_train / L_target缩放,让外推位置落回训练区间。 - NTK-aware 是改 base 而不是缩放位置,这点要主动说,不然他会追问。
import numpy as np
def rope(x, positions, base=10000.0, scale=1.0):
"""x: [seq, heads, dim] positions: [seq] scale: 位置插值缩放因子"""
seq, _, dim = x.shape
inv_freq = 1.0 / (base ** (np.arange(0, dim, 2) / dim))
pos = positions.astype(float) / scale # PI:把位置压回训练区间
angles = np.outer(pos, inv_freq) # [seq, dim/2]
cos = np.cos(angles)[:, None, :]
sin = np.sin(angles)[:, None, :]
x1, x2 = x[..., 0::2], x[..., 1::2]
out = np.empty_like(x)
out[..., 0::2] = x1 * cos - x2 * sin
out[..., 1::2] = x1 * cos + x2 * sin
return out
def ntk_aware_base(base, L_train, L_target, dim):
"""NTK-aware:不动位置,改 base"""
return base * ((L_target / L_train) ** (dim / (dim - 2)))
# 训练 2048,推理 8192
L_train, L_target, dim = 2048, 8192, 128
x = np.random.randn(L_target, 8, dim)
pos = np.arange(L_target)
y_pi = rope(x, pos, scale=L_target / L_train) # 位置插值
y_ntk = rope(x, pos, base=ntk_aware_base(10000.0, L_train, L_target, dim))
追问四个,一个比一个扎:
- 位置插值之后,相邻 token 的相对距离变成 0.25 个整数位置,模型的分辨率够吗?
- PI 要不要微调?不微调和微调几步差多少?
- 你的实现里
x[..., 0::2]是相邻两维一组,有些模型用的是前后半分组(half-split),两种等价吗? - 推理时 q 和 k 用了不同的 scale,attention score 会怎么样?
第三个我答"应该等价吧",他说"那你回去试一下"。我回去试了,不等价,得跟训练时的实现保持一致,不然整个模型废掉。
那天晚上
出来之后我把这场的问题列了一张表,58 题里我能完整答下来的大概 20 题。
最难受的不是不会,是错位。我准备的东西人家一句没问,人家问的我一份没准备。
独角兽和大厂的应用岗,真的不是同一个岗。这句话我想说给正在投的人听:投之前先去看这家公司最近半年发的是什么,是产品还是模型。看错了,准备得越努力偏得越远。
有没有面过 MiniMax 或者类似几家的,你们那场也是这个比例吗?
本篇目录
当前问题0159
- 01
自我介绍。
- 02
你做过最像样的一个 Agent 项目是什么?
- 03
这个项目里,模型能力是瓶颈吗?
- 04
你平时怎么用 AI Coding?完整流程说一遍。
- 05
Plan 模式和 Agent 模式的区别,你在什么场景切?
- 06
AI 改坏过历史功能吗?怎么发现的?
- 07
你的 Skill 是怎么写的?给一个你觉得写得好的。
- 08
怎么验证一个 Skill 有效?
- 09
如果模型突然变强十倍,你这套系统里哪一部分可以直接删掉?
- 10
哪一部分删不掉?为什么?
- 11
RAG 链路里,你觉得最没用的一环是哪个?
- 12
为什么?拿掉会怎样?
- 13
Transformer 的 attention,为什么要除根号 d_k?
- 14
换成别的缩放值会怎样?不缩放会怎样?
- 15
softmax 在大维度下会有什么数值问题?
- 16
GLM 和 GPT 的结构差异在哪?各自的取舍是什么?
- 17
为什么现在很多模型都选 decoder-only?
- 18
RoPE 的数学形式写一下。
- 19
RoPE 是绝对位置编码还是相对位置编码?为什么这么说?
- 20
它具备外推能力吗?为什么训到 4K 就很难直接用到 32K?
- 21
位置插值(PI)在做什么?会伤害短文本能力吗?
- 22
NTK-aware 和 YaRN 的思路分别是什么?
- 23
ALiBi 呢?和 RoPE 比差在哪?
- 24
长上下文的 attention 复杂度是多少?
- 25
Sparse Attention 有哪几类典型做法?
- 26
滑动窗口 + 全局 token 的缺点是什么?
- 27
Linear Attention approximates 什么?代价是什么?
- 28
MoE 的 router 怎么训练?负载均衡怎么保证?
- 29
aux loss 加太大有什么副作用?
- 30
expert 并行里 all-to-all 的通信量怎么估?
- 31
top-2 路由,一个 batch 里 token 分布极不均衡会怎样?
- 32
capacity factor 设多少? dropping token 会发生什么?
- 33
量化到 INT4,精度掉多少?你怎么测的?
- 34
权重量化和 KV cache 量化,哪个风险大?
- 35
LoRA 的 A 和 B 为什么不能同时初始化成零?
- 36
P-tuning 和 LoRA 差在哪?
- 37
DPO 和 PPO 在数据选择上有什么区别?
- 38
RLHF 里 reward model 过拟合了会怎样?
- 39
你怎么评估一个模型"变好了"?
- 40
评测集泄露怎么发现?
- 41
KV cache 显存怎么算?给公式。
- 42
7B、32 层、32 头、head_dim 128、fp16、8K 上下文,单序列多大?
- 43
batch 32 呢?
- 44
PagedAttention 解决什么问题?
- 45
逻辑块和物理块怎么映射?
- 46
block 取多大?太大太小各有什么问题?
- 47
prefix cache 共享之后,一个请求继续生成会不会污染别人?
- 48
copy-on-write 在哪一步触发?
- 49
连续批处理和静态批处理的区别?
- 50
chunked prefill 会不会拖慢 decode?
- 51
投机解码的原理?草稿模型怎么选?
- 52
接受率低的时候反而变慢,为什么?
- 53
vLLM 和 SGLang 你更熟哪个?
- 54
如果让你自己写一个最小推理服务,你先写哪一块?
- 55
题目:用 numpy 实现 RoPE 的旋转变换。然后加一个要求:模型训练长度 2048,现在要推理 8192,用位置插值做外推,把实现补上,并说清楚两种做法的差别。
- 56
位置插值之后,相邻 token 的相对距离变成 0.25 个整数位置,模型的分辨率够吗?
- 57
PI 要不要微调?不微调和微调几步差多少?
- 58
你的实现里 `x[..., 0::2]` 是相邻两维一组,有些模型用的是前后半分组(half-split),两种等价吗?
- 59
推理时 q 和 k 用了不同的 scale,attention score 会怎么样?
