简介

本文详细分享了作者在腾讯、字节等多家大厂的大模型算法工程师面试经验,涵盖自我介绍、项目拷打、通识考察、手撕代码和反问五大环节。文章提供了每个环节的具体准备要点,包括项目深度理解、Transformers等模型原理、代码实现技巧以及面试注意事项,为求职者提供了一份全面系统的大模型岗位面试指南。

在这里插入图片描述


本文笔主亲身经历,面试公司有腾讯、字节、拼多多、饿了么、顺丰科技、携程、金山、富途、TCL、虾皮等。

大体上面试流程基本一致:

  • 自我介绍
  • 项目拷打
  • 通识考察
  • 手撕代码
  • 反问

下面我会从上面 5 个维度出发,记录下自己的经验和看法。

一、自我介绍

自我介绍是对背景和工作经历的概述,所以尽可能突出你自己做的比较好且有把握的项目,这样面试官在提问的时候也会因为你自己提到的内容而往这方面走。

不过有一些面试官就是会找简历上和自己业务相关或者感兴趣的项目来进行提问,所以你在简历上提到的项目都需要非常熟悉。

二、项目拷打

这一部分决定了面试官对于你经验的评估,项目的理解要深一些,这个只能通过不断打磨完善项目经历。

微调项目:

  • 业务背景
  • 数据的构成,是否使用了合成数据
  • 训练的过程中用了什么方法(为什么用这样的方式,用别的方式会有什么问题,是否尝试过)
  • 如何评估整体的效果
  • 微调之后是否还会出现幻觉的问题,出现了的话应该怎么处理
  • 这个能力是否只能用在当前业务场景,是否可以作为一个通用的能力
  • 是否尝试过用其他的基座模型

应用层项目:

  • 业务背景
  • 逻辑框架
  • 优化前和优化后的能力差距
  • 遇到最大的困难是什么?怎么解决的
  • 是否还有别的优化方式
  • 某个流程是否可以进行再优化
  • 上线之后的效果反馈

三、通识考察

(1)Transformers 和之前的模型的区别,为什么 Transformers 好?

追溯到最开始的 seq2seq 模型,RNN 模型的一个比较大的问题就是序列长了之后,效果变长;

后期的 LSTM 通过三个门控机制比较好的解决了这个长短期记忆问题,但是这两种模型都是串行模型,在计算复杂度上比较大,推理时间比较长。

Transformers 通过 encoder + decoder 堆叠的形式,通过残差连接、多头注意力机制、位置编码的形式实现了比较好的 seq2seq 的效果。

(2)介绍下 Bert,框架,预训练和后续的微调任务?

embedding 层由 positional_embedding + token_embedding + segment_embedding 组成,然后进入 encoder 层。

这里主要是通过多头注意力的方式将输入转换为 Q,K,V,三个矩阵,然后通过 softmax(QK.T / sqrt(dk)) V 来计算,然后加残差和 layer norm,最后接入一层 FFN。

预训练任务主要是两个,一个是 MLM (masked language model 预测 masked 的 token)和 NSP(next sentence prediction),后续的微调任务有命名实体识别,分类等。

(3)为什么 Bert 适合做向量模型,底层原理是什么?

推理耗时比较短,底层原理是利用【CLS】这个无语义的 token 向量表征来表示整个输入的语义。

训练方式类似于 simcse 的对比学习通过判断 positive 和 negative 的【CLS】的 token 的语义的相对值来进行参数更新(原理即正样本和输入 query 的向量相似度要大于负样本和输入 query 的向量相似度)。

(4)RoBERTa 做了什么优化?

训练过程中去掉了 NSP 任务,动态掩码策略,更大的训练批次和数据量,嵌入层的初始化方式不同,加入 AdamW 优化器。

(5)想要大模型输出的内容都为 json 格式,怎么实现?

限制解码,训练的时候 response 都为 json 格式。

(6)OOM 问题怎么处理

模型量化、模型并行、低精度训练、混合精度训练、限制最大文本长度、减少训练 batch、deepspeed 的三个显存优化方案等。

(7)大模型的参数量是怎么计算出来的?

大模型的参数量计算通常涉及以下几个关键部分:

Embedding 层:包括词嵌入、位置嵌入等,参数量由词表大小乘以嵌入维度决定。例如,词表大小为 30522,嵌入维度为 1024,则词嵌入的参数量为两者的乘积。

Transformer 层:

Self-Attention:每个注意力头有三个权重矩阵(Q、K、V),每个矩阵的大小为嵌入维度乘以投影维度,投影维度通常是嵌入维度。

