大模型算法岗位面试攻略:核心常见问题详解
本文整理了大模型算法岗位面试的 28 个核心问题,涵盖 RAG 技术体系、幻觉处理、微调方法(SFT/LoRA/RLHF)、主流开源模型架构(LLaMA/ChatGLM)、训练优化技巧(DeepSpeed/混合精度)及推理显存管理等内容。旨在帮助求职者系统掌握大模型关键技术点,提升面试通过率。

本文整理了大模型算法岗位面试的 28 个核心问题,涵盖 RAG 技术体系、幻觉处理、微调方法(SFT/LoRA/RLHF)、主流开源模型架构(LLaMA/ChatGLM)、训练优化技巧(DeepSpeed/混合精度)及推理显存管理等内容。旨在帮助求职者系统掌握大模型关键技术点,提升面试通过率。

数据预处理 -> 分块(这一步骤很关键,有时候也决定了模型的效果)-> 文本向量化 -> query 向量化 -> 向量检索 -> 重排 -> query+ 检索内容输入 LLM -> 输出
针对检索环节的评估:
针对生成环节的评估:
针对幻觉问题: 引入外挂知识库,加入一些纠偏规则,限制输出长度等。
针对复读机问题:
针对幻觉问题: 幻觉问题主要分为两大类,一类是生成结果与数据源不一致,自相矛盾。另一类是用户问题超出了大模型的认知。针对前者可能是训练数据和源数据不一致、数据没对齐或者编码器理解能力的缺陷和解码器策略错误可能导致幻觉。后者则是用户的问题不在语言模型认知范围内。
针对复读机问题: 数据质量不高,存在大量单一、重复文本,文本过长。当你的前面的条件文本过长时,大模型的输出的几个短文本会被原始的很长的条件文本淹没,继续预测下一个 token 的话,在模型看起来可能条件仍然是差不多的,此时如果使用 greedy search,只选择概率最大的一个 token,模型极大可能会将前面已经生成的短文本重新预测成概率最大的文本,以此类推,会一直重复下去。
当前开源影响范围最广,生态建设最好的开源大模型是 Meta 的 LLaMA。其依旧采用 Transformers 架构,并做了如下改动:
(SFT 时,学习率设置为预训练阶段的 10%,一般会取得不错的效果)
在原始 PLM (Pre-trained Language Model) 旁边增加一个旁路,做一个降维再升维的操作,来模拟所谓的 intrinsic rank。训练的时候固定 PLM 的参数,只训练降维矩阵 A 与升维矩阵 B。而模型的输入输出维度不变,输出时将 BA 与 PLM 的参数叠加。用随机高斯分布初始化 A,用 0 矩阵初始化 B,保证训练的开始此旁路矩阵依然是 0 矩阵。
LangChain 为大型语言模型提供了一种全新的搭建和集成方式,通过这个强大的框架,我们可以将复杂的技术任务简化,让创意和创新更加易于实现。有点类似于神经网络开发与 tensorflow/pytorch 之间的关系。
| 方法 | 优点 | 缺点 |
|---|---|---|
| SFT | 1. 启动简单,仅需要问答对数据就可以进行训练; 2. 训练简单,直接对 LLM 进行调参,大部分情况下,训练几个 epoch 就可达到预期; 3. 显存资源相比于 RLHF 来说耗费低 | 1. 模型的效果非常依赖于 SFT 数据的质量,天花板取决于 SFT 数据标注的质量; 2. 对标注要求高,对一条指令来说,要标注很高质的回答其实是一件非常困难的事情,既耗时又耗力。 |
| RLHF | 1. 直接利用人类偏好来进行指导大模型的训练,使大模型的输出更能满足人们的要求; 2. 在安全性和事实性上,都能有很大的提升。 | 1. 训练消耗大量的显存; 2. 训练的过程中很不稳定,想要成功的完成 PPO 的训练不是那么容易的事情; 3. 除了 SFT 阶段的数据,还得标注 Reward model 的数据。在对齐人类偏好的过程中,标谁更好比较容易,但是想标谁比谁好多少,又差多少,这不是件容易的事情。 |
RLHF (Reinforcement Learning from Human Feedback) 通常包含三个步骤:
不可以
首先要说起它的基座 GLM,GLM 既可以做 Encoder 也可以做 Decoder。 主要通过两种 mask 方式来实现:
[mask]:bert 形式,随机 mask 文本中的短 span[gmask]:gpt 形式,mask 末尾的长 span在 chatglm 里面做生成任务时,是用 [gmask]。chatglm2 中完全采用 gmask 来进行预训练。
在 ChatGLM 的内部结构中的变换,从下到上依次是:
在 ChatGLM 2.0 中还添加了一些其他变化:
GLU 的核心思想是通过门控机制来过滤信息,进而提高网络的表达能力和泛化能力。(门控机制有助于长距离建模) SwishGLU 的核心思想是将 Swish 和 GLU 结合起来,SwishGLU 实际上只是多乘了一个 g(x)。
首先从数据角度,llama2.0 为 2.0T,llama1 是 1.4T。其次是上下文长度,llama1 是 2k,llama2 是 4k。 最后从模型架构角度: 从整体上看,二者都遵循自回归 Transformer 的架构,只不过内部的细节有些不同。
一般来说,训练占用模型参数量的 16 倍大小(优化器、梯度、模型本身);推理占用模型参数量的 2 倍大小(fp16 是一个单位参数大小对应两个字节,int8 是一个单位参数大小对应一个字节)。
Deepspeed 是一种数据并行的方法,采用的 ring all reduce 方式。 传统的 parameter server 是 server 和 client 的方式,client 通过计算分配给自己的数据,产生梯度,传给 server,server 做聚合,然后把聚合后的参数再传给 client,这个方式的弊端是 server 容易成为瓶颈,server 通信量太大。另外可能一个 client 失败,会导致其他 client 等待。 Ring all reduce 是一种分布式的方式,各个节点分配通信量。总的通信量和 ps 没啥变化,但是通信的压力平摊到各个 GPU 上了,GPU 之间的通信可以并行进行。 假如,GPU 数量是 N,把模型参数分成 N 份,每个 GPU 要存放整个参数。每个 GPU 也要分配训练数据。当一次迭代,N 个 GPU 之间要经过一个 scatter 和 gather 操作,reduce-scatter 是将不同 gpu 上对应的参数的 gradient 相加,一共需要通讯(N-1)次。All-gather 是将合并完整的参数,传到其他 gpu 上,需要通讯(N-1)次。一次 all reduce,单卡通信量为 2*sita。
Zero 包括 3 种方案,逐步递进:
最后采用采用 stage3:用 1.5 倍的通讯开销,换回近 120 倍的显存。 另外,还有 ZeRO-Offload 是基于 Zero2,将 adam 和 gradient 放到内存中,在 cpu 内起了 N 个线程计算。其中的一条主线是 gradient 总是需要 scatter 的,感觉这个数据并行标志。这里需要注意一点 不管是 forward 还是 backward,都是需要有完整的 w 的。另外有了 gradient,以及 adamW 的参数,才能更新 W。
FP64 用 8 个字节共 64 位,FP32 用 4 个字节共 32 位,FP16 用 2 个字节共 16 位。在神经网络模型的训练过程中,通常默认使用单精度(FP32)浮点数据类型来表示网络模型的权重和其他参数。 为什么需要混合精度训练呢? 使用 FP16 训练神经网络,相比使用 FP32 有以下优点。
但是使用 FP16 也会带来一些问题,主要有两个方面:
为了利用 FP16 的优势,提高深度学习训练的效率和性能,同时避免精度溢出和舍入误差的影响,可以采用 FP16 和 FP32 的混合精度训练,主要涉及到一下三个重要技术点:
FlashAttention 涉及到很多计算 trick,有空单独开一篇文章来说。
本文整理了大模型算法岗位面试的 28 个核心问题,涵盖了从 RAG 技术体系、模型微调方法、主流开源架构到训练优化技巧的全方位知识点。建议求职者在准备面试时:
希望这份指南能帮助求职者系统掌握大模型关键技术点,提升面试通过率。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online