第 09 章 · 大模型算法岗
推理与服务优化
围绕 prefill、decode、KV Cache、FlashAttention、PagedAttention、量化与在线调度建立完整性能模型。
大模型推理为什么分 Prefill 和 Decode?
30 秒口述版
Prefill 并行处理整段提示并建立 KV cache,通常计算密集;decode 每步只生成一个 token,反复读取权重和缓存,常受内存带宽限制。
原理与推导
两阶段工作负载不同,因此 TTFT、TPOT、吞吐和并发必须分别优化。
公式、代码或工程案例
分别用长 prompt 和高并发短请求做压测。
高频追问
- Chunked prefill 解决什么?
- 如果规模、数据分布或延迟约束变化,方案应怎样调整?
易错点
不要用单一 tokens/s 掩盖首 token 延迟。
权威来源
KV Cache 显存怎样估算?
30 秒口述版
近似为 2×层数×token 数×KV 头数×head_dim×每元素字节,再乘并发序列。
原理与推导
GQA/MQA、量化和分页管理可降低占用;实际还含块碎片和元数据。
公式、代码或工程案例
对 32 层、8 KV 头、128 维、BF16 代入计算。
高频追问
- 滑动窗口如何改变缓存?
- 如果规模、数据分布或延迟约束变化,方案应怎样调整?
易错点
不要用查询头数替代 KV 头数。
权威来源
FlashAttention 为什么更快?
30 秒口述版
它通过分块和在线 softmax 减少 HBM 读写,在片上 SRAM 中完成局部计算,保持精确注意力结果。
原理与推导
理论 FLOPs 仍为二次,但 IO 复杂度更低,且避免物化完整注意力矩阵。
公式、代码或工程案例
比较普通 attention 与 tiled attention 的内存访问。
高频追问
- FlashAttention-2/3 改进了什么?
- 如果规模、数据分布或延迟约束变化,方案应怎样调整?
易错点
不要说它把复杂度变成 O(n)。
权威来源
PagedAttention 解决了什么问题?
30 秒口述版
它像虚拟内存一样把 KV cache 划为固定块并用块表映射,降低连续预留造成的内部碎片并支持共享前缀。
原理与推导
分页让调度器能灵活扩展和回收序列,是 vLLM 高吞吐的重要基础。
公式、代码或工程案例
模拟长度未知请求的块分配与释放。
高频追问
- 块大小如何影响碎片和内核?
- 如果规模、数据分布或延迟约束变化,方案应怎样调整?
易错点
不要把它与模型里的 block-sparse attention 混淆。
权威来源
Continuous Batching 是什么?
30 秒口述版
调度器按迭代动态加入新请求、移除完成请求,而不是等待整个静态 batch 结束。
原理与推导
它提高 GPU 占用和吞吐,但需要公平性、抢占、cache 管理与延迟 SLO。
公式、代码或工程案例
比较静态 batch 与 iteration-level scheduling 时间线。
高频追问
- 优先级请求怎样插入?
- 如果规模、数据分布或延迟约束变化,方案应怎样调整?
易错点
不要只追求满 batch 而饿死长请求。
权威来源
吞吐、TTFT、TPOT 和并发怎样权衡?
30 秒口述版
TTFT 衡量首 token,TPOT 衡量后续 token 间隔,吞吐看单位时间总 token;提高 batch 常增吞吐却可能恶化延迟。
原理与推导
容量规划必须基于真实 prompt/output 长度分布与 SLO,而非离线峰值。
公式、代码或工程案例
绘制并发上升时 p50/p99 和 tokens/s 曲线。
高频追问
- Goodput 与 throughput 有何区别?
- 如果规模、数据分布或延迟约束变化,方案应怎样调整?
易错点
不要只报平均延迟。
权威来源
权重量化与 KV Cache 量化有何区别?
30 秒口述版
权重量化减少模型存储和读取,KV 量化减少随上下文与并发增长的缓存;误差来源和校准方法不同。
原理与推导
在线推理是否加速取决于是否有高效低比特内核,不能只看文件大小。
公式、代码或工程案例
分别测试 prefill、decode 和长上下文质量。
高频追问
- 激活量化为什么更难?
- 如果规模、数据分布或延迟约束变化,方案应怎样调整?
易错点
不要把 4-bit 存储等同于全程 4-bit 计算。
权威来源
GPTQ、AWQ 与 SmoothQuant 思路有何差异?
30 秒口述版
GPTQ 用二阶近似逐层做训练后权重量化,AWQ 保护重要激活通道对应权重,SmoothQuant 把激活离群难度迁移到权重。
原理与推导
它们面向的权重/激活位宽与硬件实现不同,应按部署栈选择。
公式、代码或工程案例
在同一模型上比较困惑度、任务分数和真实吞吐。
高频追问
- 校准集怎样选?
- 如果规模、数据分布或延迟约束变化,方案应怎样调整?
易错点
不要只比较量化误差而忽略 kernel。
权威来源
投机解码为什么能保持目标分布?
30 秒口述版
草稿模型并行提出多个 token,目标模型一次验证并按接受规则修正,因此在正确实现下保持目标模型采样分布。
原理与推导
收益取决于接受率、草稿成本和目标模型并行验证效率。
公式、代码或工程案例
用接受长度与草稿/目标耗时估算加速上限。
高频追问
- Self-speculative decoding 怎么做?
- 如果规模、数据分布或延迟约束变化,方案应怎样调整?
易错点
不要直接接受草稿输出而跳过校正。
权威来源
Tensor Parallel 怎样影响推理延迟?
30 秒口述版
TP 把矩阵计算和权重分到多卡,可让大模型装下并降低单卡计算,但每层引入集体通信。
原理与推导
低 batch 或跨节点时通信可能抵消收益,拓扑和并行度要实测。
公式、代码或工程案例
比较 TP=1/2/4 的延迟与显存。
高频追问
- 为什么高吞吐场景可能偏好较小 TP?
- 如果规模、数据分布或延迟约束变化,方案应怎样调整?
易错点
不要认为卡数翻倍延迟必减半。
权威来源
Prefix Cache 能带来什么收益?
30 秒口述版
对重复 system prompt 或共享文档前缀复用已计算 KV,减少 prefill 计算与 TTFT。
原理与推导
命中率、隔离安全、版本失效和缓存显存决定实际收益。
公式、代码或工程案例
按 prompt token ID 哈希并将模型/adapter 版本纳入键。
高频追问
- 不同采样参数影响前缀缓存吗?
- 如果规模、数据分布或延迟约束变化,方案应怎样调整?
易错点
不要跨模型或模板复用缓存。
权威来源
推理 OOM 应怎样定位?
30 秒口述版
区分权重加载、prefill 峰值、KV 增长、并发调度和碎片,记录请求长度与 cache block。
原理与推导
降低 batch 只是临时手段,应建立 admission control 和最大 token 预算。
公式、代码或工程案例
复现导致峰值的长度/并发组合。
高频追问
- 为什么空闲显存仍可能分配失败?
- 如果规模、数据分布或延迟约束变化,方案应怎样调整?
易错点
不要只看 nvidia-smi 的静态数值。
权威来源
在线服务怎样做容量规划?
30 秒口述版
从请求率、长度分布、SLO、模型并行和故障余量出发,用负载测试得到每副本 goodput。
原理与推导
还要考虑冷启动、adapter、峰谷、队列与降级策略。
公式、代码或工程案例
用生产分布回放而非固定长度合成请求。
高频追问
- 何时需要 prefill/decode 分离?
- 如果规模、数据分布或延迟约束变化,方案应怎样调整?
易错点
不要按 GPU 理论 FLOPs 直接换算 QPS。
权威来源
如何公平评测两个推理框架?
30 秒口述版
固定模型权重、精度、采样、硬件、长度分布、并发与正确性,再分别报告延迟分位数和吞吐。
原理与推导
必须先校验输出一致性或质量容差,否则更快可能来自精度或截断变化。
公式、代码或工程案例
预热后多轮测量并记录软件版本。
高频追问
- 为什么离线吞吐不能代表在线?
- 如果规模、数据分布或延迟约束变化,方案应怎样调整?
易错点
不要选择对某框架更有利的单点配置。