如果有 L 层,每层有 H 个头,每个头的参数量为 3 * 嵌入维度 * 投影维度。

FeedForward Network(FFN):通常包含两个线性层,第一个从嵌入维度映射到较大的中间层,第二个再映射回嵌入维度。参数量为两层的输入输出维度的乘积之和。

Layer Normalization:每个 Transformer 层后通常有 LayerNorm,它有少量参数(通常为每个隐藏层的两个参数)。

模型结构参数:包括层数(L)、头数(H)、嵌入维度(D)、中间层大小(F)等。

一个基本的 Transformer 层的参数量可以近似为 4 * H * D^2 + 2 * D * F。

通过将所有这些部分的参数量相加,就可以得到整个模型的总参数量。

例如,对于特定的模型配置(如层数、头数、嵌入尺寸等),可以使用公式结合具体数值进行计算。

例如,TinyLLaMA 模型的参数量就是基于其特定的架构参数计算得出的。

(8)DeepSeek R1 的训练方式,GRPO 的原理是什么?

尽可能少的使用 SFT,通过冷启动少部分 QA 数据来进行 SFT,然后再使用大量的强化学习和多阶段 SFT 来进行调优。

GRPO(Group Relative Policy Optimization)的核心原理是让模型通过对模型同一批次生成的答案来进行 reward 打分,然后进行组内比较,来更新模型。

(9)基于过程的强化学习和基于结果的强化学习的差异是什么?

基于过程:更关注智能体采取行动的过程,即智能体如何根据环境状态做出决策以及决策的序列。

它强调学习一个策略,使得智能体在每个状态下都能选择合适的行动,以最大化长期累积奖励。

例如,在机器人路径规划中,基于过程的强化学习会关注机器人如何一步一步地选择移动方向,以找到到达目标的最优路径。

基于结果:主要关注最终的结果或目标是否达成,以及达成结果的效率等指标。

它通常不关心智能体具体是通过怎样的过程或行动序列来达到目标的,只看重最终是否成功以及相关的结果指标。

比如在游戏中,基于结果的强化学习只关注是否赢得游戏,而不关心游戏过程中具体的操作步骤。

这个题属于开放话题,读者可以根据自己的理解去分析,这两种强化学习的优势和弱势。

(10)Agent 的概念是什么?整体流程是怎么样的

Agent 在强化学习的概念就是一个能够感知环境并在环境中采取行动以实现特定目标的实体。

主要由三部分能力:感知能力,决策能力,执行能力。

Pipeline:了解用户需求,进行需求拆分。决定是否需要调用其他子 Agent,如何调用,正确的顺序。

调用之后的结果进行评估,是否能够解决问题,如果不能应该如何进行修正,如果则执行回复等。

(11)DeepSeek R1 对于 Agent 的能力是否有提升,如何进行运用?

首先明确下 DeepSeek R1 的最大提升主要是在逻辑计算能力上的重大提升,这在 Agent 场景下的复杂任务处理,路径规划上是能够起到很大帮助,通过 Reasoning 的方式进行任务分析,拆分,子 Agent 编排,这都是很大的一个提升。

(12)RAG 的整体流程和评估方式?

整体流程

知识(数据)收集,数据预处理(通过分段+滑动窗口等方式进行 chunking),构建索引(es + milvus向量库)。

检索时通过多路召回+精排的方式来提升召回率,LLM 知识融合生成,后处理,判断问句和生成的答案的一致性。

评估方式

基于生成结果的评估:

  • BLEU:计算生成文本与参考文本之间的 n-gram 重叠程度,评估生成文本与标准文本的相似性,得分越高表示生成结果越接近参考文本。
  • ROUGE:主要基于召回率,衡量生成文本与参考文本之间的词汇重叠情况,如 ROUGE-1、ROUGE-2 分别计算一元组和二元组的召回率,用于评估生成文本的内容完整性和准确性。
  • METEOR:综合考虑了词汇重叠、同义词匹配、词干提取等因素,更全面地评估生成文本与参考文本的语义相似性,取值范围为 0 到 1,越接近 1 表示生成效果越好。

基于检索效果的评估:

  • 准确率(Precision):检索出的相关文档数量与检索出的文档总数的比值,反映了检索结果的精确性,越高表示检索出的不相关文档越少。
  • 召回率(Recall):检索出的相关文档数量与数据库中实际相关文档总数的比值,衡量了检索系统找到所有相关文档的能力,越高表示漏检的相关文档越少。
  • F1 值:综合考虑准确率和召回率的指标,是它们的调和平均数,F1 值越高,说明检索效果越好。

