Skip to content

九、模型微调与推理优化

这一章考查从"会用模型"到"会改模型、会部署模型"的跨越。面试重点不是调参细节,而是决策判断:什么时候值得微调、微调怎么不学坏、推理怎么把成本和延迟压下来。

91. 什么情况该微调、什么情况用 RAG、什么情况改 Prompt 就够了?给一个决策框架。

必刷 · 中等

参考答案

结论先行:按"问题的类型"决策,不按技术热度决策。Prompt 解决"怎么做",RAG 解决"知道什么",微调解决"能力内化"。三者成本和迭代周期差一个量级以上,选错方向浪费的是几周时间。

决策三问(按顺序):

  1. 改 Prompt 能不能解决? 指令遵循、格式约束、风格调整、few-shot 引导,绝大多数行为问题先在这一层试。迭代分钟级、零基建、随时可回滚。上限:模型本身能力不够时无效;示例和规则会占上下文、增加每次请求的 Token 成本。
  2. 缺的是知识还是能力? 缺知识——私有领域知识、高频更新的事实、需要溯源引用——必须 RAG,微调记不住也改不动(改一次知识要重训一次,且易幻觉)。缺能力——输出格式死活不稳定、领域话术风格学不像、希望小模型达到大模型的特定任务水平——考虑微调
  3. 训练数据拿得够吗? 微调至少要几百到几千条高质量标注样本。拿不到,退回前两层;拿得到,还要评估迭代周期(天/周级)是否匹配业务节奏。

对比速查:

维度PromptRAG微调
解决什么行为引导知识注入能力/风格内化
迭代周期分钟小时天~周
数据需求几个示例文档库数百~数万条标注
知识时效好(随时更新索引)差(需重训)
可溯源
单次成本低(但 Prompt 冗长时增加)中(检索开销)低(Prompt 变短,可用小模型)

三者可以组合:微调一个领域模型 + RAG 提供最新事实,是生产系统常见形态——微调负责"像一个领域专家",RAG 负责"知道今天的事实"。典型错误是把频繁变化的知识(价格、库存、政策条文)硬灌进微调数据,上线一周就过期。

面试官可能追问

  • 你们业务里有没有微调和 RAG 都不上、纯 Prompt 就跑起来的例子?(分类、抽取、格式化任务占业务大头,多数不需要训练)
  • 想把线上大模型 API 换成自部署小模型降成本,中间要做什么?(先收集线上真实请求构造评测集,用微调让小模型在目标任务对齐大模型效果,再灰度切流)
  • 微调后效果反而变差,可能是什么原因?(数据质量差、分布与线上不符、过拟合导致灾难性遗忘,见第 96 题)

92. LoRA 的原理是什么?秩 r 和 alpha 怎么选?QLoRA 又优化了什么?

必刷 · 中等

参考答案

LoRA(Low-Rank Adaptation) 的核心假设:微调引起的权重变化量 ΔW 是低秩的。做法是冻结预训练权重 W,在旁边加一条低秩支路,用两个小矩阵乘积近似 ΔW:

  • 前向计算:h = Wx + (α/r) · B·A,其中 A 用高斯随机初始化,B 初始化为全零(保证训练起点 ΔW = 0,不破坏原模型);
  • 可训练参数量:每层 r × (d_in + d_out),远小于 d_in × d_out。7B 模型全参微调要训 70 亿参数,LoRA 只训几百万到几千万,不到 1%;
  • 收益:梯度和优化器状态只针对少量参数,训练显存大幅下降;基座冻结,部署时可只发几十 MB 的适配器文件,同一基座挂不同 LoRA 即多任务热切换。

参数选择(经验值):

  • 秩 r:常用 8~64。格式对齐、简单风格迁移用 8~16 就够;复杂领域能力、大数据量用 32~64;再往上收益递减、过拟合风险上升;
  • alpha:缩放系数,实际作用是 α/r。惯例设为 r 的 1~2 倍(如 r=16、alpha=32),调 r 时保持 alpha 不变是常见做法;
  • 挂载位置:默认只挂 attention 的 q/v 投影即可,任务复杂时可扩展到全部线性层(q/k/v/o + MLP),通常比单纯加大 r 更有效。

