知行札记
专题AI 模型与系统模型推理与计算承载

模型推理与计算承载

从算术强度与资源账出发,理解 prefill、decode、调度、缓存、加速和服务目标。

一次请求的两种计算

自回归模型先处理输入前缀,再不断生成 token。prefill 将输入多个位置送入模型,建立缓存并计算首个输出分布;decode 在已有缓存上追加新位置,反复取得下一 token。两阶段共享权重,矩阵形状、注意力访问和资源使用不同。

长输入 prefill 往往有较大的矩阵乘法,能够摊薄权重读取;小批 decode 每轮只处理少量新位置,需要反复读取权重和历史 KV,常受内存带宽限制。实际瓶颈取决于批量、长度、架构、精度、内核、设备和通信。短 prefill、超长 KV、MoE 或高并发都可能改变这幅画像。

先算资源账

设备内存包括权重、KV cache、激活、临时缓冲、图捕获和分配开销。参数数乘存储字节只给出权重载荷,量化还需尺度与元数据。稀疏激活的 MoE 通常仍需存放全部专家或安排交换;激活参数量无法独立预测显存和速度。

吞吐优化要同时检查容量、带宽、算力和互联。roofline 用算术强度 I=F/DI=F/D 将计算量 FF 与传输字节 DD 相连。若算力上限为 π\pi、带宽上限为 β\beta,理想耗时下界为

t≥max⁡(F/π,D/β).t\ge\max(F/\pi,D/\beta).

分界强度为 I∗=π/βI^*=\pi/\beta。真实执行还会有内核启动、同步、低占用、调度和额外搬移,因此达到这一下界需要更多条件。

构造近似:一个稠密模型有 NN 个参数,存储每参数 ss 字节,每 token 权重乘加约 2N2N FLOPs。忽略注意力与中间读写,prefill 长度 PP 的强度约 2P/s2P/s;decode 批量 BB 的强度约 2B/s2B/s。BF16 的 s=2s=2,得到约 PP 和 BB。这解释增加批量为何能摊薄权重读取,不能据此宣称真实设备利用率或固定加速倍数。

长上下文使 KV 访问增大,批量增大也会增加算术工作、队列等待和内存。吞吐提高与单请求更快是不同目标。prefill 的批处理也可能提高利用率,不能一概认定它只增加延迟。

服务目标决定优化方向

首 token 延迟 TTFT 包含排队、请求处理、缓存匹配、prefill 和传输。输出 token 间隔 ITL 观察流式步进;平均 TPOT 不能代替尾部间隔。总完成时间还随输出长度变化。应同时记录 p50/p95/p99、吞吐、成功率与实际 token 口径。

goodput 表示在声明的质量与延迟目标内成功完成的工作速率。只计算每秒 token,可能奖励很长的错误输出、持续排队或少数请求被饿死。模型、输入/输出长度分布、到达方式、并发与缓存冷热状态必须随基准保留。

本专题继续在 缓存与请求调度 说明多请求如何共享资源,在 投机解码与量化 推导单步加速及条件,在 服务与边缘部署 说明阶段隔离和设备约束。

最后更新于

本页目录