大模型"能跑通"和"线上扛得住"是两回事,而大模型推理优化面试题考的正是后者——不是背概念,是能不能讲清取舍。本文按一条真实上线链路组织:先讲清生成为什么慢(自回归 + Prefill/Decode 两阶段)→ KV Cache 与长上下文 → PagedAttention 与连续批处理 → FlashAttention 与量化 → vLLM/TensorRT-LLM 部署与 Speculative Decoding,每问给"面试官想听的答题骨架 + 工程取舍"。
LLM 推理为什么比训练时的"一次前向"复杂?必答
LLM 生成是自回归的:每生成一个 token,都要把"完整前缀 + 新 token"再喂一次模型做前向。所以一次"生成 100 个 token"不是一次前向,而是 100 次串行前向——延迟天然是串行的,这也是它比分类模型贵得多的根因。面试要说清:总时延 ≈ 所有步长之和,单靠"算得快"不够,还得让每一步尽可能短、并减少要重算的内容。
Prefill 和 Decode 两个阶段的瓶颈分别是什么?必答
同一请求被切成两段:Prefill(预填充)处理提示词、一次性并行算所有位置的注意力——计算密集(compute-bound),瓶颈在 GPU 算力,表现为 TTFT;Decode(解码)逐 token 生成——每步只新增一个 token,但要把它的 Query 跟全部历史 Key/Value 做注意力——访存密集(memory-bound),瓶颈在显存带宽,表现为 TPOT。同一步推理,训练是"大矩阵并行",decode 是"读一大堆缓存只算一小点",所以量化、KV Cache 压缩这些手段主要利好 decode。
KV Cache 是什么?为什么说它是推理的"必需品"也是"负债"?必答
注意力里每个历史位置的 K、V 由该位置的完整前缀决定;decode 每步其实只需要新 token 的 Q,去和历史所有 K/V 做点积。KV Cache 就是把算过的 K/V 存下来复用,避免每一步把历史全部重算。它把 decode 从"O(序列²) 重算"降到"每步只做一次增量注意力"。代价:KV Cache 随序列长度 × 并发请求数线性涨显存,长上下文 + 大 batch 时,显存里一半以上都是 KV Cache——这是它变成"负债"的原因。要补一句"无 KV Cache 完全重算是朴素基线,没人这么上线"。
KV Cache 到底占多大显存?公式要会推。必答
每个 token、每层要存 K 和 V 两份;每份 = 头数 × 每头维度(总即 hidden 维)。所以
KV Cache 大小 ≈ 2 × batch × layers × hidden_dim × seq_len × 字节数。
举例:7B 级模型 ~32 层、hidden 4096,FP16(2 字节),单请求 4K 上下文 ≈ 32×4096×4096×2 ≈ 1GB+ 量级;并发一上来或上下文再长就指数级吃显存。答公式比答结论有区分度。
MQA / GQA 在优化什么?必答
MHA(多头注意力)每个头各自一套 K/V,KV Cache 随"头数×维度"涨。MQA 让所有 Q 头共享一组 K/V,GQA 是折中——把 Q 头分成几组、每组共享 K/V(如 8 组)。代价是表达能力略降,收益是 KV Cache 与 decode 访存按分组比例下降。现在主流开源模型几乎都用 GQA 做"训练时就把 KV 做小"的结构性手段,属于模型侧已内置的优化,和部署侧量化 KV Cache 是两条互补路线。
PagedAttention 解决什么问题?必答
朴素实现给每个请求预分配"能装最大长度"的连续显存,KV Cache 用不满就留下碎片、且显存被占住无法给别的请求。PagedAttention 借鉴操作系统的分页 / 虚拟内存:把 KV Cache 切成固定大小的块(page),用块表按需分配、物理上可以不连续。请求长短不一也互不阻塞,显存利用率显著提升 → 同样的卡能塞更大的 batch → 吞吐上台阶。vLLM 的核心卖点就是它。
Static batching 和 Continuous batching 差在哪?为什么前者浪费?必答
Static batching 必须等一整批请求攒满才一起算,先来的请求干等"发车",跑的过程中新请求进不来、已完成的还得占着等整批结束。Continuous batching(也叫 iteration-level scheduling)每步都检查:有请求生成了终止符就立刻移出、腾出的显存马上放新请求进来——每一步的 batch 是动态的。收益:排队时延降低、吞吐提高,是 vLLM/TGI 这类框架的标配调度。
服务端想同时压延迟和吞吐,为什么总是二选一?进阶
batch 越大,GPU 算力用得更满、吞吐越高,但每个请求要等同一批里别人一起推进,单请求 TPOT 变长;batch 越小越接近独占、延迟低但吞吐浪费。生产常用"延迟预算内尽量大的 batch + 动态调度",再加优先级/抢占:把"交互式在线请求"和"离线批处理任务"分池,别让一次长离线任务拖垮在线 P99。能把"权衡 + 分池"讲清楚,比背参数强。
FlashAttention 为什么快?它改了哪一层?必答
不是改算法结果,而是改访存策略:普通实现先把整张 n×n 的注意力打分矩阵 S 算出来写回 HBM,softmax 后再读出来加权——S 矩阵物化一次就是 O(n²) 的显存读写。FlashAttention 做IO-aware 分块:把 Q/K/V 切成小块,在 SRAM 片上分块算局部 softmax 并用在线归一化(running max/sum)把结果拼对,全程不落整张 S。v1 证明分块可行,v2 进一步省掉 S 物化、把并行度放到序列维,v3 面向 H100 用更细粒度的并行与流水。回答落点:省的是 HBM 往返,不是 FLOPs——decode 这种访存瓶颈场景尤其受益。
量化怎么选:GPTQ / AWQ / GGUF 各是什么思路?必答
都是 PTQ(训练后量化)把权重压到 4bit/8bit。GPTQ 逐层用"基于二阶 Hessian 信息"做误差补偿,把量化噪声摊到剩余权重里;AWQ 走激活感知路线——统计哪些通道对激活更重要,先按重要性保护(不量化或更高精度),再用缩放把误差降下来;GGUF 主打"跨端通用 + 分片存储",让模型能在 CPU/低显存/消费级卡上跑起来(llama.cpp 生态)。选型口径:显存紧 / 要本地跑选 GGUF 或 AWQ 4bit;要吞吐优先服务端常用 W8A8 或 INT4 + KV Cache 量化;量化换的是显存与带宽,代价是精度与少量算力开销,上线前必做任务集上的精度回归。
vLLM / TGI / TensorRT-LLM 怎么选?进阶
vLLM:吞吐导向,PagedAttention + continuous batching,生态好、上手快,是当下默认首选;TGI:HuggingFace 出品,和 HF 生态/模型仓库集成顺,带消息队列与推理微服务能力;TensorRT-LLM:NVIDIA 深度优化,把图编译期优化 + 内核融合做到极致,适合"模型与 shape 稳定、要榨干单卡"的生产场景,代价是编译与工程成本高。面试答法:先讲需求(吞吐/延迟/多模型/换模型频率),再落到"框架本质是在做调度、显存、算子三层优化,选型是权衡不是选最好"。
Speculative Decoding 怎么做到"又加速又不损失质量"?加分
用一个小/快模型(草稿模型)先一次性猜出接下来 K 个 token,再用大模型一次前向并行验证这 K 个;验证对的原样采纳,第一个错的就从那里回退重来。因为 decode 是访存瓶颈、多验证几个 token 的前向边际成本低,猜中越多越赚(命中率即 acceptance rate)。关键点:结果分布与原始自回归一致(拒绝采样保证无偏),所以不是近似加速。适用前提是草稿模型和大模型"想得差不多",代码/数学类任务命中率常低于闲聊,要拿真实负载测收益再上。
"线上一个 LLM 服务延迟高 / 吞吐上不去,你从哪几层排查?"加分
按"指标 → 定位 → 对症 → 验证"铺:① 先量化:TTFT / TPOT / ITL、QPS、显存占用与碎片、排队长度,分不清是 prefill 重还是 decode 慢还是排队;② 定位:请求长且首 token 慢 → prefill 或长上下文;并发高且 TPOT 涨 → KV Cache 挤占或 batch 策略问题;显存 OOM/碎片 → 该上 PagedAttention/量化/降并发;③ 对症:先免费手段(continuous batching + 调 batch + 量化 KV Cache + 升级驱动/算子),再付费手段(换更大显存卡、多卡切分、Speculative Decoding),最后才是换模型;④ 验证:同一任务集跑优化前后延迟分布与吞吐,防"快了但变差"。答出"先分层量化再动手、不靠拍脑袋"是核心分。
"要给一个'读超长文档后问答'的产品做推理优化"——怎么设计?加分
先拆:这种场景是"一次深读 + 多次短问答",别把整本书每次都塞 prefill。给四层方案:① 内容侧:文档先切块做检索(RAG),只把相关段落进上下文,把"长 prefill"变成"短 prefill";② 确需长上下文时,用分块/异步 prefill 或长上下文并行来压 TTFT;③ 多轮追问共享已算的 KV Cache(别重复 prefill 同一批历史),必要时做 KV Cache 摘要/丢弃;④ 服务侧量化 + 按文档长度分池,避免一条 10 万 token 请求堵住所有短请求。落点:推理优化要往前端内容设计要解法,不是只在 GPU 里折腾。
按出现频率排,六块最常考:① 生成为什么慢——自回归与 Prefill/Decode 两阶段各自是 compute-bound 还是 memory-bound;② KV Cache——显存怎么估(2 × 层数 × KV 头数 × head_dim × 序列长度 × batch × 字节数)、长上下文怎么办;③ 显存与批处理——PagedAttention、连续批处理解决什么问题;④ 算子与量化——FlashAttention 在省什么、GPTQ/AWQ/GGUF 各自适用场景;⑤ 解码加速——Speculative Decoding 成立的前提;⑥ 系统设计——给定 QPS 与延迟 SLO,你怎么选模型、并行策略与硬件。回答时先给框架再给数字,比直接背结论得分高。
面向推理优化 / 部署 / AI Infra 工程师,以及要讲清 serving 的算法岗与后端岗。纯模型侧算法则在此基础上叠加「大模型算法岗面试高频考点清单」。
理论先按本文自查;动手用小模型 + 消费级机器跑一遍:本地或 Colab 用 vLLM 起服务、开 continuous batching 和不开各测一轮,量化(GGUF/AWQ)再比一轮,把"延迟/吞吐/显存"的变化讲成你自己的对比实验即可,不必有集群。
关注小红书「兔老板工作室」私信「资料」免费领真题 PDF;「AI Infra 免费刷题面板」在线可刷 KV Cache、FlashAttention、连续批处理等推理优化题。
没有国内实习不影响:推理岗很吃"自己真跑过"——挑一个小模型在本地/云上完成部署 + 量化 + 压测,量化前后延迟与显存数据自己记录,这就是最硬的面试项目;能用中英双语讲更稳。需要系统带练的可远程约课。
📚 免费系列长文:大模型算法岗高频考点清单 · RAG 面试 10 问 · AI Agent 面试 · 大模型微调对齐考点 · 大厂头部人才计划对比 · 简历与项目避坑指南 · 美国留学华人AI求职 · AI Infra 免费刷题题库