QLoRA 优化的是显存:把冻结的基座权重量化成 4-bit NF4(NormalFloat,对正态分布的权重更友好)存放,反向传播时反量化到 BF16 算梯度、只更新 LoRA 部分;配合双重量化(量化常数本身也量化)和分页优化器(防峰值 OOM)。效果:65B 模型微调从多卡 A100 压到单卡 48GB,7B/14B 单张消费级卡可训;论文结论是对齐效果接近 BF16 全参微调,损失很小。

面试官可能追问

  • LoRA 为什么推理时几乎零开销?(训练完可以把 B·A 合并进 W,变成普通权重,无额外计算)
  • LoRA 的秩是不是越大越好?(不是:任务本身低秩时大 r 徒增过拟合风险,建议从小往上调,用评测集选)
  • QLoRA 训出来的适配器能直接用在未量化的基座上吗?(能,LoRA 权重与基座精度解耦,量化只是训练期的存放方式)

93. 全参微调、LoRA、Prompt Tuning 在成本、效果、部署上的差异?

高频 · 中等

参考答案

维度全参微调LoRAPrompt Tuning / P-Tuning
可训练参数100%<1%(低秩矩阵)0.01% 级(软提示向量)
训练显存(7B 参考)AdamW 下每参数约 16 字节,约 110GB+,需多卡单卡 24GB 可训,QLoRA 下更低与 LoRA 相近或更低
效果上限最高,能改深层行为大多数任务接近全参,极复杂能力迁移略弱小模型(10B 以下)明显偏弱,规模上来后才追平
灾难性遗忘风险最高低(基座冻结,卸载即还原)
部署整个模型副本,每任务一份全量权重只发几十 MB 适配器,可热切换、单基座多任务需推理框架支持注入软提示
工程复杂度高(分布式训练、合并发布流程)低,消费级硬件可做低,但生态支持不如 LoRA 通用

经验结论

  • 默认从 LoRA 起步——成本低、可回退、效果在多数业务任务(风格、格式、领域 SFT)上够用;
  • 只有当 LoRA 反复调参仍达不到目标(如需注入大量复杂领域知识、改变推理行为),或本来就是基座团队做通用能力提升,才上全参
  • Prompt Tuning 在业务侧已较少作为首选:小模型上效果差距明显,大模型上与 LoRA 拉不开差距,且部署生态不如 LoRA 顺滑。它更多作为研究基线和极多任务共享一个基座的场景方案。

面试官可能追问

  • 全参微调显存里都装了什么?(权重 + 梯度 + AdamW 的一阶/二阶动量,混合精度下还有 fp32 主权重,合计每参数约 16 字节,还没算激活值)
  • 多个业务各要一个专属模型,怎么部署最省?(共享一份基座权重,按请求路由加载不同 LoRA 适配器,vLLM 等框架支持多 LoRA 并发服务)
  • 什么信号说明该从 LoRA 升级到全参?(数据量上到十万级、LoRA 在评测集上明显低于全参基线、任务需要改变模型深层推理模式)

94. SFT 训练数据怎么构造?需要多少条?数据质量和数量哪个更重要?

高频 · 中等

参考答案

构造方法(按优先级):

  1. 业务日志回流:线上真实请求 + 人工修正的理想答案,分布最贴近实际,是性价比最高的来源;
  2. 人工编写:按任务规格说明(指令 + 输入 + 标准输出)生产,质量高但贵,适合种子集和难例;
  3. 强模型蒸馏:用 GPT-4 级模型按多样化指令生成答案再人工抽检(细节见第 98 题)。

构造原则:

  • 分布对齐:任务类型配比要贴近线上真实流量,不要训练集里 80% 是 A 任务、线上 80% 是 B 任务;
  • 指令多样性:同一能力用不同问法、不同长度、不同口语化程度表达,防止模型只认固定句式;
  • 答案规范统一:格式、语气、拒答策略要有一致标准,互相矛盾的样本会互相抵消;
  • 覆盖边界行为:该拒答的、知识不足的、需要澄清的样本要专门构造,否则模型学不会说"不知道"。

数量级(经验值):

  • 格式对齐、简单风格迁移:几百~几千条即可起效;
  • 领域能力(客服话术、行业术语理解):数千~数万条
  • 更大规模(数十万以上)属于继续预训练/大规模指令学习的范畴,多数业务用不到。