人工评估:

  • 内容相关性:评估生成的文本是否与用户输入的问题或任务要求紧密相关,是否回答了关键问题,提供了有价值的信息。
  • 语言质量:检查生成文本的语法正确性、词汇丰富度、语句流畅性等,判断语言表达是否自然、准确,有无明显的语病和逻辑错误。
  • 实用性:根据具体应用场景,评估生成文本对用户的实际帮助程度,是否能够满足用户的需求,是否具有可操作性和实际价值。

(13)如何解决 RAG 中信息覆盖率低、幻觉、逻辑计算的问题?

单一的 RAG(Navie RAG)的能力肯定不足以应该复杂场景,需要结合知识图谱的方式来对文档进行实体和关系抽取。

同时增加互信息索引在召回阶段召回信息更相关的片段,逻辑计算问题需要引入专用的计算模块,例如数据计算库,逻辑推理引擎(具体可以参考KAG)。

(14)大模型的数据合成应该怎么做?有哪些方式

self instruct 的方法去基于种子数据生成、wizardlm 在这个基础上对数据进行复杂化、也有 ultrachat 这种 llm 相互对话的方法、前段时间比较火的是 magpie,相当于用温度让模型自由发挥。

(15)大模型预训练和 SFT 的 loss 的差别是什么?

首先 loss 函数都是 cross entropy,只是大模型预训练和 SFT 的输入不同, 大模型预训练的 loss 计算的整个输入的 loss,而 SFT 中 prompt 的那部分需要被 mask 掉,只计算 completion的loss。

(16)DeepSpeed 的三个 stage 分别是什么?有什么作用

DeepSpeed 是微软开发的一个用于大规模分布式训练的深度学习优化库,它的 ZeRO(Zero Redundancy Optimizer)技术包含三个主要阶段(Stage),旨在减少内存使用并提高训练效率。

以下为你详细介绍这三个阶段及其作用:

Stage 1:优化器状态分片(Optimizer State Partitioning)

原理:在传统的分布式训练中,每个 GPU 都会复制一份完整的优化器状态(如 Adam 优化器中的梯度累积和动量项),这会导致大量的内存冗余。

而在 ZeRO Stage 1 中,优化器状态会被均匀地分片到各个 GPU 上,每个 GPU 只保存一部分优化器状态。

例如,假设有 4 个 GPU 参与训练,每个 GPU 只保存 1/4 的优化器状态。

作用:显著减少了每个 GPU 上的内存占用,使得可以使用更大的模型和批量大小进行训练。

同时,由于每个 GPU 只需要更新自己所负责的优化器状态,减少了通信开销,提高了训练效率。

Stage 2:梯度分片(Gradient Partitioning)

原理:在反向传播过程中,每个 GPU 会计算一部分模型参数的梯度。在传统方法中,这些梯度会被汇总到每个 GPU 上,以便进行优化器更新。

而在 ZeRO Stage 2 中,梯度也会像优化器状态一样被分片到各个 GPU 上,每个 GPU 只保存一部分梯度。

这样,在进行优化器更新时,每个 GPU 只需要根据自己所保存的梯度和优化器状态进行参数更新,而不需要等待所有梯度的汇总。

作用:进一步减少了每个 GPU 上的内存占用,因为不需要保存完整的梯度信息。同时,减少了梯度通信的量,降低了通信开销,提高了训练的并行性和效率。

Stage 3:参数分片(Parameter Partitioning)

原理:在 ZeRO Stage 3 中,不仅优化器状态和梯度会被分片,模型参数本身也会被分片到各个 GPU 上。

每个 GPU 只保存一部分模型参数,在进行前向传播和反向传播时,通过通信机制动态地获取所需的参数。

例如,当一个 GPU 需要计算某个参数的梯度时,它会从保存该参数的 GPU 上获取该参数。

作用:极大地减少了每个 GPU 上的内存占用,使得可以训练非常大的模型,甚至超过单个 GPU 内存容量的模型。

同时,通过动态参数获取和通信机制,保证了模型训练的正常进行,提高了内存利用率和训练效率。

(17)模型并行和数据并行的区别是什么?这两种方式的数据流和梯度是怎么更新的

模型并行:将一个深度学习模型按照不同的层次或组件划分到不同的计算设备(如 GPU)上,每个设备负责处理模型的一部分。

例如,在一个深度神经网络中,将前几层放在一个 GPU 上,后几层放在另一个 GPU 上。

