影石多模态大模型算法工程师一面面经攒人品

社招第一次面试手撕了这么多代码.....太硬核了!

基操:项目做的是什么?

你训练算法过程中一般用哪些损失函数?

中途插入问题:qwenvl系列的模块设计由哪些部分组成?

然后就直接开始手撕代码了:

多模态输入、Token 处理、Self/Cross Attention、Mask、LoRA、Dataset/DataLoader、训练流程、累计梯度、eval、多进程通信、微调方法 全都要会写代码。

多模态大模型算法岗 · 高频面试题 + 标准答案(完整版)

1. 多模态模型(图文)输入是怎么 Tokenize 的?

答:

  • 文本用文本分词器转成文本 Token。
  • 图片不直接分词,而是切成固定大小的 Patch,每个 Patch 当作一个视觉 Token
  • 最终把 文本 Token + 视觉 Token 拼接成一个序列,送入 Transformer。

2. 图片是怎么变成模型输入的?(Qwen-VL 风格)写代码

答:

  1. 图片缩放到固定尺寸(如 448x448)
  2. 切成 14x14 的 Patch → 得到 32x32=1024 个视觉 Token
  3. 经过视觉编码器(ViT)变成 Embedding
  4. 加上 <image> 特殊 Token 做模态区分
  5. 和文本 Token 维度对齐后拼接

3. Self-Attention 前向计算流程?写代码

答:

  1. 输入 X 线性投影得到 Q、K、V
  2. 拆成多头
  3. 计算注意力分数:Q @ K.T / sqrt(d_k)
  4. 加 Mask
  5. Softmax 得到权重
  6. 加权 V
  7. 合并多头 + 输出投影

4. Attention 里的 Mask 怎么加?

答:Mask 就是把无效位置的分数减去一个极大值(-1e9),让 Softmax 后趋近于 0。常见三种:

  • Padding Mask:屏蔽补齐的无效 Token,作用是什么呢?
  • Causal Mask:下三角矩阵,防止看到未来 Token
  • Modality Mask:限制图片/文本之间的关注

5. Cross-Attention 和 Self-Attention 区别?写代码

答:

  • Self-Attention:Q、K、V 来自同一个序列
  • Cross-Attention: Q 来自文本(Decoder)K、V 来自图片(Encoder) 用于文本去查图片信息。

写代码

6. Cross-Attention 里 Causal Mask 加在哪?写代码

答:只加在 Q 侧(文本),控制文本生成顺序,和 K/V(图片)无关,扩展维度后广播相加。

写代码

7. 自定义 Dataset 必须实现哪 3 个方法?

答:

  • __init__:初始化数据、路径、预处理
  • __len__:返回数据集长度
  • __getitem__:根据 idx 返回一个样本(读取+预处理)

8. DataLoader 作用是什么?

答:批量、打乱、多线程加载数据,自动把 __getitem__ 的结果拼成 batch。

9. 完整分类模型训练流程?写代码

答:

  1. Dataset + DataLoader 加载数据
  2. 模型前向得到 logits
  3. 计算 CrossEntropyLoss
  4. 梯度清零 → 反向传播 → 优化器更新
  5. 评估:model.eval() + torch.no_grad()

10. 累计梯度(Gradient Accumulation)怎么实现?写代码

答:

  • accum_steps 个 batch 才更新一次参数
  • 中间不清零梯度
  • loss 除以 accum_steps 防止梯度过大
loss = loss / accum_steps
loss.backward()
if step % accum_steps == 0:
    optimizer.step()
    optimizer.zero_grad()

11. model.eval() 除了不更新参数还有什么用?

答:

  • 关闭 Dropout
  • 固定 BN 的均值方差
  • 关闭训练时的随机行为 真正禁止梯度的是 torch.no_grad()

12. 模型微调有哪些方法?

答:

  1. Full Fine-tuning:全参数训练
  2. Freeze:冻结主干,只训练顶层/Head
  3. LoRA:低秩适配,只训练 A、B 矩阵
  4. Adapter:插入小网络层
  5. 渐进式微调:先训 Head,再解冻上层

13. LoRA 的公式是什么?(核心!)写代码

答:原始:y = Wx + b

LoRA:y = (W + BA)x + b(不拆 W,只加低秩增量 ΔW=B@A)

维度:

  • A: [d_in, r]
  • B: [r, d_out]

只训练 A、B,W 冻结。

14. 数据加载为什么要用多线程?怎么开?

答:IO/预处理太慢,用多线程并行处理。

在 DataLoader 里设置:

num_workers=16
pin_memory=True
persistent_workers=True
prefetch_factor=2

15. 进程间通信(IPC)有哪些方式?

答:

  1. Pipe:双端通信,最简单
  2. Queue:线程安全队列,DataLoader 底层用
  3. 共享内存:最快,适合大数据
  4. Manager:共享字典/列表
  5. Socket:跨机器通信

训练里最常用:Queue + 共享内存

这份面经的定位

多模态大模型 / Transformer / 训练工程 / 数据 pipeline 全覆盖适合:

  • 算法工程师
  • 多模态模型工程师
  • NLP/LLM 微调岗
  • 自动驾驶/多模态面试

太太太硬核了,希望二面轻松点......

全部评论

相关推荐

头像
03-03 13:17
已编辑
苏州大学 Java
面试官真的很有耐心,人非常nice,但问得也是真的很细。面完半小后约HR面。有没有人说说HR面会问啥?【希望能过吧,以前真没想到面个试这么耗精力,这一周感觉都被掏空了】1.请做一下自我介绍。2.你掌握的数据结构有哪些?3.请讲一下一致性哈希的原理和解决的问题。4.请讲一下Ring&nbsp;buffer(环形缓冲区)的相关内容。5.请讲解一下HTTP状态码的相关分类和含义(如2xx、3xx、4xx、5xx)。6.请讲解一下四层网络负载均衡和七层网络负载均衡的区别,以及各自的应用场景。7.请讲一下反向代理的原理和常用工具,以及正向代理的相关内容。8.进程间通信的方式有哪些?哪种方式效率更高,为什么?9.请讲一下MySQL主从复制的实现原理(基于binlog、redolog相关)。10.多个从节点之间出现数据不一致的问题该如何解决?11.你了解的消息中间件有哪些?RabbitMQ、RocketMQ、Kafka这三种消息中间件的区别是什么?12.Redis中最常用的数据结构有哪些?13.请讲一下Redis中Zset(sorted&nbsp;set)的底层实现和优化策略。14.什么是小哈希和大哈希,二者在查找、插入性能上有什么区别?15.请讲一下TCC分布式事务算法的相关内容,以及它和2PC、3PC的区别。16.你在项目中使用的服务发现组件是什么,它的实现原理是什么?17.你在项目中使用的序列化协议是什么,为什么选择该协议?18.长连接的适用场景是什么?哪些场景不适合使用长连接,原因是什么?19.请设计一个评论系统(包括数据库表设计、数据结构、关联关系等)。20.【反问】想具体知道会做哪些模块的工作?有没有导师?
百特曼3:节子还是一如既往的八股大厂
查看78道真题和解析
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务