M8-047M8: ML Systems, Engineering & ResearchCost & Latency OptimizationMedium
Mastery:
Cost & Latency Optimization: 解释批处理(含连续批处理)对吞吐与延迟的双向影响。
📐 Mathematical Definition
⚡ Executive Summary
Core Concept: 增大 batch 提高吞吐(摊薄权重读取与 kernel 启动开销)但增加单请求排队与首 token 延迟;连续批处理在 token 级动态组批,兼顾吞吐与延迟。
📌 Key Takeaways
- •静态批处理——固定 batch 内所有请求等最慢者完成,短请求被长请求拖累(队头阻塞)
- •连续批处理——每个解码步动态移除已完成序列、加入新序列,显著降低平均延迟
- •吞吐-延迟权衡——batch 越大吞吐越高但首 token 延迟(TTFT)与 TPOT 上升
- •显存约束——batch 受 KV cache 显存限制,需分页(PagedAttention)与调度
- •调度策略——先到先服务、最短作业优先、按 SLO 分层调度
📐 Mathematical Derivations
数学机理:<strong>批处理的收益与代价</strong>——(1) <strong>为何批处理提升吞吐</strong>——(a) <strong>权重读取摊薄</strong>——decode 每步需读取全部权重(显存带宽受限),batch=B 时一次读取服务 B 个请求 → 单位请求的带宽成本降为 1/B;(b) <strong>kernel 启动摊薄</strong>——GPU kernel 启动有固定开销,批处理摊薄;(c) <strong>算力利用率</strong>——batch 大时矩阵乘规模增大,算术强度提高,更接近算力上限(MFU 提升)。(2) <strong>为何批处理增加延迟</strong>——(a) <strong>排队</strong>——等待凑批与等待前序请求;(b) <strong>单步变慢</strong>——T_step ≈ T_mem + B·T_flop,batch 越大每步耗时越长;(c) <strong>故 TTFT 与 TPOT 随 B 上升</strong>。(3) <strong>静态批处理的问题</strong>——(a) <strong>队头阻塞(head-of-line blocking)</strong>——固定 batch 需等所有序列结束才释放,短请求被最长请求拖累;(b) <strong>利用率低</strong>——序列陆续结束时 GPU 空闲('尾部空洞')。(4) <strong>连续批处理(continuous batching / iteration-level scheduling)</strong>——(a) <strong>机制</strong>——在<strong>每个解码步</strong>检查哪些序列已完成(遇 EOS 或达长度),立即移除并释放 KV,同时从队列加入新请求;(b) <strong>效果</strong>——(i) 消除队头阻塞(短请求尽早返回);(ii) 提高 GPU 利用率(步内始终接近满批);(iii) 吞吐与延迟同时改善;(c) <strong>前提</strong>——需要<strong>分页 KV cache</strong>(PagedAttention)以支持 KV 的非连续分配与释放;(d) <strong>调度</strong>——需在步内决定'选哪些请求组成下一批'(FCFS / 最短作业优先 / 按 SLO 优先级)。(5) <strong>显存约束</strong>——(a) batch 上限由 KV cache 显存决定(KV 随 batch 与长度线性增长);(b) <strong>分页</strong>——把 KV 切成固定大小的块,按需分配,减少碎片、支持抢占与共享前缀;(c) <strong>抢占(preemption)</strong>——显存不足时换出低优先级序列的 KV。(6) <strong>调度目标</strong>——(a) <strong>吞吐最优</strong>——尽量满批;(b) <strong>延迟 SLO</strong>——按 TTFT/TPOT 目标分配;(c) <strong>公平/优先级</strong>——分层(付费/免费)。(7) <strong>相关技术</strong>——(a) <strong>chunked prefill</strong>——把长 prefill 切块与 decode 混批,避免长 prefill 阻塞 decode;(b) <strong>PD 分离</strong>——prefill 与 decode 部署在不同实例,各自优化。<strong>与其他问题的关系</strong>——(a) 与推理成本(吞吐即成本);(b) 与延迟分解(TTFT/TPOT);(c) 与 KV cache 管理。<strong>度量</strong>——(a) 吞吐(token/s);(b) TTFT / TPOT / 端到端延迟分位数;(c) GPU 利用率(MFU);(d) 平均 batch 大小。
🏭 Production Trade-offs
深度剖析与工程权衡:① <strong>批处理是吞吐与延迟的权衡旋钮</strong>——面试中能给出 T_step ≈ T_mem + B·T_flop 是深度理解的标志。② <strong>静态批处理的队头阻塞是真实痛点</strong>——连续批处理是当前主流(vLLM/TGI 等)。③ <strong>连续批处理依赖分页 KV</strong>——没有 PagedAttention 难以动态分配与释放。④ <strong>chunked prefill 解决长 prefill 阻塞</strong>——长输入会打断 decode 的稳定 TPOT。⑤ <strong>PD 分离是前沿实践</strong>——prefill 与 decode 的瓶颈不同,分离部署可各自优化。⑥ <strong>显存是硬约束</strong>——batch 上限由 KV 显存决定,量化与 GQA 可放宽。⑦ <strong>面试要点</strong>——被问怎么同时优化吞吐与延迟,应给出'<strong>连续批处理 + 分页 KV + chunked prefill + 按 SLO 调度</strong>',并指出'静态批处理有队头阻塞';能给出 T_step 分解是深度理解的标志。
⚠️ Common Interview Pitfalls
- ✕用静态批处理处理长短混合请求(队头阻塞)
- ✕只追吞吐不考虑 TTFT/TPOT 的 SLO
🎯 Interviewer Follow-ups
- ?为什么静态批处理会有队头阻塞?
- ?连续批处理如何与分页 KV cache 配合?
📚
Associated Knowledge Base Guides & Mindmaps
Explore the comprehensive technical article, exam cards, and global architecture tree.