数据并行:将训练数据分成多个小批次,同时在多个计算设备上进行模型训练,每个设备都拥有完整的模型副本。

比如,有 1000 张图像的训练数据集,可将其分成 10 份,每份 100 张,分别在 10 个 GPU 上进行训练。

模型并行数据流和梯度更新

数据流:输入数据首先被送到负责模型起始部分的设备上进行计算,得到中间结果后,将中间结果传递给下一个负责后续模型部分的设备,依次类推,直到得到最终的输出结果。

例如,在一个由两个 GPU 组成的模型并行系统中,GPU1 处理输入数据的前半部分计算,将结果传给 GPU2,GPU2 再进行后半部分的计算得到最终输出。

梯度更新:在反向传播过程中,从输出层开始,每个设备根据接收到的梯度信息计算自己所负责模型部分的梯度,并将梯度传递给前一个设备,同时根据计算得到的梯度更新自己所负责的模型参数。

各设备之间需要进行频繁的梯度通信和同步,以确保模型参数的正确更新。

数据并行数据流和梯度更新

数据流:不同的计算设备同时处理不同批次的数据,每个设备都使用自己的模型副本对输入数据进行前向传播计算,得到各自的输出结果。

例如,在有 4 个 GPU 的数据并行训练中,每个 GPU 都对自己分到的那部分数据进行独立的前向传播计算。

梯度更新:每个设备在完成前向传播后,独立计算自己所处理数据批次的梯度。

然后,将这些梯度进行汇总平均,通常通过 AllReduce 等通信操作将所有设备上的梯度汇总并求平均,得到全局平均梯度。

最后,每个设备根据这个全局平均梯度来更新自己的模型参数,以保证所有设备上的模型参数保持一致。

(18)DP/PP/TP/DDP 的概念分别介绍一下?

DP (data parallelism)数据并行:数据并行是指将训练数据分成多个小批次,同时在多个计算设备(如 GPU)上进行模型训练,每个设备都拥有完整的模型副本。

PP(pipeline parallelism)流水线并行:管道并行是将深度学习模型按照不同的层次或阶段划分成多个部分,每个部分分配到不同的计算设备上,数据像在管道中流动一样,依次经过各个设备进行处理。

TP (tensor parallelism)张量并行:是将模型中的张量(如权重矩阵、激活值等)在不同的维度上进行划分,分布到多个计算设备上进行并行计算。

DDP(distributed data parallelism) 分布式数据并行:是数据并行的一种分布式实现方式,用于在多个节点(如多台服务器)的集群环境中进行深度学习模型训练,每个节点可以包含多个计算设备。

(19)常用的分词方式 BPE 的原理是什么?

山野闲人:[LLM] 从实践到理论,Byte Pair Encoding(BPE) 深度调研

https://zhuanlan.zhihu.com/p/657938053

四、手撕代码

算法代码:

  • 手写位置编码
  • 手写多头注意力机制

Leetcode:

  • 零钱兑换
  • 最长递增子序列
  • 打家劫舍
  • 最长公共子序列
  • 跳跃游戏

真题

题 1:不调用库函数或**算子,实现 p 的 a 分之b 次幂

题目描述:

  • a、b 是整数,p 是有理数
  • 不考虑非法情况(分母为 0,负数开方等)
  • 结果精确到小数点后 2 位

题 2:c 是非负整数,是否存在 a*a + b*b = c?

五、反问

问题如下:

  • 明确新公司的业务方向,现在大模型的方向很多,技术方向:RAG,Agent,微调,数据合成等,应用方向有:智能客服,流程优化等。
  • 工作强度
  • 公司是否有明确的晋升机制
  • 调薪幅度及周期(算法目前在市场上还是属于香饽饽,不调薪的话人是留不太住的)

面试两个月下来,大模型算法工程师在市场上还是比较紧缺的,特别是 deepseek 之后,不管是互联网公司还是传统行业都开始投入 AI,机会和风险并存。

这份完整版的大模型 AI 学习和面试资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】
在这里插入图片描述

六、如何学习AI大模型?

我在一线互联网企业工作十余年里,指导过不少同行后辈,帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

在这里插入图片描述

第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;

第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;

第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;

第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;

第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;

第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;

第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。

在这里插入图片描述

👉学会后的收获:👈

• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。

在这里插入图片描述

1.AI大模型学习路线图
2.100套AI大模型商业化落地方案
3.100集大模型视频教程
4.200本大模型PDF书籍
5.LLM面试题合集
6.AI产品经理资源合集

👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓

在这里插入图片描述

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