MiniMax

AI 应用开发一面面经

完整信息

59 条问法 · 42 道题

本篇目录

这场的难度和我准备的方向完全错位。我按 Agent 岗准备了一堆 RAG、Skill、上下文治理,人家前十分钟就问完了。

时间:11.11 一面 80min 结果:挂

一句不太好听的话:大模型独角兽的"应用岗",跟大厂的应用岗是两个岗。大厂招你把模型接进业务,独角兽招你懂模型本身。

前十五分钟:还是常规题

  1. 自我介绍。
  2. 你做过最像样的一个 Agent 项目是什么?
  3. 这个项目里,模型能力是瓶颈吗?
  4. 如果模型突然变强十倍,你这套系统里哪一部分可以直接删掉?
  5. 哪一部分删不掉?为什么?
  6. 你平时怎么用 AI Coding?完整流程说一遍。
  7. Plan 模式和 Agent 模式的区别,你在什么场景切?
  8. AI 改坏过历史功能吗?怎么发现的?
  9. 你的 Skill 是怎么写的?给一个你觉得写得好的。
  10. 怎么验证一个 Skill 有效?
  11. RAG 链路里,你觉得最没用的一环是哪个?
  12. 为什么?拿掉会怎样?
  13. 反问环节留到最后。

中间三十五分钟:模型侧

  1. Transformer 的 attention,为什么要除根号 d_k?
  2. 换成别的缩放值会怎样?不缩放会怎样?
  3. softmax 在大维度下会有什么数值问题?
  4. GLM 和 GPT 的结构差异在哪?各自的取舍是什么?
  5. 为什么现在很多模型都选 decoder-only?
  6. RoPE 的数学形式写一下。
  7. RoPE 是绝对位置编码还是相对位置编码?为什么这么说?
  8. 它具备外推能力吗?为什么训到 4K 就很难直接用到 32K?
  9. 位置插值(PI)在做什么?会伤害短文本能力吗?
  10. NTK-aware 和 YaRN 的思路分别是什么?
  11. ALiBi 呢?和 RoPE 比差在哪?
  12. 长上下文的 attention 复杂度是多少?
  13. Sparse Attention 有哪几类典型做法?
  14. 滑动窗口 + 全局 token 的缺点是什么?
  15. Linear Attention approximates 什么?代价是什么?
  16. MoE 的 router 怎么训练?负载均衡怎么保证?
  17. aux loss 加太大有什么副作用?
  18. expert 并行里 all-to-all 的通信量怎么估?
  19. top-2 路由,一个 batch 里 token 分布极不均衡会怎样?
  20. capacity factor 设多少? dropping token 会发生什么?
  21. 量化到 INT4,精度掉多少?你怎么测的?
  22. 权重量化和 KV cache 量化,哪个风险大?
  23. LoRA 的 A 和 B 为什么不能同时初始化成零?
  24. P-tuning 和 LoRA 差在哪?
  25. DPO 和 PPO 在数据选择上有什么区别?
  26. RLHF 里 reward model 过拟合了会怎样?
  27. 你怎么评估一个模型"变好了"?
  28. 评测集泄露怎么发现?
  29. 反问(他没给,直接下一题)。

(35 题之后我基本只能报关键词了。他能看出来,但没停。)

最后三十分钟:推理和工程

  1. KV cache 显存怎么算?给公式。
  2. 7B、32 层、32 头、head_dim 128、fp16、8K 上下文,单序列多大?
  3. batch 32 呢?
  4. PagedAttention 解决什么问题?
  5. 逻辑块和物理块怎么映射?
  6. block 取多大?太大太小各有什么问题?
  7. prefix cache 共享之后,一个请求继续生成会不会污染别人?
  8. copy-on-write 在哪一步触发?
  9. 连续批处理和静态批处理的区别?
  10. chunked prefill 会不会拖慢 decode?
  11. 投机解码的原理?草稿模型怎么选?
  12. 接受率低的时候反而变慢,为什么?
  13. vLLM 和 SGLang 你更熟哪个?
  14. 如果让你自己写一个最小推理服务,你先写哪一块?
  15. 反问。

手撕:手写 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 或者类似几家的,你们那场也是这个比例吗?

本篇目录
  1. 01
  2. 02
  3. 03
  4. 04
  5. 05
  6. 06
  7. 07
  8. 08
  9. 09
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
  48. 48
  49. 49
  50. 50
  51. 51
  52. 52
  53. 53
  54. 54
  55. 55
    题目:用 numpy 实现 RoPE 的旋转变换。然后加一个要求:模型训练长度 2048,现在要推理 8192,用位置插值做外推,把实现补上,并说清楚两种做法的差别。
  56. 56
  57. 57
  58. 58
    追问
    你的实现里 `x[..., 0::2]` 是相邻两维一组,有些模型用的是前后半分组(half-split),两种等价吗?
  59. 59

同作者面经

展开其余 13 篇收起其余 13 篇

相关公司