质量优先于数量:LIMA 的结论"约 1000 条精挑细选的数据就能对齐出不错的效果"已被广泛印证;反过来,混入 5%~10% 脏数据(答案错误、格式混乱、互相矛盾)就会显著拉低整体效果,且坏样本教出来的错误行为在线上很难归因。实操上:先造 1~2 千条高质量核心集跑通闭环,验证有效后再放量,同时建立人工抽检和淘汰机制。

面试官可能追问

  • 怎么判断训练数据"够了"?(画出数据量—评测分数曲线,进入平台期即边际收益耗尽,继续堆不如回去提质量)
  • 答案只有一条"标准写法"吗?(开放任务允许多样性,可以用评分点代替唯一答案;但风格和格式类任务要求强一致)
  • 用户日志里的隐私数据怎么处理进训练集?(脱敏/去标识化后再用,必要时签署数据使用授权,训练数据也要过安全合规审查)

95. SFT、RLHF、DPO 的关系和区别?分别解决什么问题?业务侧一般用到哪一层?

中频 · 较难

参考答案

三者是递进关系:SFT 教模型"会做",RLHF/DPO 教模型"做得更好"

SFT(监督微调):行为克隆。给"指令—标准答案"对,做极大似然,模型模仿示范。解决任务格式、基础能力、风格。局限:只能学到示范里的"平均水平"——一个问题只有一个好答案时够用,但开放性任务(同样问题有多个回答,有的更好)无法表达"这个回答比那个好"。

RLHF(基于人类反馈的强化学习):三段式——SFT 起步 → 训练奖励模型 RM(学习人类对回答对的偏好排序)→ 用 PPO 等强化学习算法最大化 RM 打分(同时加 KL 惩罚防止偏离 SFT 模型太远)。解决"超越模仿、优化整体偏好"(有用性、无害性、语气)。代价:训练链路要同时持有 policy、reference、reward、value 四个模型,显存和工程复杂度高,超参敏感、训练不稳定。

DPO(直接偏好优化):观察到 RLHF 的 reward 可以由 policy 与 reference 的对数比隐式表示,于是绕过 RM 和 RL,直接拿偏好对(同一 prompt 的 chosen / rejected 两个回答)加参考模型构造损失做分类式训练。数学上等价于优化同目标的 RLHF。优点:只要 policy + reference 两个模型,损失函数稳定、类监督学习式训练,工程门槛大幅下降;效果经验上与 PPO-RLHF 各有胜负、总体接近。

维度SFTRLHF (PPO)DPO
数据指令—答案对指令 + 偏好排序指令 + 偏好对
优化目标模仿RM 打分 + KL 约束隐式 reward
工程复杂度
稳定性差,调参敏感较好

业务侧一般用到哪层:绝大多数团队止步于 SFT(+ 强模型蒸馏数据);对回复风格、安全性、用户满意度有产品级要求时上 DPO(用线上偏好数据或强模型构造偏好对);完整 PPO-RLHF 基本是基座大厂和研究团队的配置,业务团队很少碰。中间还有轻量方案:拒绝采样微调(用 RM 或 judge 选 best-of-n 再 SFT)、迭代式 DPO。

面试官可能追问

  • 偏好数据从哪来?(人工标注 A/B 对比、线上隐式反馈如点赞点踩/重新生成、强模型当裁判生成偏好对)
  • DPO 有什么坑?(依赖偏好对质量和 SFT 起点分布,chosen/rejected 都离线分布太远会训歪;容易过拟合偏好集,需要控制 epoch 和学习率)
  • RLHF 里的 KL 惩罚是防什么的?(防 policy 为刷分跑出离谱分布、奖励黑客,本质是拴在 SFT 模型上的缰绳)

96. 微调后模型通用能力下降(灾难性遗忘)怎么办?训练侧和配比上有什么手段?

高频 · 较难

参考答案

先说现象与成因:微调后目标任务涨点,但通用指令遵循、常识问答、其他任务明显退化——领域数据把参数"带离"了预训练分布,原有的通用表征被覆盖。这是全参微调最常见的事故,LoRA 因为基座冻结天然轻得多,但也不等于零风险。

