1. 从「背八股」到「讲清楚」:先看面试到底在考什么
真正开始准备大模型岗位面试的人,早晚会撞上同一个问题:知识点背了一大堆,真到面试官追问“为什么”的时候,还是容易卡壳。尤其是像 Transformer 原理、4 bit 量化这种高频考点,几乎每家公司的面试都会按不同的深度反复追问。我自己的体会是,与其零散地刷题,不如先把大模型面试的知识主线捋清楚,从模型怎么训练、怎么推理,到线上怎么部署、怎么调优,形成一条能自洽的技术链路,面试的时候才能做到“讲清楚”而不是“背出来”。
这份笔记的定位很直接:串联大模型技术栈中最核心的几块内容,包括 Transformer 架构的底层逻辑、训练与微调的常见选择、推理阶段的显存优化,以及线上部署最常用的 4 bit 量化方案。覆盖的面不算窄,但每一块都只讲面试的时候真正会被问到、真正会影响你做技术决策的关键点,兼顾原理深度和工程视角。适合三类人:准备大模型算法或推理部署岗位面试的求职者、需要系统性梳理知识体系的在职工程师,以及刚入门希望快速建立整体认知的学习者。
我先把结论放前面:大模型相关的面试,越到后面越不考“你知不知道某个概念”,而是考“你在实际场景里会怎么选、为什么这么选”。Transformer 是逃不开的地基,量化是推理优化里性价比最高的技术方向,微调则是算法岗和工程岗都要懂的分水岭。后面我按一条主线往下拆:先讲地基,再讲训练,再讲推理优化,最后落到工程落地。
2. 地基必须扎实:Transformer 原理中的高频追问点
2.1 自注意力机制的“直觉理解”和“公式理解”缺一不可
Transformer 的核心是自注意力机制,面试官最喜欢从“请你讲一下 self-attention 的计算过程”切入。这道题看似基础,但能区分出你是真懂还是背过。我建议从直觉和公式两个维度准备。
直觉层面,可以把注意力机制理解成一个“信息检索+加权汇总”的过程:Q(Query)代表“我在找什么”,K(Key)代表“我有什么可以被人找的特征”,V(Value)代表“我真正提供的信息”。计算 Q 和 K 的相似度得分后,通过 softmax 转成权重,再对 V 做加权求和。这个过程很像开会时你在众多发言里挑和自己需求最相关的内容,然后重点吸收那几个人的意见。
公式层面,标准的缩放点积注意力是:
[ \text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V ]
这里的 (\sqrt{d_k}) 是缩放因子,面试经常问为什么要除。原因不难理解:当维度 (d_k) 较大时,点积结果的方差会变大,导致 softmax 的梯度区域进入饱和区,训练容易出问题。除以 (\sqrt{d_k}) 是为了把方差拉回量级,保证梯度稳定。如果面试官继续追问方差推导,可以说 Q、K 的元素如果服从均值 0、方差 1 的分布,点积后的结果方差近似为 (d_k),所以用 (\sqrt{d_k}) 做归一化。
还有几个容易踩坑的细节:第一,self-attention 是“全局建模”,任意两个位置都能直接交互,所以长距离依赖能力比 RNN 天然更强;第二,attention 的计算复杂度是 (O(n^2)),这是后面一切优化方案的出发点,也是面试官喜欢引导你去思考的点,比如 FlashAttention 解决的正是这个问题;第三,multi-head 机制把 QKV 投影到多个子空间并行计算,核心目的是让模型学到不同维度的相关性模式,但每个头的维度降了,总计算量基本不变。
2.2 位置编码:为什么绝对位置不够用,RoPE 为什么成为主流
Transformer 本身没有顺序信息,所以必须注入位置编码。面试里最常问的是三类:原始 Transformer 里的 sinusoid 绝对位置编码、可学习位置编码、以及现在大模型里几乎标配的 RoPE(旋转位置编码)。
原始 sinusoid 编码的优点是能外推部分长度,不需要训练参数,但它的设计初衷是让模型通过三角函数的周期性感知相对位置,实际表达能力有限。可学习位置编码在 BERT 时代是主流,简单直接,但长度外推能力很差,训练时看到多长,推理时基本也就只能支持多长。
RoPE 的思路和前两者完全不同:它不是把位置信息加在输入向量上,而是把位置信息编码进 Q、K 向量的旋转矩阵中。具体地,对于位置 (m),对 Q 或 K 向量的每一对维度做一次旋转操作,旋转角度和位置 (m) 成正比。这样一来,Q 和 K 做点积时,结果中自然携带了相对位置信息。RoPE 之所以成为大模型首选,核心优势有两条:一是相对位置建模更自然,二是具备更好的长度外推潜力,配合 NTK 缩放等方法可以让模型在更长序列上继续工作。
面试中如果聊到上下文窗口扩展,RoPE 是绕不开的知识点。常见的外推手段包括位置插值(Position Interpolation)、NTK-aware 缩放、YaRN 等,这些不需要展开得太深,但至少要能说出它们的基本思路:位置插值是均匀缩放位置索引,NTK 是调整旋转频率的基数,YaRN 结合了 NTK 加注意力温度调节。
2.3 Transformer 宏观架构:从 Block 结构到 Pre-Norm 与 Post-Norm 的取舍
宏观层面,Transformer Block 由多头注意力和前馈网络(FFN)组成,中间用残差连接和层归一化串联。面试常问的一个细节是:现在大模型几乎都用 Pre-Norm 结构,为什么?
Pre-Norm 是在残差分支之前做归一化,Post-Norm 是在残差相加之后做归一化。Pre-Norm 的优势是训练更稳定,因为梯度直接通过残差支路回传而不经过归一化层的缩放,深层模型中不容易出现梯度消失或爆炸。代价是模型表达能力稍有下降,但实践中通常可以通过加深层数来弥补。Post-Norm 在原始 Transformer 论文中使用,训练对超参数更敏感,需要额外的 warmup 技巧,现在的超大模型基本不会首选。
FFN 部分也有讲究。标准 FFN 是先把维度从 (d_{model}) 升到 (4 \times d_{model}),再降回来,中间用 ReLU 或 GELU 激活。现在很多模型在 FFN 里引入了 SwiGLU 这类门控激活单元,本质是让 FFN 具备更灵活的“门控选择”能力,这也成了面试中的一个加分知识点。
3. 训练与微调的分水岭:预训练、全量微调、LoRA 与 QLoRA
3.1 为什么“微调”成为面试的必考点
预训练阶段需要海量数据和巨大算力,这不是大多数面试者能上手的。面试官问训练相关的问题,更多是想考察你对“模型适配下游任务”的理解,这就落在微调(Fine-tuning)上。从技术路线看,微调有三条常见路径:全量微调(Full Fine-tuning)、参数高效微调(PEFT)中的 LoRA,以及面向显存受限场景的 QLoRA。
全量微调的想法是,在预训练模型基础上,用下游数据继续训练整个模型的全部参数。这种方式效果通常最稳定,但它有三个硬伤:第一,每个任务都要保存一份完整模型的副本,存储成本极高;第二,反向传播需要计算全部参数的梯度,显存消耗非常大;第三,训练时间较长,迭代成本高。所以全量微调更适合有充足算力、任务数量少且各任务差异大的场景。
LoRA(Low-Rank Adaptation)的思路则完全不同。它冻结原始权重,在注意力层的权重矩阵旁边插入低秩分解的旁路分支。假设原始权重是 (W \in \mathbb{R}^{d \times d}),LoRA 用两个低秩矩阵 (A \in \mathbb{R}^{d \times r}) 和 (B \in \mathbb{R}^{r \times d}) 近似权重更新量,即 (\Delta W = BA),其中 (r) 是一个很小的值,比如 8 或 16。训练时只更新 (A) 和 (B),原始权重完全不动。推理时可以把 (BA) 合并回原始权重,不会增加任何推理延迟。
这里的核心原理是“低秩假设”:模型在下游任务上的权重更新往往集中在一个低秩子空间里,不需要动全部参数就能逼近全量微调的效果。这个视角面试官非常喜欢问,因为它是 LoRA 能“省参数但不明显掉效果”的理论依据。
3.2 LoRA 的超参数选择与微调实操经验
LoRA 最让人纠结的是秩 (r) 的选择。秩越大,表达能力越强,但训练参数和显存消耗也越大;秩太小,可能欠拟合。根据我自己的实测经验,大部分任务在 (r=8) 到 (r=32) 之间就能达到不错的效果。有一种常见调法:先用 (r=16) 试跑少量 step,看验证集损失的变化趋势,如果明显欠拟合再往上加;如果效果和全量微调差距不大但训练速度慢,可以考虑降到 8。
Alpha 参数(缩放系数)也需要提一下。LoRA 的输出通常是 (\frac{\alpha}{r} \cdot BA),(\alpha) 控制 LoRA 分支的缩放比例。实际操作中,(\alpha) 设置为 (r) 的两倍是比较通用的经验,比如 (r=16) 时 (\alpha=32)。这背后没有严格的数学推导,更多是经验值,但要记住一点:调大 (\alpha) 相当于放大 LoRA 分支的贡献,学习率需要相应调整。
还有几个细节值得留意:
- 在哪些层上挂 LoRA:默认做法是只挂在 attention 层的 Q、K、V、O 四个投影矩阵上。如果想增强表达能力,可以扩展到 FFN 层,效果不一定线性提升,但训练参数量会明显增加。
- 是否冻结 LayerNorm 和 bias:多数框架默认冻结 embed 和 LayerNorm 层,但有些经验表明,在风格迁移或 domain 差异大的任务里,放开 LayerNorm 会显著提升效果,代价是显存轻微上升。
- 序列长度对显存的影响:LoRA 虽然训练参数少,但 activation 的显存消耗和全量微调基本一致,所以 LoRA 能省的主要是优化器状态和梯度对应的显存,而不是所有显存。
3.3 QLoRA 与 NF4 量化:显存受限场景下的微调方案
QLoRA 是 LoRA 的一种“显存压缩版”,核心思路是在 LoRA 的基础上,把预训练权重量化成低精度表示来加载到显存中,再插入高精度的 LoRA 分支做训练。QLoRA 论文中使用的是 NF4(4-bit NormalFloat)量化,这里需要注意,它和后面要讲的推理量化是两条线,但概念上有联系。
NF4 量化本质是一种更适配权重分布的分位数量化方法。普通均匀量化假设数值分布均匀,但神经网络权重通常近似正态分布,峰值在零点附近。NF4 把有限个离散量化点按正态分布的分位数排列,让量化点更密集地落在权重分布概率高的地方,从而减少量化误差。QLoRA 的流程是:先把权重做 NF4 量化加载到显存,前向计算时把权重反量化回 BF16 参与计算,反向传播时只更新 LoRA 分支的高精度权重。
我实际用下来,QLoRA 在单张消费级显卡上微调 7B 级别模型是可行的,显存占用大概比 LoRA 再降 30% 到 40%。代价是训练速度会有一定程度的下降,因为反量化操作增加了额外计算。面试中如果被问到“显存不够怎么微调”,QLoRA 是标准答案之一,但主动说清楚它和纯推理量化的区别,会给面试官留下更好的印象。
4. 推理优化主战场:线上部署为什么绕不开 4 bit 量化
4.1 量化到底在优化什么:语义拆解与硬件逻辑
部署阶段的量化,核心目标是在不显著损害模型质量的前提下,用更低精度的数值表示权重和激活,降低显存占用、提升推理吞吐。面试中经常会出现“为什么量化能减少显存占用,但不一定能加速”这种追问,这需要从硬件结构上解释清楚。
先看显存侧:模型权重量化到 4 bit 后,单参数从 2 字节(BF16)降到 0.5 字节,一个 70B 模型光权重就能从约 140GB 降到约 35GB,这是部署时最直接的红利。再看计算侧:现代 GPU 的算力消耗主要来自矩阵乘法的乘加运算,激活值按更高精度参与运算时,计算单元数量并没有因为权重变低位而减少。所以 4 bit 权重配合 16 bit 激活(即 W4A16)能大幅降低显存占用,但理论算力上通常没有同等的收益。只有在特定硬件支持低精度矩阵乘法加速(如 INT8 Tensor Core)时,量化才能带来明显的速度提升。
面试中还值得提到一个经验结论:权重量化的敏感度远低于激活量化。原因是权重在一次推理中基本固定,可以预先校准;而激活的分布随输入动态变化,量化误差更容易累积。这也是为什么实际部署中 W4A16 比 W8A8 更常见,W4A8 很少出现在线上方案里。
4.2 4 bit 量化的主流方法:GPTQ 与 AWQ 的路线对比
线上 4 bit 量化领域,两个绕不开的方法就是 GPTQ 和 AWQ。
GPTQ 属于训练后量化(PTQ)中的近似二阶优化方法。它的核心动机是:把权重从高精度压缩到低精度后,尽可能让输出误差最小化。数学上,量化权重等价于求解一个最小化 (|WX - \hat{W}X|) 的优化问题,GPTQ 用“按列逐层量化+基于 Hessian 矩阵的误差补偿”来做近似最优解。量化某一列权重后,把产生的误差按 Hessian 逆矩阵分配到尚未量化的列上,从而让后序列“替”前列承担部分误差。这种误差补偿机制是 GPTQ 在 4 bit 下质量损失较小的重要原因。
AWQ(Activation-aware Weight Quantization)的思路则完全不同。它基于一个观察:权重的不同通道对模型输出的重要性是不一样的,而这种重要性可以通过激活值的统计特征来判断。激活幅度大的通道,对应权重重要性更高,量化时应该保留更高精度。AWQ 不直接对显著通道使用更高 bit,而是引入一个逐通道的缩放因子,在量化前放大重要通道的权重、缩小非重要通道的权重,再配合权重和激活的等价缩放来减轻量化误差。这个方法不需要反向传播或 Hessian 计算,数据效率高,速度也比较快。
选型上我的经验是:追求极致压缩比和离线转换灵活性,优先 GPTQ;在意校准数据集规模小、希望量化过程更稳健,或者权重分布本身不均匀,AWQ 通常更稳。两者在 4 bit 下质量差距不大,但 AWQ 对大模型(如 30B 以上)的泛化性更好。
4.3 混合精度格式 W4A16 与 W4A8:精确保留背后的取含逻辑
实际部署方案里,最常出现的字眼是 W4A16:权重 4 bit、激活 16 bit。有些场合还会看到 W4A8,但线上真正用 W4A8 的案例确实不多。解释清楚这件事,面试的量化部分基本就稳了。
先说为什么权重可以用 4 bit 而激活保留 16 bit:权重是静态的,可以在部署前离线完成量化,并且可以通过大量校准数据反复优化量化策略。激活是动态的,每一条输入都不同,无法离线优化,在线量化需要逐层统计范围,计算开销大且容易受异常值影响。因此,权重做低位量化是安全且收益明确的,激活则会保守处理。
再说为什么业界主流是 W4A16 而不是 W4A8。原因有两层:第一,W4A8 需要把激活降到 8 bit,在线量化激活会引入额外的量化误差和延迟,模型质量往往出现可观察的下降;第二,硬件层面对 INT8 激活计算的支持虽然成熟,但权重和激活同时低位的收益在当前主流推理框架中并没有形成压倒性优势。相比之下,W4A16 既能满足显存瓶颈,又基本不损质量,还能用更成熟的 kernel 实现,踩坑成本更低。
顺带整理一个常见量化格式速查表,方便复习:
| 格式 | 权重精度 | 激活精度 | 典型场景 | 主要收益 |
|---|---|---|---|---|
| W4A16 | 4 bit | 16 bit | 显存受限的线上推理 | 显存降低约4倍,质量损耗小 |
| W8A8 | 8 bit | 8 bit | 支持INT8加速的硬件 | 计算速度提升明显 |
| W4A8 | 4 bit | 8 bit | 很少在线上使用 | 理论上兼顾显存与速度,工程复杂度高 |
| FP16/BF16 | 16 bit | 16 bit | 训练和高质量推理 | 无损,但显存开销大 |
4.4 量化评估与常见坑:从困惑度到业务指标都要看
聊完方法,必须提一嘴量化后的评估。面试官如果只听到“GPTQ 效果不错”这种泛泛之谈,很难留下印象。更专业的回答方式是从三个层级评估量化效果:
第一层是困惑度(Perplexity)。最经典的做法是在标准文本数据集上对比量化前后的 PPL 差异,通常认为 PPL 上升不超过 0.5 到 1.0 是可接受范围。PPL 指标敏感但偏粗,适合快速筛选量化方案。
第二层是基准任务评估。跑几个公开 benchmark,看量化模型在 MMLU、GSM8K、HumanEval 一类评测集上的得分变化,这是判断模型综合能力没有明显下降的最直接证据。
第三层是业务级指标。真实部署前,需要在代表性业务数据上做端到端效果评测,尤其要关注长尾 prompt 和边界 case。我见过不止一次“PPL 正常但业务指标明显下降”的情况,根源往往在于量化对某些高频模式的影响没被通用评测集暴露出来。
实操中常见的量化问题也不少:
- 校准数据集要尽量贴近真实业务数据。用通用语料校准的 GPTQ 模型,在垂直领域可能表现不稳定。校准数据不用很多,几百到一两千条高质量样本通常就够。
- 4 bit 量化后的模型容易在长文本生成时出现异常,需要检查选定样本在长上下文上的表现。
- group size 的选择。GPTQ 里 group size 是权重量化分组的粒度(如 128 个通道共享缩放因子和零点),group size 越小,量化粒度越细,质量越好,但存储 overhead 越大。没有普适最优值,建议分别测 32、64、128 三档。
5. 线上部署与性能调优:从 4 bit 模型到稳定服务
5.1 显存估算:一个公式算清楚你能部署多大的模型
线上部署模型时,最核心的问题永远是“这张卡能放下什么模型”。如果不考虑量化,一个直观的显存估算方式是:模型权重大小约等于参数量乘以每个参数的字节数。以 7B 模型为例,FP16 下权重占用约 14GB,加了 KV Cache 和激活后,20GB 出头的显存基本都要压线。如果是 70B 模型,FP16 权重就要 140GB,就算用 H100(80GB),也要多卡张量并行才放得下。
量化之后数据会好看得多。同样一个 70B 模型,W4A16 下权重只需要约 35GB,一张 80GB 的卡就有机会单独承载。这里可以顺手估算一下 KV Cache 的显存占用,公式是:
[ \text{KV Cache Size} = 2 \times \text{层数} \times \text{头数} \times \text{头维度} \times \text{序列长度} \times \text{精度字节数} ]
以 7B 规模的常见配置为例,层数 32、头数 32、头维度 128,序列长度 4096,使用 FP16 计算的话,单序列 KV Cache 大约占 (2 \times 32 \times 32 \times 128 \times 4096 \times 2) 字节,约 1GB 左右。并发一高,这个数字会线性增长,所以在做显存规划时,KV Cache 经常是比权重更容易被忽略的瓶颈。
5.2 分布式部署的选择:数据并行、张量并行与流水线并行怎么配
面试中“怎么把大模型部署到多卡上”也属于高频题。核心概念有三个:数据并行(Data Parallelism)、张量并行(Tensor Parallelism)和流水线并行(Pipeline Parallelism)。
数据并行最常见,每张卡都有完整的模型副本,只是把数据切分到不同卡上分别计算。但它有一个硬性约束:单卡显存必须能容纳整个模型。所以对大模型来说,数据并行通常不是唯一的并行维度,需要和其他并行方式组合。
张量并行是把某一层的权重矩阵按行或按列切分到多张卡上,每张卡只算自己负责的那部分矩阵乘法,然后通过 AllReduce 同步结果。层内通信量非常大,需要高速互联(如 NVLink、InfiniBand),一般在单机多卡场景下效果好。像 70B 模型在 8 卡 A100 上跑,张量并行是最常用的选择。
流水线并行则是把模型的不同层放在不同卡上,数据像流水线一样按层顺序流过各卡。通信量比张量并行小(只需要传激活值和梯度),但存在 GPU 空闲率较高的问题,需要合理切分 micro-batch 来提升并行效率。面试如果能提到“用 micro-batch 尽量填满流水线的 bubble”,是一个加分细节。
实际部署中,一般先考虑张量并行和流水线并行的组合,因为显存限制是第一矛盾;当模型大到单机放不下时,再叠加数据并行提升吞吐。
5.3 KV Cache 优化:从 PagedAttention 到前缀复用
推理性能调优中,KV Cache 堪称“显存大头”。Transformer 解码阶段是逐 token 生成的,每生成一个 token,所有历史 token 的 K、V 向量都要被重新利用。如果不缓存,就需要重新计算整个序列的 K、V 向量,计算浪费严重;如果全部缓存,显存压力会随序列长度和并发数成倍上升。
KV Cache 最核心的优化思路之一是 PagedAttention,这也是 vLLM 早期的关键创新。它借鉴操作系统虚拟内存的分页思想,把 KV Cache 划分成固定大小的块(block),通过块表管理物理显存。生成过程中不再要求一个序列的 KV Cache 在显存中连续存放,而是像分页一样按需分配和回收,从根本上缓解了显存碎片化和 KV Cache 预分配浪费的问题。
另一个实用优化是前缀复用(Prefix Caching)。在真实业务中,多轮对话和重复前缀出现的概率很高,把已计算过的前缀 KV Cache 缓存下来直接复用,能显著减少首 token 延迟(TTFT)。我记得有一次在做多轮对话场景优化时,仅开启前缀复用,平均 TTFT 就下降了接近一半,这个收益比很多花哨的算子优化都来得直观。
5.4 吞吐优化的几个方向:Continuous Batching、投机解码与算子融合
模型能部署起来只是第一步,线上能不能扛住流量又是另一回事。Continuous Batching 是提升吞吐最重要的手段之一。传统 static batching 要等一个 batch 内所有序列都生成完才能释放资源,而 continuous batching 在序列级别的粒度上动态调度,一个序列生成结束就立刻把显存释放给新序列。这种调度方式的吞吐收益很大,已经是主流推理框架的标配。
投机解码(Speculative Decoding)的思路更有意思:用一个更小更快的 draft 模型先草拟多个后续 token,再用大模型一次性验证这些草拟 token 是否正确。如果草拟的 token 都通过了验证,一次前向就能生成多个 token,解码延迟显著降低。代价是需要额外部署一个大小模型组合,且草拟模型的质量直接影响加速比。这个方法不是所有场景都适用,但面试聊到推理延时优化时,提出来会显得视野更宽。
算子融合则属于偏底层优化方向。比如把 LayerNorm、残差相加、激活函数融合进一个 kernel,或者用 FlashAttention 重排注意力计算,减少 HBM 访问次数。这些优化的共同点是:减少显存读写和 kernel 启动开销,提升单位算力的利用率。工程面试时提一句“从系统层面减少访存瓶颈”会比只说数学推导更有说服力。
6. 面试现场实战:高频问题链与回答思路拆解
6.1 一套层层递进的追问逻辑
很多面试题不是孤立存在的,它们会沿着一条追问链展开。以 Transformer 为例,常见链路是:讲讲 self-attention → 为什么缩放 → 为什么 multi-head → QKV 分别怎么得到 → 位置编码怎么做的 → 长度外推怎么做。这条链条每个环节都能往下挖,一个环节卡住就会影响整体评价。
再举一个部署题链路:线上模型推理慢,你怎么定位瓶颈 → 看显存占用还是吞吐 → 为什么量化优先于蒸馏 → 你选 W4A16 还是 W8A8 → 量化后效果怎么保证 → 评估指标用什么。这一串问题考验的不只是知识点,而是你有没有真正做过的判断。我的经验是,回答的时候不用一上来就铺开讲所有方案,先给出你的首选方案和理由,再补充备选方案和切换条件,这样既清晰又显经验。
6.2 算法岗与工程岗的答题侧重差异
同样的问题,算法岗和推理部署岗的回答侧重点完全不同。算法岗面试更看重你有没有理解模型为什么这样设计,比如 RoPE 的数学性质、LoRA 低秩假设的成立条件、注意力复杂度的推导。工程岗则更看重你在资源受限时怎么权衡,比如量化误差和显存收益的取舍、框架选型、并发调度策略。
一个实用的做法是提前了解岗位 JD 的侧重点,算法岗把数学推导和论文细节准备得更熟练一些,工程岗把部署流程、性能指标和框架使用经验准备得更扎实一些。不过不管哪种岗位,能讲清楚“为什么选这个方案、代价是什么、换一个场景会怎么调整”的人,通常更容易拿高分。
6.3 速查表:高频问题的一页纸复习提纲
最后把核心考点浓缩成一张速查表,方便面试前快速过一遍。每个问题不需要长篇大论,但要确保自己能在 3 分钟内逻辑清晰地讲完整。
| 高频问题 | 核心回答要点 |
|---|---|
| 讲一下 self-attention 的计算过程 | QKV 来源、缩放点积、softmax 加权求和、multi-head 的作用 |
| 为什么需要位置编码 | Transformer 无顺序感知,RoPE 如何编码相对位置 |
| 为什么 Pre-Norm 更稳定 | 残差支路梯度不回穿归一化,深层训练更稳 |
| 全量微调和 LoRA 怎么选 | 数据量、任务数、显存预算、存储成本四个维度权衡 |
| LoRA 秩怎么选 | 默认 8-32,根据欠拟合或过拟合动态调整 |
| QLoRA 是什么 | 4 bit 量化权重 + LoRA 训练,显存受限时的微调方案 |
| 推理为什么优先量化 | 显存收益立竿见影,W4A16 质量损耗小 |
| GPTQ 和 AWQ 的区别 | 误差补偿 vs 激活感知缩放,适用于不同分布 |
| KV Cache 怎么计算显存 | 2×层数×头数×头维度×序列长度×字节数 |
| 多卡并行怎么选 | 显存不够用张量并行,层间切分用流水线,多副本拼吞吐 |
6.4 心态与表达:面试官真正想看到的能力
准备到这个程度,知识层面的储备已经不是最大的变量,真正的分水岭在表达方式。
我自己的经验是:面试官问一个知识点,大概率不是真的想听教科书定义,而是想通过你的回答判断三件事——你有没有真正做过相关项目、你能不能把复杂概念讲得清楚、你在面对不确定问题时是什么反应。很多基础扎实的候选人挂在表达上,常见问题包括:答得太散没有主线、停顿太久组织语言、面试官一追问就慌。
几个具体的建议:遇到工程问题主动给量化结论,比如“我会先看显存占比,如果权重占 70% 以上,量化是性价比最高的方案”;被问到不清楚的方向,不要硬编,直接说“这个方向我没有在线上实验过,但我可以基于 XXX 原理给出一个推测判断”;讲到对比型问题,用表格或者分维度对比的方式组织表述,比含糊其辞好得多。
7. 从面试笔记到平时积累:最后几点实操建议
把这份笔记过完一遍,只能保证你在面试现场不会脑子空白,但真正能拉开差距的,还是平时的项目实践经验。如果条件允许,我建议自己动手做一轮完整流程:用一个开源小模型,做一次 LoRA 微调,再做一次 GPTQ 或 AWQ 量化,最后用推理框架部署起来压测一下吞吐指标。这条链路全部亲手跑一遍,面试中几乎所有高频问题你都能给出“试过之后才知道”的经验答案,这比背熟任何资料都有效。
最后再分享一个小技巧:准备面试笔记的时候,不要按“概念列表”的方式去整理,而是按“决策链”去整理。比如部署一个模型,从选基座模型、评估显存、决定量化方案、设计并发策略到上线监控,每一步写清楚为什么这么选、有什么代价、什么条件下会改变主意。你会发现,这种笔记整理完之后,基本就是一套结构化的项目复盘,面试官问什么问题你都能从真实决策的角度去回答,这种自然感是任何“背诵”都替代不了的。