上周去面了OPPO的AI应用开发工程师岗位,本以为准备充分,结果面试官一顿操作猛如虎,直接把我按在地上摩擦……
上图是本次面试的完整考点脑图,可以截图保存复习。
一、项目拷打:RAG + Agent,别想蒙混过关
开场就是半小时的项目深挖。我做了两个项目:
- 多模态RAG:图文混合检索 + 生成
- 保险Agent:自动生成保单文档
面试官不是听你讲故事,而是直接问:
“检索召回的时候,图文embedding怎么对齐的?效果怎么评估?” “Agent的planning环节用了什么策略?if-else还是LLM self-ask?”
复盘建议:
别只背“我用了RAG”,要能说清楚架构图、核心指标、翻车案例。比如多模态里图文相似度阈值怎么调的,保险文档生成里如何保证格式一致性。项目是唯一能主动展示深度的环节,一定准备好“为什么这么做而不是那么做”的比较。
二、PEFT全家桶:除了LoRA你还知道谁?
面试官第二刀:
“参数高效微调方法,除了LoRA,还能说出几个?”
我没卡壳,列了这四个:
| 方法 | 核心思路 | 参数量级 |
|---|---|---|
| Adapter | 在Transformer层中间插入小瓶颈层 | ~0.5%-5% |
| Prefix Tuning | 在每层前加可学习的虚拟token | 极少 |
| P-Tuning v2 | 类似Prefix,但只加在输入层 | 极少 |
| (IA)³ | 学习向量对激活值做缩放 | 极少 |
面试官追加:“Adapter和LoRA哪个更适合多任务?”
我答:Adapter需要为每个任务存独立模块,LoRA可以热插拔切换,多任务场景LoRA更灵活。
难点在于:不只是罗列名字,要能横向对比适用场景。建议画个表格记在心里。
三、LoRA的A/B矩阵初始化:能互换吗?
这题我差点跪。
LoRA公式:h = W₀ x + (B·A) x
- A矩阵:高斯随机初始化(均值为0,小方差)
- B矩阵:全0初始化
为什么这样设计?
初始时B·A = 0,模型退化为原始权重,训练稳定。如果反过来——A全0、B随机,结果是一样的(0乘任何=0),但梯度传播会有差异。理论上可以互换,但业界约定俗成A做随机、B做零,因为A负责提取特征,B负责重组。面试官点头:“其实互换也成立,只是习惯问题。”——这才是加分的点到为止。
四、LoRA的超参数:rank变大,α怎么调?
LoRA有这些超参数:r(秩)、α(缩放系数)、dropout、target_modules。
关键公式:h = W₀ x + (α / r) · (B·A) x
如果r翻倍,α怎么办?
通常保持α/r比例不变。比如原来r=8, α=16,缩放因子=2;r变成16后,α设为32,因子还是2。这样学习率稳定,不需要重新调参。如果α不变,梯度会缩小一半,收敛变慢。
面试官追问:“那为什么不直接用固定缩放?”
答:控制更新幅度,避免低秩破坏原有分布。
五、8张A100训32B模型,OOM了怎么办?
这是硬核实战题。32B模型用FP16大概占64GB显存(2字节×参数),8卡每卡80GB看起来够?但加上梯度、优化器状态、中间激活,绝对爆。以下是解救方案:
| 优先级 | 方法 | 原理 | 节省效果 |
|---|---|---|---|
| 1 | 梯度检查点 | 用计算换显存,不存中间激活 | 约60% |
| 2 | ZeRO-3 | 分片参数、梯度、优化器到所有卡 | 线性节省 |
| 3 | 混合精度 (FP16/BF16) | 参数存FP16,主权重存FP32 | 一半显存 |
| 4 | CPU offload | 把优化器状态放内存 | 很猛,但慢 |
| 5 | 减小batch size + 梯度累积 | 细节见下题 | 灵活调节 |
实战组合拳:ZeRO-3 + 梯度检查点 + BF16,32B模型能塞进8×80GB。
六、梯度累积为什么省显存?
面试官:“你刚才说减小batch + 梯度累积,原理讲清楚。”
正常:batch=32一次性前反向,中间激活占大头。
梯度累积:拆成4步,每步batch=8,算完梯度不清零,累加后再更新。
显存节省的本质:
不是梯度省了(梯度大小固定),而是单次前向的中间激活变小了。因为batch=8时的激活矩阵只有batch=32时的1/4大小。梯度依旧累加,等价于大batch效果。
注意:累积步数太多会拖慢训练,因为不能并行。通常4-8步合适。
七、自动化优化Prompt:梯度法 vs 反思法
这题有深度。面试官问的是“不需要人工手写Prompt,自动调优”。
基于梯度的方法(如Soft Prompt Tuning):
- 把Prompt变成连续向量,用梯度下降优化
- 优点:数学优雅,可微分
- 缺点:不可解释,迁移性差
基于反思的方法(如Reflexion、Self-Debug):
- LLM自己生成候选Prompt → 跑任务看结果 → 分析错误 → 迭代修改
- 优点:可解释,能利用模型推理能力
- 缺点:慢,依赖基座模型质量
面试官:“你项目中用哪种?” 我答:保险文档生成用了反思思路,因为需要可解释的规则;多模态RAG用了连续prompt调优。
八、手撕代码:LoRA填空大作战
最后15分钟,给了一段LoRA微调代码,挖了七八个空。考点:
- 参数冻结:
for p in model.parameters(): p.requires_grad = False - 替换目标层:找到所有
nn.Linear,替换成LoRALayer - 初始化A/B:
nn.init.kaiming_uniform_(A, a=math.sqrt(5))和nn.init.zeros_(B) - 前向融合:
output = base_output + (alpha/r) * (B(A(x))) - 只优化LoRA参数:传给优化器
[p for p in model.parameters() if p.requires_grad]
其中一个坑:target_modules如果选了q_proj和v_proj,别漏了out_proj?不,LoRA经典用法只改Q和V即可。但填空给的列表里有个lm_head,需要判断该不该加——一般不改头,因为头已经训练好了。
给个自己的小技巧:手写LoRA前,先熟读HuggingFace PEFT源码的LoraLayer类。
总结:这次面试教会我的事
- 不要背答案:每个“是什么”背后都有“为什么”,比如A/B矩阵初始化顺序,能推导出不影响结果才是真懂。
- 显存优化是必考题:从梯度累积到ZeRO,必须能讲清楚“换时间换空间”的trade-off。
- 代码要能写:面试官不会只问概念,现场填LoRA代码说明他们要的是能落地的人。
- 项目准备要“对比思维”:说清楚为什么选方案A而不是B,远比“我会用A”加分。
学AI大模型的正确顺序,千万不要搞错了
🤔2026年AI风口已来!各行各业的AI渗透肉眼可见,超多公司要么转型做AI相关产品,要么高薪挖AI技术人才,机遇直接摆在眼前!
有往AI方向发展,或者本身有后端编程基础的朋友,直接冲AI大模型应用开发转岗超合适!
就算暂时不打算转岗,了解大模型、RAG、Prompt、Agent这些热门概念,能上手做简单项目,也绝对是求职加分王🔋
📝给大家整理了超全最新的AI大模型应用开发学习清单和资料,手把手帮你快速入门!👇👇
学习路线:
✅大模型基础认知—大模型核心原理、发展历程、主流模型(GPT、文心一言等)特点解析
✅核心技术模块—RAG检索增强生成、Prompt工程实战、Agent智能体开发逻辑
✅开发基础能力—Python进阶、API接口调用、大模型开发框架(LangChain等)实操
✅应用场景开发—智能问答系统、企业知识库、AIGC内容生成工具、行业定制化大模型应用
✅项目落地流程—需求拆解、技术选型、模型调优、测试上线、运维迭代
✅面试求职冲刺—岗位JD解析、简历AI项目包装、高频面试题汇总、模拟面经
以上6大模块,看似清晰好上手,实则每个部分都有扎实的核心内容需要吃透!
我把大模型的学习全流程已经整理📚好了!抓住AI时代风口,轻松解锁职业新可能,希望大家都能把握机遇,实现薪资/职业跃迁~