数据配比手段(首选,最有效):

  • 混入通用指令数据做 replay:用开源通用指令集(如 OpenAssistant、Tulu 系开源指令集)与领域数据混训,经验配比 领域 : 通用 ≈ 1:1 到 3:1,领域数据越少、通用占比要越高;
  • 难度与多样性分层:通用数据不是随便凑数,要覆盖指令遵循、常识、多轮对话等维度,并按难度分层采样;
  • 加入预训练风格数据:遗忘严重时掺少量通用预训练语料做"复习"。

训练侧手段:

  • 降低学习率:从全参常用的 1e-5 量级再降半档到 5e-6 左右,少踩出深坑;
  • 控制 epoch:领域数据 1~2 个 epoch 通常就够,多训只会加剧过拟合和遗忘,配合早停(以"领域分 + 通用分"联合曲线选 checkpoint);
  • 正则化与模型合并:L2-SP(把参数拴在初始值附近)、训练后做权重插值(如 WiSE-FT:θ = α·θ_ft + (1-α)·θ_base,α 经验在 0.5~0.8 之间扫)拉回部分通用能力;
  • KL 对齐:训练中加与基座输出分布的 KL 约束,思路同 RLHF 的缰绳。

方法侧手段:

  • 优先 LoRA:基座冻结,卸载适配器即完全恢复原模型;不同任务各挂各的 LoRA,天然隔离;
  • 控制可训练范围(只放开部分层),代价是上限也受限。

评估守底线(不可省):微调期间必须并行跑一个通用能力回归集——可以是 MMLU / GSM8K / IFEval 等公开基准的精简子集(几百条即可),加自建通用指令回归集。发布门禁:领域指标达标 通用指标跌幅在阈值内(如 <2%)才放行。

面试官可能追问

  • LoRA 就完全不会遗忘吗?(也会:适配器学到的行为会在基座上"劫持"部分通用输入模式,只是程度轻、且可随时卸载,同样要跑回归集)
  • 领域数据和通用数据冲突怎么办(通用答案和领域答案矛盾)?(以领域为准但要显式标注边界场景,让模型学会"在领域语境下用领域答案",而不是全局覆盖)
  • 线上已经发现遗忘了,最快的止血方案?(LoRA 直接摘掉回滚;全参则回滚到上一个 checkpoint,再带通用数据重训)

97. 微调效果怎么评估?只看训练 loss 下降有意义吗?怎么搭评测集?

中频 · 中等

参考答案

结论:训练 loss 基本没意义,eval loss 意义也有限。 loss 下降只说明模型在拟合训练集,既不代表泛化(loss 可以在过拟合状态下继续走低,线上反而更差),也无法反映业务关心的维度(格式合法率、风格符合度、拒答时机)。微调评估必须用独立的评测集 + 业务指标说话。

评测集怎么搭(三层结构):

  1. 目标任务评测集(held-out):训练数据切分时严格隔离,几百条起步,覆盖任务的主要场景 + 边界场景(该拒答的、超范围的)。指标按任务类型选:
    • 有标准答案:准确率 / F1 / 精确匹配;
    • 格式类:Schema 校验通过率(可全自动化,最有价值的第一道指标);
    • 开放生成:LLM as Judge 多维打分(正确性、风格、安全性)+ 人工抽检校准;
  2. 通用能力回归集:公开基准精简子集 + 自建通用指令集,守灾难性遗忘的底线(见第 96 题);
  3. 线上灰度:最终以业务指标收口——采纳率、转人工率、投诉率、点踩率,离线分数只是代理。

流程要点:

  • 训练过程中每 N 步在评测集上评估,画"领域分 / 通用分"双曲线选 checkpoint,而不是取最后一个;
  • 多 seed 或多 checkpoint 评估取均值,差方差大的配置直接弃(不稳定);
  • 与微调前的基线模型、以及"Prompt 优化版"基线做三方对比——微调必须同时打赢这两个对手才值得上线,很多所谓微调收益其实 Prompt 就能拿到;
  • 评测集版本化管理,每次增删留痕,分数才能跨时间可比。

面试官可能追问

  • 评测集要多少条才有统计意义?(看指标方差:二分类式的格式通过率 200~300 条可用;开放任务 judge 打分建议 300 条以上并报告置信区间)
  • 训练和评测数据怎么保证不泄漏?(构造阶段统一编号去重,切分后物理隔离存储;上线前跑一遍精确匹配和 n-gram 重叠检查)
  • 离线分数涨了但线上没效果,怎么排查?(分布偏移——评测集与线上真实流量不一致;或指标本身与业务目标不对齐,需要用线上日志重新构造评测集)

98. 数据蒸馏是什么?怎么用强模型构造小模型可用的训练数据?怎么控质量?

中频 · 较难

参考答案

定义:用强模型(teacher,如 GPT-4 级闭源模型或更大的开源模型)的输出,去训练小模型(student),让小模型在特定任务上逼近甚至超过 teacher 的性价比。业务里最常见的形态:用闭源旗舰构造数据,微调一个可私有部署的小模型,兼得效果、成本与数据安全。

构造流程(可直接落地):

  1. 定分布:从线上日志或任务规格导出真实 prompt 分布,按场景、难度、问法风格分层,生成 prompt 种子集(也可用强模型扩写指令做增强,思路同 self-instruct);
  2. 生成:用强模型按统一输出规范生成答案;开放任务开 CoT、temperature 适中(0.7 左右);重要 prompt 做 best-of-n 多路生成;
  3. 过滤(质量控制核心,见下);
  4. 格式化:整理成训练格式(指令 / 输入 / 输出,或偏好对),去重(精确 + MinHash / embedding 相似度),按训练配比混合。

质量控制手段:

  • 一致性校验:同一 prompt 采样多次,答案互相矛盾(事实类)的丢弃或降权;self-consistency 投票取多数答案;
  • Judge 打分:用另一个强模型按 rubric 给蒸馏样本打分,阈值以下剔除(经验上能剔掉一成到三成的问题样本);
  • 规则硬校验:格式合法性、引用是否存在、日期数值是否落在合理区间;
  • 事实抽检:涉及事实的样本按比例人工核对,量级 5%~10%;
  • 去污染:与评测集做重叠检查,蒸馏数据里混进评测题会造成虚高,这是最常见的自欺;
  • 难度对齐:小模型学不会的过长推理链要截断或简化,teacher 的 CoT 直接照搬常超出 student 的容量。

合规注意:用闭源模型输出训练竞品模型可能违反其服务条款,商用前确认 ToS 与数据条款;开源 teacher 则确认 license 允许蒸馏用途。

面试官可能追问

  • 蒸馏和直接用强模型推理比,收益在哪?(推理成本降一个量级、可私有化、延迟低;代价是一次性训练成本和效果天花板——student 通常到 teacher 的九成上下)
  • 偏好数据也能蒸馏吗?(能:让强模型对多个候选答案排序构造 chosen/rejected 对,喂 DPO,即 RLAIF / judge 蒸馏路线)
  • 怎么防止小模型学到 teacher 的幻觉?(事实类任务给 teacher 提供参考文档做接地生成,再按文档做忠实度校验,无据可依的样本直接丢弃)

99. 量化(INT8 / INT4、GPTQ、AWQ)对效果和推理性能分别有什么影响?

高频 · 基础

参考答案

量化是把权重(和激活)从 FP16 压到更低比特,本质是用精度换显存和带宽

对性能的影响:

  • 显存:与位宽成正比。7B 模型 FP16 约 14GB,INT8 约 7GB,INT4 约 3.5GB——直接决定什么卡能跑、单卡能塞多大并发;
  • 吞吐/延迟:Decode 阶段是访存瓶颈,权重变小后单次读取的数据量下降,吞吐相应提升(经验上 INT4 相比 FP16 有几十个百分点量级的提升,取决于实现和算子优化);
  • Prefill(算力密集)阶段收益相对小。

对效果的影响(经验量级):

  • INT8:精度损失很小,多数任务几乎无感(1% 以内),接近"免费午餐";
  • INT4:损失更明显,常规对话/抽取可接受,但知识密集问答、复杂推理、长尾代码等任务敏感,可能有几个点的退化,上量前必须过评测集;
  • 通用规律:模型越大对量化越鲁棒,同样的 INT4 在 70B 上损失比 7B 小。

GPTQ 与 AWQ 的区别(都是训练后量化 PTQ,只需几百条校准数据,不用重训):

  • GPTQ:逐层量化,利用二阶信息(基于 OBS 思想)最小化每层输出的重建误差,把权重压到 3/4-bit;生态广、速度快;
  • AWQ:激活感知——观察到少数"重要权重"(对应激活幅度大的通道)对精度影响大,通过 per-channel 缩放保护它们,等效保持这些权重的更高精度。INT4 下效果保持通常更好,且对推理 kernel 友好,部署侧(vLLM 等)支持成熟。

落地建议:优先 INT4(AWQ/GPTQ)+ 过评测集验证退化在阈值内;知识密集型业务对精度敏感时退到 INT8 或 W8A8;边缘设备另有一套 GGUF/K-quants 生态(llama.cpp)。

面试官可能追问

  • 为什么权重能压而激活难压?(权重分布稳定且近似正态,适合离线量化;激活有离群值, outliers 集中在少数通道,故常见"权重 INT4 + 激活 FP16"的 W4A16 方案)
  • KV Cache 也能量化吗?(能,INT8 KV Cache 可再省一半 KV 显存、支持更长上下文,需框架支持,注意对长对话质量的影响)
  • 量化后的模型还能微调吗?(QLoRA 正是"量化基座 + LoRA"的组合;GPTQ/AWQ 结果本身面向部署,一般不再训练)

100. vLLM 的 PagedAttention 是什么?为什么能大幅提升吞吐?Continuous Batching 呢?

中频 · 中等

参考答案

两者分别管"显存"和"调度",是 vLLM 吞吐优势的两根支柱。

PagedAttention——KV Cache 的分页管理:借鉴操作系统虚拟内存。传统实现给每个序列按其最大可能长度连续预留 KV Cache,序列长度参差不齐时产生大量内部碎片和预留浪费,实测能浪费掉六成上下的 KV 显存。PagedAttention 把每个序列的 KV Cache 切成固定大小的 block(如 16 个 Token 一块),逻辑上连续、物理上离散,按需分配:

  • 浪费只剩最后一个 block 的局部碎片(<4% 量级),同等显存能容纳的并发序列数翻倍级增长;
  • 额外收益:Prefix Caching——不同请求共享的 system prompt / few-shot 前缀指向同一批物理块,命中即免算免存;并行采样、beam search 的多个候选也能共享前缀块;
  • 整体吞吐提升常见 2~4 倍(相对 HF Transformers 基线更高,具体取决于负载)。

Continuous Batching(迭代级调度):传统 static batching 要等一批里最长的序列生成完才能整批返回,短序列陪着空转,GPU 利用率被"木桶短板"拖垮。Continuous Batching 把调度粒度降到每一步 decode 迭代:某序列一结束立刻踢出、释放的槽位立刻让排队中的新请求加入(新请求做 prefill 后无缝融入),批次持续保持满载。对用户侧体感是排队延迟下降,对系统侧是吞吐上限抬升。

一句话分工:Continuous Batching 让 GPU 永远有活干,PagedAttention 让显存永远塞得下更多序列——前者解决时间维度的空泡,后者解决空间维度的浪费,配合起来才有高并发下的线性扩容能力。

面试官可能追问

  • Prefix Caching 适合什么负载?(system prompt 长且固定、few-shot 模板统一的企业场景收益最大,命中率越高首 Token 延迟越低)
  • 有没有 PagedAttention 管不了的开销?(注意力计算本身不变,块寻址有少量额外开销;超长上下文下 KV 总量依然巨大,还需 GQA / KV 量化配合)
  • Continuous Batching 和 chunked prefill 什么关系?(把长 prefill 切成小块分步执行,避免长输入请求阻塞其他请求的 decode,是对混合负载的进一步优化)

101. 7B 模型推理需要多少显存?给一个估算方法(权重 + KV Cache + 激活值)。

低频 · 较难

参考答案

总公式:推理显存 ≈ 权重 + KV Cache + 激活与框架开销。以 7B(Llama-2-7B 类,32 层 / 32 头 / 头维 128,MHA)为例逐项算:

① 权重:参数量 × 每参数字节数。

  • FP16/BF16:7B × 2B = 14GB
  • INT8:约 7GB;INT4:约 3.5GB。

② KV Cache2 × 层数 × KV头数 × 头维 × 序列长 × batch × 每元素字节数

  • 代入(FP16):2 × 32 × 32 × 128 × 2B = 512KB / Token / 序列
  • batch=1、上下文 4K → 约 2GB;batch=32、4K → 约 64GB——并发和上下文一上来,KV Cache 反超权重成为大头
  • 若是 GQA 模型(如 Llama-3-8B,8 个 KV 头):每 Token 降到约 128KB,等长上下文下 KV 显存省 4 倍,这就是 GQA 成为标配的原因。

③ 激活值:推理时与 batch、序列长度、实现相关,通常占比不大,预留 1~2GB 或总量的 10%~20% 即可;再加上 CUDA context、内存碎片等框架固定开销,同样要留余量。

结论(量级)

配置权重典型可用余量(24GB 卡)
7B FP1614GB剩约 8GB 给 KV → 单序列 4K 多路并发可行,长上下文/高并发吃紧
7B INT87GBKV 空间宽裕
7B INT43.5GB12~16GB 级消费卡可跑

实操建议:先按目标场景算出权重 + 峰值 KV(峰值 batch × 最长上下文),再上浮 20% 做安全余量;显存不够时优先顺序是——量化权重 → GQA/KV 量化 → 限制并发或上下文 → 换更大卡。训练态是另一套账(梯度 + 优化器状态,每参数约 16 字节),不能拿推理公式套。

面试官可能追问

  • 为什么 Decode 阶段 batch 越大越"划算"?(权重只需读一次就服务整个 batch,访存被摊薄,这就是不断提高并发提升吞吐的原理,直到 KV 显存或算力打满)
  • 128K 上下文的 KV Cache 有多大?(MHA 的 7B 按 512KB/Token 算,单序列 128K 就要约 64GB——所以长上下文模型必须用 GQA/MQA、滑动窗口或 KV 量化)
  • 框架的开销怎么估?(用 vLLM 的 gpu_memory_utilization 参数反推:框架先 profiling 实测可用 KV 空间,比手算更准,压测时以实测为准)

102. 投机解码(Speculative Decoding)的原理和适用条件?

低频 · 较难

参考答案

要解决的问题:自回归 Decode 是串行的——每生成一个 Token 都要完整读一遍模型权重(访存瓶颈),算力大量闲置。

原理(draft + verify 两阶段)

  1. 起草:用一个小而快的 draft 模型(参数量 1/10 到 1/50 量级)自回归连猜 k 个候选 Token(如 k=4~8);
  2. 验证:目标大模型一次前向并行验证这 k 个位置——因为权重只需读一遍,验证 k 个 Token 的成本远低于串行生成 k 步;
  3. 接受/拒绝:用拒绝采样逐个校验 draft Token 与目标模型的分布,一致则接受并前进;遇到第一个不匹配的 Token,从修正后的分布重新采样并停止本轮。数学上可证明最终输出分布与目标模型独立生成完全一致——是无损加速,不是近似加速。

加速条件与适用边界

  • draft 与 target 分布要接近:接受率 0.7~0.8 以上收益才明显(每轮期望前进 token 数 ≈ (1−a^(k+1))/(1−a) 量级,a 为接受率),实测常见 2~3 倍加速
  • 任务输出可预测时收益大:代码补全、模板化文本、RAG 中的引用拼接;
  • 收益小的场景:高温创意生成、分布差异大的领域(draft 老是猜错,退化为纯增加验证开销);
  • 工程前提:draft 与 target 通常需共享 tokenizer;部署要同时加载两个模型,显存有额外开销(小模型量级不大)。

变体:不需要独立 draft 模型的 self-speculative 方案——Medusa(在目标模型上加多个预测头一次出多个未来 Token)、EAGLE(在特征层面自回归起草);以及针对 RAG/代码场景几乎零成本的 Prompt Lookup Decoding(直接从上下文里 n-gram 匹配拷贝候选,赌输出与检索内容高度重合)。

面试官可能追问

  • 为什么验证 k 个 Token 的成本远小于 k 步串行?(Decode 每步的瓶颈是把权重从显存搬进计算单元,一次前向只搬一次;验证阶段算力并行度也高)
  • 投机解码会改变输出质量吗?(不会,拒绝采样保证分布等价;但随机种子下的具体输出序列会不同)
  • 什么情况下负优化?(接受率低(draft 太弱或任务发散)、序列很短、或 draft 推理开销占比过高时,总时间反而增加,上线前必须分场景压测)

Released under the CC-BY-SA-4.0 license.