Files
llm-atlas/research/INFERENCE_SERVING_RESEARCH.md
T
2026-07-29 08:39:32 +08:00

46 KiB
Raw Blame History

推理服务与低成本部署:正式研究账本

状态:首版证据核验完成,供 Chapter 14 正文、原创图和交互实验使用。

核验日期:2026-07-29

锚点:Kimi K3 §4.1.4 / §5.1 / §5.3.1 / §5.4、Mooncake、DeepSeek-V2 §2、 DeepSeek-V3 §2.1 / §3.4、DeepSeek-V3.2 §2.3、DeepSeek-V4 §2.3 / §3.5 / §5.2.1。

证据纪律:Grok 只做召回;正文事实只来自 P0 论文 / 技术报告或 P1 作者官方实现。 所有 speedup 都保留作者的模型、硬件、负载、SLO 与基线边界,不外推为通用常数。


0. 本章真正回答什么

训练完成只说明模型参数存在,不说明它能以可接受的成本、延迟和可靠性服务真实用户。 一个在线 LLM 请求同时穿过四层:

模型结构
  attention / MoE / precision / draft
        ↓
单实例引擎
  KV allocator / batching / prefix cache / graph
        ↓
设备内核
  GEMM / attention / quantization / communication
        ↓
集群与产品
  routing / admission / SLO / failover / cost

任何一层都可能成为瓶颈。于是本章坚持四条总原则:

  1. prefill 与 decode 分账:两者的并行度、算术强度和用户指标不同;
  2. 权重与状态分账:量化权重不等于压缩 KV Cache;
  3. 吞吐与 goodput 分账:超时后完成的 token 可能不产生产品价值;
  4. 算法与实现分账:低 FLOPs 不保证低延迟,内存流量、通信、kernel shape 和 batch 同样重要。

1. 十八张独立问题账

# 账本 本章要回答的问题 最常见误写
Q1 服务指标 TTFT、TPOT、E2E、throughput、goodput 各测什么? 只报 tokens/s
Q2 权重显存 权重、scale、workspace、runtime buffer 占多少? 参数量直接等于显存
Q3 KV 状态 每 token 的状态怎样随层数、KV heads、精度增长? 只看 context length
Q4 分配与碎片 连续预留为什么浪费,分页又留下什么边角? PagedAttention“零碎片”
Q5 Prefill 长 prompt 为什么常是算力密集? 只写成“生成第一个 token”
Q6 Decode 单步生成为什么常是带宽密集? FLOPs 少所以必然快
Q7 批处理 request / iteration / continuous batching 有何不同? 动态 batch 自动解决全部问题
Q8 阶段干扰 长 prefill 如何抬高正在 decode 的 TPOT 平均延迟掩盖停顿
Q9 内核 IO-aware、融合、图捕获与 shape 调度解决什么? FlashAttention 等于全栈 serving
Q10 前缀复用 何时可以合法跳过 prefill 相同文本块都可直接复用
Q11 PD 分离 为什么拆,KV 又怎样跨设备? 分离一定降本
Q12 推测解码 接受率和 draft 成本怎样决定净加速? 固定 23×
Q13 量化 W / A / KV 各自压什么,内核是否吃得到? 位数越低越快
Q14 并行 TP / PP / DP / EP 怎样映射到服务阶段? 训练拓扑照搬推理
Q15 MoE 激活参数少为何仍可能贵? 忽略权重流与 all-to-all
Q16 调度与 SLO 公平、缓存亲和、尾延迟怎样冲突? P50 代表体验
Q17 Fleet 扩缩、迁移、过载与故障怎样处理? 副本数等于瞬时容量
Q18 谱系 DeepSeek / Kimi 在四层各改了什么? 所有优化压成“模型更快”

2. Q1:先把服务指标说清楚

设请求到达时间为 t_arrive,首个输出 token 到达为 t_first,最后完成为 t_done 相邻输出 token 时间为 t_i

TTFT = t_first - t_arrive
TPOT_i = t_i - t_{i-1}
E2E latency = t_done - t_arrive
output throughput = 完成的输出 token / 时间
request throughput = 完成的请求 / 时间

2.1 指标不是同义词

  • TTFT / Time To First Token:排队 + prefill + 首次 decode
  • TPOT / Time Per Output Token:流式输出的节奏,也常写 ITL / inter-token latency
  • E2E latencyTTFT 加上后续全部生成;
  • throughput:系统做了多少工作,不保证工作及时;
  • goodput:在给定 TTFT / TPOT / E2E SLO 内完成的有效请求率;
  • P50 / P95 / P99:分位数,不可由平均值替代。

DistServe 明确把 per-GPU goodput 定义为满足延迟约束的最大请求率,并在其硬件、模型、 trace 与 SLO 设置下报告最高 7.4×;这个数字不是“PD 分离永远 7.4×”。

一手来源:DistServe

2.2 输入与输出成本必须分开

输入 token 主要支付 prefill;输出 token 每增加一个都要再走一次自回归 decode。 同样是 1M token

  • 1M 输入 + 1 输出;
  • 1K 输入 + 999K 输出;

对 GPU 时间、KV 生命周期和用户等待完全不是一回事。任何 $ / 1M tokens 若不区分 input / output、cache hit / miss、batch、上下文位置和 SLO,解释力都很弱。


3. Q2Q3:权重显存与 KV Cache 是两张账

3.1 权重下界

若模型有 P 个参数,平均存储位宽为 b_w

WeightBytes ≈ P × b_w / 8

这是权重本体的解析下界,不含:

  • 每组 scale / zero point
  • embedding / lm head 的特殊精度;
  • CUDA graph、workspace、通信 buffer
  • runtime 元数据和临时 activation
  • speculative draft
  • 多副本或流水 stage。

3.2 标准注意力 KV 公式

对 batch B、已缓存 token 数 T、层数 L、KV head 数 H_kv、每头维度 D_h、 每元素字节 s

KVBytes = B × T × L × 2 × H_kv × D_h × s
                         └K+V┘
KVBytesPerToken = L × 2 × H_kv × D_h × s

这是架构维度推导,不是某个框架的实测显存。

教学例:

L = 32, H_kv = 8, D_h = 128, BF16 = 2 bytes
KV / token / request = 32 × 2 × 8 × 128 × 2
                     = 131,072 bytes = 128 KiB
128K tokens ≈ 16 GiB

若同样模型使用 H_kv = 32 的 MHA,教学值会变成 512 KiB/token。这说明 GQA/MQA 主要改变 KV head 维度;它们没有把 attention 变成固定状态。

3.3 MHA、MQA、GQA、MLA、KDA 不能画成同一种压缩

结构 随序列增长的主状态 保留方式 关键边界
MHA 每层每个 KV head 的 K/V 全量 token KV 最大但直接
MQA 单组 K/V 供多 Q heads 共享 全量 token KV KV heads 变少
GQA 若干组 K/V 全量 token KV MHA 与 MQA 之间
MLA 低维 latent KV + positional 分量 全量 token 的压缩表示 仍随 T 增长
KDA 每层固定大小 recurrent state 状态递推 不保留逐 token KV,但更新/回滚更复杂

一手来源:

DeepSeek-V2 作者报告 MLA 相对其 DeepSeek 67B 对照减少 93.3% KV cache 并提高最大生成吞吐; 只能按该报告对照理解,不能写成“MLA 对任意 MHA 都固定减少 93.3%”。


4. Q4PagedAttention 解决的是分配,不是模型数学

连续预留方案常按最大长度为请求留一整块显存,但真实输出长度未知:

reserved waste = 预留但最终未使用
external fragmentation = 空闲空间存在却不连续
internal fragmentation = 最后一个分配块未填满

PagedAttention 借鉴虚拟内存:

logical KV blocks
      ↓ block table
non-contiguous physical blocks in GPU pool

它让 KV 按需增长、可交换、可 copy-on-write 共享。vLLM 论文在其模型和 workload 上报告相对 当时系统 24× throughput,但核心机制不是减少 Transformer FLOPs。

4.1 “近零浪费”不等于零

若 block size 为 S,请求长度 T

blocks = ceil(T / S)
allocated tokens = blocks × S
internal waste = allocated tokens - T

每个请求最后仍可能浪费 0 … S-1 个位置;还有 block table、引用计数、调度与 kernel 形状成本。 block 太小增加元数据和寻址,太大增加内部碎片。

一手来源:Efficient Memory Management for LLM Serving with PagedAttention


5. Q5Q6Prefill 与 Decode 是两种工作负载

5.1 Prefill

一次处理整个输入序列:

  • Q/K/V 与 MLP GEMM 能沿 token 维并行;
  • 标准 dense attention 的配对随序列近似二次增长;
  • 长 prompt 的 TTFT 对算力、attention IO 与 prefix hit 极敏感;
  • 结果是后续 decode 所需的 KV / recurrent state。

5.2 Decode

每步通常只新增一个 token

  • 必须读取模型权重;
  • dense attention 还需读取历史 KV
  • 单请求矩阵很“瘦”,GPU 计算单元不容易吃满;
  • batch 可摊薄权重读取,但同时增长 KV 容量与排队。

因此常见直觉是:

prefill:更偏 compute-bound
decode:更偏 memory-bandwidth-bound

这是常见 regime,不是硬定律。短 prompt、小模型、极大 batch、特殊 kernel、量化、MoE、稀疏/ 线性 attention 都会移动瓶颈。

Splitwise 正是基于两阶段不同的计算、内存和功率特征做 phase splitting;论文在其集群设计和 工作负载下报告 1.4× throughput 且成本低 20%,或相同成本/功率 2.35× throughput。

一手来源:Splitwise


6. Q7:从固定 batch 到 iteration-level scheduling

6.1 Request-level batching 的队头阻塞

若一个 batch 必须等最慢请求结束:

短输出:早已完成却不能及时离开
新请求:必须等整个 batch 结束
长输出:决定所有人的生命周期

6.2 Orca 的转折

Orca 把调度粒度降到每次模型 iteration,并用 selective batching 处理不同 operation

  • 已完成请求在 iteration 边界离开;
  • 新请求可以加入下一轮;
  • batch 组成随生成过程变化。

Orca 在论文的 GPT-3 175B 部署与对照下报告 36.9× throughput;硬件、系统代际和基线均 限定该数字。

一手来源:Orca, OSDI 2022

6.3 Continuous batching 仍有决策

它不是一个开关,而是一组策略:

  • 一轮准入多少 prefill / decode token
  • 是否抢占,以及 swap / recompute 哪个更便宜;
  • 长短请求、优先级和租户怎样排队;
  • batch token budget 如何限制;
  • 何时触发 CUDA graph 或特定 kernel
  • KV 不够时驱逐谁。

FastServe 用可抢占调度降低长请求阻塞;Llumnix 进一步支持跨实例迁移请求及其 KV 状态。

一手来源:


7. Q8Chunked Prefill 在吞吐与停顿之间切账

长 prefill 整块插入 continuous batch 会让正在 decode 的请求等待。Sarathi-Serve 把 prompt 切成若干 chunk,并把 chunk 与 decode token 组成更均匀的 iteration

long prefill
  ├─ chunk 1 + decode batch
  ├─ chunk 2 + decode batch
  ├─ chunk 3 + decode batch
  └─ ...

收益:

  • 限制单轮 stall
  • 提高 decode batch 的连续性;
  • pipeline 下减少不均匀 iteration 的气泡。

代价:

  • chunk 太小会增加调度、kernel launch 和中间状态成本;
  • chunk 太大又回到 decode stall
  • 最优 token budget 依赖模型、GPU、并行度、prompt/output 分布与 SLO。

Sarathi-Serve 作者在 Mistral-7B / Yi-34B / Falcon-180B 的不同硬件设置下分别报告最高 2.6× / 3.7× / 5.6× serving capacity,必须逐设置引用。

一手来源:Sarathi-Serve, OSDI 2024


8. Q9:内核优化究竟省了什么

8.1 FlashAttention:精确 attention 的 IO 重排

FlashAttention 用 tiling 避免显式把完整 attention matrix 往返 HBM,并在片上做在线 softmax。 它是 exact attention:结果数学上不靠丢 token 近似;速度来自 IO-aware schedule。

FlashAttention-2 改善并行和 work partitionFlashAttention-3 面向 Hopper 的异步与低精度路径。

一手来源:

8.2 Decode kernel 与 prefill kernel 不是同一个最优形状

decode 的 query 很短、KV 很长;需要沿 KV 长度切分、归约并控制状态读取。FlashInfer 用组合式 KV format、JIT attention template、load-balanced scheduling 与 CUDA graph 兼容处理多种 serving shape。论文报告的 ITL 降低范围仅适用于其模型、硬件和 compiler 对照。

一手来源:FlashInfer

8.3 Kernel 快不等于端到端快

端到端还包含:

  • tokenizer、排队、RPC
  • KV 分配 / hash / transfer
  • all-reduce / all-to-all
  • sampling、logits processing、structured decoding
  • host launch、graph capture
  • draft 与 verifier
  • 请求迁移和故障路径。

所以 kernel microbenchmark、single-request latency 与 fleet goodput 必须分开报告。


9. Q10:前缀缓存何时合法

9.1 最安全的基本条件

可直接复用的通常是:

  • 同一 checkpoint / adapter
  • 同一 tokenizer 与精确 token prefix
  • 相容的位置编码、attention mask 与 multimodal preprocess
  • 相同精度 / cache layout
  • cache 对应的所有模型状态完整且未被原地修改。

“两段文本内容相同”不够。若它们前面的上下文或位置不同,K/V 也可能不同。

9.2 三种复用层次

层次 代表 做法 边界
精确共同前缀 vLLM / SGLang block hash / radix tree 只复用 prefix
批内共享前缀 Hydragen / ChunkAttention 共享 prefix attention,再处理 suffix 需要共享度
非前缀 chunk CacheBlend 复用后选择性重算部分 KV 不是零重算

SGLang 的 RadixAttention 把请求前缀组织为 radix tree;其最高 6.4× throughput 是多个 structured program workload 下的作者报告,不是 prefix cache 单机制常数。

一手来源:

CacheBlend 的关键是:非前缀 chunk 的预计算 KV 缺失与前序 chunk 的 cross-attention,不能整块 无条件复用;它选择少量 token 重算并与 cache load 重叠。论文报告的 TTFT 2.23.3× 与 throughput 2.85× 只属于其模型、数据集、存储和对照。

9.3 CacheGen:运输也可以是瓶颈

CacheGen 压缩并流式传输 KV context,目标是让“加载已有状态”比重新 prefill 更划算。 压缩带来的质量、编码时间、网络和存储层次必须一起核算。

一手来源:CacheGen


10. Q11PrefillDecode Disaggregation

10.1 为什么拆

共置时,prefill 与 decode

  • 竞争 GPU
  • 需要妥协 batch / parallelism
  • 长 prefill 可抬高 decode TPOT
  • 两阶段无法独立扩容。

PD 分离让 prefill pool 和 decode pool 分别选择并行度、batch 和硬件。

10.2 新增的账

Prefill 完成后必须把状态交给 decode:

transfer time ≥ KV bytes / effective network bandwidth
              + serialization / layout conversion
              + queueing / handshake

真实成本还包括:

  • prefill / decode TP degree 不同时的重新布局;
  • 目标 decode 节点的 HBM 容量;
  • cache hit 与 transfer hit
  • NIC / PCIe / NVLink / RDMA 拓扑;
  • 失败重传和 stale cache
  • 阶段资源比随流量变化。

10.3 三个关键节点

  1. Splitwise:用不同机器匹配 prompt / generation 的不同特征;
  2. DistServe:围绕 TTFT / TPOT SLO 最大化 per-GPU goodput
  3. Mooncake:把 KVCache 当作跨 GPU、CPU DRAM、SSD 的中心资源,并加入过载 early rejection。

Mooncake 是 Kimi 的生产 serving 平台。论文作者报告:

  • 特定模拟长上下文场景最高 525% throughput increase
  • 真实 Kimi workload 在相同 SLO 下多处理 75% 请求。

这两个数字来自不同实验,不能合成“Mooncake 固定 5.25×”。

一手来源:


11. Q12:推测解码的数学与边界

11.1 核心协议

draft q:便宜地提出 k 个候选
target p:一次并行评分这段候选
accept/reject:保留合法前缀,并在拒绝处校正

Leviathan 与 Chen 等工作的关键不是“近似输出”,而是用修正采样保持 target distribution (在其数值假设下)。

一手来源:

11.2 接受率是加速墙

每步 acceptance mass

a = Σ_x min(p(x), q(x))

若用一个极简教学假设:每个 draft token 独立以概率 a 接受,draft 长度 k,一次 target verification 至少产出一个 token,则一次 target pass 的期望输出:

E[tokens] = 1 + a + a² + ... + a^k
          = (1 - a^(k+1)) / (1 - a),  a ≠ 1

这只是教学模型。真实接受率随位置、上下文、采样温度、领域、树结构和 batch 变化。

若 target 单步成本 C_t,每个 draft token 成本 C_d,一次验证成本 C_v(k)

toy speedup = E[tokens] × C_t / (k × C_d + C_v(k))

k 太大可能增加无效 draft 与验证成本;draft 太小虽便宜,分布太差又会拉低 a

11.3 从小模型到多头、树和 feature draft

路线 代表 草稿来自哪里 关键边界
独立 draft LM Speculative Sampling 小模型 两套权重 / cache
token tree SpecInfer 多候选小模型 树宽与验证成本
retrieval draft REST 语料中的重复片段 领域重复性
多预测头 Medusa target 上的额外 heads 需要训练 heads
feature autoregression EAGLE target 中间特征 模型耦合
dynamic tree EAGLE-2 置信度调树 校准决定树
multi-layer fusion EAGLE-3 低/中/高层特征 训练数据与实现

一手来源:

EAGLE-3 报告最高 6.5× 单场景速度、SGLang batch 64 下 1.38× throughput。两者口径不同, 页面必须同时展示,不挑最高数字制造错觉。


12. Q13:量化必须分 W / A / KV

量化对象 主要省什么 可能加速哪段 不能自动得到什么
Weight 权重存储与读取 decode、GEMM KV 变小
Activation GEMM 输入/中间流量 prefill / batched decode 权重自动低位
KV Cache 上下文状态容量与 attention 读取 长 context decode MLP 权重变小
Router / indexer 稀疏选择路径 long-context selection 主干全量低位

12.1 关键路线

  • LLM.int8:离群维走高精度,主体 INT8
  • GPTQ:基于近似二阶信息的一次性 weight-only PTQ
  • SmoothQuant:等价缩放把 activation outlier 难度迁给 weights,做 W8A8
  • AWQ:用 activation 统计识别并保护少量显著 weight channels
  • KVQuantper-channel key、pre-RoPE、非均匀与 dense-sparse KV
  • KIVIkey per-channel、value per-token 的 tuning-free 2-bit KV
  • QServeW4A8KV4 与 kernel/system co-design。

一手来源:

12.2 低位不保证更快

需要同时验证:

  • 硬件是否有对应 tensor core / vector path
  • dequant 是否落到慢 CUDA cores
  • scale / zero point 粒度;
  • group size 与 layout
  • kernel 是否融合;
  • batch / matrix shape 是否进入有利 regime
  • 精度回归是否覆盖实际工具、代码与长上下文任务。

QServe 正是指出云 serving 中 INT4 的 dequant overhead 可能抵消收益,并联合 W/A/KV 与 kernel 设计。其 3× 成本、不同 GPU 上的 throughput 数字只属于论文设置。


13. Q14Q15:并行与 MoE Serving

13.1 四种并行的服务含义

  • TP:一层权重分到多 GPU;降低单卡权重,但每层通信;
  • PP:层分 stage;可容纳超大模型,但小 batch / 不均匀 iteration 会有 bubble
  • DP:复制模型实例;提高独立请求吞吐,但每副本要有权重;
  • EP:专家分设备;只算所选专家,却引入 dispatch / combine all-to-all。

训练时最优拓扑不必是 prefill 或 decode 最优拓扑。

13.2 MoE 的三张隐藏账

  1. 权重带宽:小 batch 时每个激活专家权重仍需从 HBM 读取;
  2. 通信:token 要到专家所在 GPU,再 combine
  3. 倾斜:热门专家决定 tail latency,平均 token 数无济于事。

DeepEP 提供高吞吐与低延迟两类 expert dispatch/combine 路径;DeepGEMM 提供 FP8/FP4、 fused MoE 等 kernel。它们是 P1 官方实现,不等于独立 peer-reviewed 性能结论。

一手来源:


14. Q16Q17:调度、SLO、尾延迟与 Fleet

14.1 吞吐最大化与 SLO 最大化不同

把 batch 填满可能提高 tokens/s,却让:

  • 新请求 TTFT 变长;
  • 长 prefill 让 decode 停顿;
  • 短请求被长请求阻塞;
  • P99 越过 SLO。

因此 goodput 要把“及时完成”写入目标。

14.2 缓存亲和与负载均衡冲突

route to cache owner → 少 prefill,可能形成热点
route to idle replica → 队列短,可能 cache miss
move KV → 两边折中,但支付网络与迁移

Preble 在其 prompt-sharing workloads 中报告平均延迟 1.514.5×、P99 210× 改善; 范围巨大本身说明 workload 的 prefix sharing 才是因变量,不能抽出一个常数。

一手来源:Preble

14.3 迁移与重调度

Llumnix 把正在运行请求及其 in-memory state 迁移到其他 instance,用于负载均衡、碎片整理、 优先级与 SLO 隔离。迁移不是免费:收益必须超过 KV copy、网络和同步成本。

一手来源:Llumnix, OSDI 2024

14.4 过载时“全接收”不是中立政策

如果到达率长期超过可服务率,队列只会增长。Mooncake 使用预测式 early rejectionK3 进一步 按请求类别设置 resource budget,让百万 token burst 不拖垮短请求。

页面必须解释:

  • admission control 是容量保护,不是模型能力;
  • rejection rate、goodput 与用户公平需要一起报告;
  • 平均 request 不能代表 2K 与 1M token 混合流量。

15. Q18DeepSeek 推理服务谱系

DeepSeek 的主线不是单一“更低精度”,而是四层协同:

V2MLA 压 KV + DeepSeekMoE
  ↓
V3MLA/MoE + prefill/decode 分离 + 冗余专家 + MTP
  ↓
V3.2DSA 用 lightning indexer 选择少量 KV
  ↓
V4CSA/HCA + heterogeneous cache + on-disk prefix + FP4 QAT

15.1 DeepSeek-V2:先改模型状态

MLA 缓存低维 latent 表示,而非完整 head-specific K/VDeepSeekMoE 降低每 token 激活计算。 这是模型结构层的成本改变,仍需要引擎与 kernel 才能兑现。

一手来源:DeepSeek-V2

15.2 DeepSeek-V3:公开写出两套部署拓扑

报告 §3.4

  • prefill 最小单元 4 nodes / 32 GPUs
  • attention TP4 + SP + DP8MoE EP32
  • 部署 32 个冗余专家,每 GPU 原 8 个外再放 1 个;
  • decode 最小单元 40 nodes / 320 GPUs
  • attention TP4 + SP + DP80MoE EP320
  • decode 每 expert batch 通常不超过 256 tokens,作者称瓶颈是 memory access
  • 两个 micro-batches 交错 attention 与 dispatch/MoE/combine。

这些是 DeepSeek 的 H800 / IB 生产策略,不是“小团队部署建议”。报告自己把最小部署单元很大列为限制。

MTP 在 V3 的主要目的为训练,推理可丢弃;也可改作 speculative decoding。报告结尾的 1.8× decode speed 是预期/探索语境,不能写成已经完整公开的通用生产基准。

一手来源:DeepSeek-V3

15.3 DeepSeek-V3.2:稀疏索引与真实服务成本

DSA 主 attention 从 O(L²)O(Lk)lightning indexer 仍有 O(L²) 但更轻。 报告 Figure 3 给出基于 H800 实际服务 benchmark、按 $2/GPU-hour 估算的 token-position cost 云租价是作者设定,不是全球现价。

一手来源:DeepSeek-V3.2

15.4 DeepSeek-V4PagedAttention 的假设被混合 cache 打破

V4 同时有:

  • SWA 的固定窗口 state
  • CSA / HCA 的不同压缩比;
  • 未到压缩边界的 tail state
  • lightning indexer 自己的 KV
  • 不同 layer 的 block 数、hit / eviction policy。

因此报告设计:

  1. fixed-size state cache 管 SWA 与未压缩 tail
  2. classical KV cache 管 CSA/HCA 压缩条目;
  3. cache block 覆盖 lcm(m, m') 个原 token
  4. sparse kernel 与 layout 共设计;
  5. on-disk prefix cache 对 CSA/HCA 全存,对 SWA 提供 full / periodic checkpoint / zero-cache 三种权衡。

在 1M context 的作者估算中,V4-Pro 相对 V3.2 为 27% single-token equivalent FP8 FLOPs 与 10% KV cacheV4-Flash 为 10% FLOPs 与 7% KV。只可用于同报告的架构估算对照。

FP4 QAT 覆盖 MoE expert weights 与 CSA indexer QK path;报告的 selector 2×99.7% KV recall 是特定组件指标,不能写成整个模型 2×。

一手来源:DeepSeek-V4

15.5 DeepSeek 官方内核生态

仓库当前 benchmark 会随 commit、CUDA 和 GPU 变化;页面引用功能边界,不把 README 最新数字 倒灌为早期模型报告事实。


16. Kimi / Moonshot 推理服务谱系

MooncakeKV-centric PD disaggregation
    ↓
Kimi K2 / K2.5MLA + 大规模 MoE 的服务约束
    ↓
Kimi LinearKDA 固定 recurrent state
    ↓
Kimi K3KDA/MLA hybrid cache + replay decode + fleet policy

16.1 Mooncake:先把 KV 变成集群一等公民

Mooncake

  • 分离 prefill 与 decode clusters
  • 利用 GPU 集群中未充分使用的 CPU、DRAM、SSD;
  • 用 Transfer Engine 搬运 KV
  • 调度器同时优化 effective throughput 与 latency SLO
  • 过载时预测式 early rejection。

这条路线后来也服务 K3 的训练 activation remote offload,但训练复用不应覆盖本章的 serving 起点。

一手来源:

16.2 Kimi K2:服务约束反向影响架构搜索

K2 报告在架构对照中明确考虑 attention heads 与 active experts 的 inference overhead 其 serving 图来自性能模拟器与 effective-parameter construction,不是真实生产 A/B。

因此页面只用 K2 说明“架构搜索包含服务成本”,不把模拟值当线上吞吐。

一手来源:Kimi K2

16.3 K3:两种 cache 必须在同一边界恢复

每个 K3 block 为 3 KDA + 1 Gated MLA

  • MLA KV 随 token 增长并分页;
  • KDA 每层是固定大小 recurrent state
  • prefix hit 只有同时恢复二者才合法。

K3 §5.4.1 把两类 page 放进统一 byte-size block pool,共享 allocation、reference counting 与 eviction 但类型和生命周期仍不同,不能说“KDA state 就是 KV”。

16.4 物理块、hash 块和 checkpoint 解耦

若 KDA state 很大,只能稀疏存 checkpoint,物理块被迫达到 10246144 tokens;若 hash granularity 也跟物理块绑定,小请求几乎无法命中。

K3 的解法:

physical page:可很大,例如 6144 tokens
hash block:细粒度,例如 512 tokens
KDA checkpoint:只在部分 hash endpoints 持久化
hit boundaryMLA prefix 命中且所有 KDA groups 都有 checkpoint 的最长边界

报告 Figure 12 的教学案例:

6144-token physical page
12 × 512-token hash blocks
request 前 2800 token 相同
合法 hit boundary = 2560 = 5 × 512

这是报告示例,不代表所有生产配置固定使用 6144/512。

16.5 并发一致性

K3 报告明确处理:

  • 命中页在所有 cache groups 先 pin,再分配;
  • 当前 scheduling step 刚 copy / register 的 block 暂不允许匹配;
  • 任一 KDA group 驱逐 checkpoint,兄弟 checkpoint 原子失效;
  • hit state 只读,恢复到请求私有 running state,避免原地污染共享前缀。

这说明 prefix cache 的难点不只是 hash,而是“命中状态是否真的对应那个 token prefix”。

16.6 KDA speculative decode 不能直接回滚

KDA state 每步原地更新。若 draft 后半被拒绝,state 已越过最后 accepted token。 逐 draft position 保存完整 state 会让 state traffic 爆炸。

K3 §5.4.2

  • 只 cache 比 state 小得多的 projected inputs
  • verification 后在片上 replay accepted tokens
  • 写回 verified 与 bonus token state
  • convolution、normalization、gate、KDA recurrence 融进同一 loop。

这与 ReplaySSM concurrent work 独立提出的思路相呼应。

16.7 MTP → EAGLE-3 draft

K3

  • 预训练有一层 MTP
  • post-training 冻结 target,只微调 draft layer 与 feature-fusion projection
  • EAGLE-3 draft 融合第 1、4、最后 AttnRes block 的低/中/高层特征;
  • training-time draft unroll 7 steps
  • 直接最小化
L_LK = -log Σ_x min(p(x), q(x))

即 acceptance mass 的负对数,而非只用 KL surrogate。报告没有公开整套生产 speedup 常数, 页面不自行补数。

16.8 Deployment-aware post-training

K3 从 SFT 起对 MoE expert weights 做 MXFP4、expert input activations 做 MXFP8 QAT non-expert modules 保持更高精度。RL rollout 与 training 使用同一量化 scheme,目标是减少 traininference mismatch。

这不是“全模型 FP4”,也不是 weight-only PTQ。

16.9 Fleet 两条政策

  1. cache-aware affinity

    • 报告举例:典型 coding input 有 400K prefix,只增 4K prefill
    • primary cluster 保 cache
    • consistent hash 预分配 secondary,故障时 secondary 重做 prefill
    • secondary assignments 在 fleet 分散,避免一个故障把重算压到单点。
  2. budget-based admission

    • 短请求 <2K 与最长 1M 成本跨度约三阶;
    • 不再用“平均请求”规划;
    • 不同 request classes 独立 resource budget
    • long-context burst 只能消耗自己的份额。

一手来源:


17. 一条清晰的历史脉络

Wave A · 2019–2021:先理解生成式推理的内存墙

  • MQA 减少 KV heads
  • Clockwork 把可预测执行与 SLO 隔离带入模型 serving
  • 通用 TP/PP 与 inference engine 证明超大模型可以跨设备跑。

Wave B · 2022:服务粒度从“请求”降到“token iteration”

  • Orca iteration-level scheduling
  • FlashAttention 从 IO 重排 exact attention
  • LLM.int8 与 DeepSpeed-MoE 打开低精度 / 稀疏服务路线;
  • speculative decoding 证明可以保持 target distribution。

Wave C · 2023LLM 专用内存管理形成

  • FlexGen 用 GPU/CPU/disk offload 提高单 GPU throughput
  • vLLM / PagedAttention 把 KV 变成分页对象;
  • FastServe 做可抢占;
  • SpecInfer、GPTQ、AWQ
  • CacheGen 开始把 KV 当可压缩、可运输数据;
  • SGLang 把结构化程序和 radix cache 接起来。

Wave D · 2024:单机优化进入阶段分离和缓存网络

  • Splitwise / DistServe / Mooncake
  • Sarathi chunked prefill
  • Hydragen / ChunkAttention / CacheBlend
  • KVQuant / KIVI / QServe
  • Medusa / EAGLE / EAGLE-2
  • DeepSeek-V2 MLA、V3 公开部署拓扑。

Wave E · 2025kernel runtime 与 model draft 更深共设计

  • FlashInfer
  • EAGLE-3
  • FlashMLA / DeepGEMM / DeepEP
  • DeepSeek-V3.2 DSA
  • Kimi Linear 固定状态。

Wave F · 2026:混合状态、百万上下文与 fleet policy

  • DeepSeek-V4 heterogeneous cache + on-disk prefix + FP4
  • Kimi K3 KDA/MLA joint cache、state replay、cache affinity、budget admission。

18. 正式论文 / 系统链(62 个节点)

# 年份 节点 URL 本章角色
01 2019 Fast Transformer Decoding / MQA https://arxiv.org/abs/1911.02150 KV heads
02 2020 Clockwork https://www.usenix.org/conference/osdi20/presentation/gujarati SLO / predictability
03 2022 DeepSpeed-MoE https://arxiv.org/abs/2201.05596 MoE inference
04 2022 FlashAttention https://arxiv.org/abs/2205.14135 IO-aware exact attention
05 2022 ZeRO-Inference https://arxiv.org/abs/2207.00032 weight offload
06 2022 Orca https://www.usenix.org/conference/osdi22/presentation/yu iteration scheduling
07 2022 LLM.int8 https://arxiv.org/abs/2208.07339 outlier-aware INT8
08 2022 Petals https://arxiv.org/abs/2209.01188 distributed pipeline
09 2022 GPTQ https://arxiv.org/abs/2210.17323 weight-only PTQ
10 2022 SmoothQuant https://arxiv.org/abs/2211.10438 W8A8
11 2022 Speculative Decoding https://arxiv.org/abs/2211.17192 lossless draft / verify
12 2023 Speculative Sampling https://arxiv.org/abs/2302.01318 modified rejection
13 2023 AlpaServe https://arxiv.org/abs/2302.11665 model-parallel multiplexing
14 2023 FlexGen https://arxiv.org/abs/2303.06865 GPU/CPU/disk offload
15 2023 FastServe https://arxiv.org/abs/2305.05920 preemptive scheduling
16 2023 SpecInfer https://arxiv.org/abs/2305.09781 tree verification
17 2023 AWQ https://arxiv.org/abs/2306.00978 activation-aware W4
18 2023 H2O https://arxiv.org/abs/2306.14048 approximate KV eviction
19 2023 FlashAttention-2 https://arxiv.org/abs/2307.08691 work partition
20 2023 vLLM / PagedAttention https://arxiv.org/abs/2309.06180 paged KV
21 2023 StreamingLLM https://arxiv.org/abs/2309.17453 streaming KV policy
22 2023 CacheGen https://arxiv.org/abs/2310.07240 KV compression / streaming
23 2023 Prompt Cache https://arxiv.org/abs/2311.04934 modular reuse
24 2023 REST https://arxiv.org/abs/2311.08252 retrieval draft
25 2023 Splitwise https://arxiv.org/abs/2311.18677 phase splitting
26 2023 SGLang https://arxiv.org/abs/2312.07104 RadixAttention
27 2024 DistServe https://arxiv.org/abs/2401.09670 PD goodput
28 2024 Medusa https://arxiv.org/abs/2401.10774 multi-token heads
29 2024 EAGLE https://arxiv.org/abs/2401.15077 feature draft
30 2024 BurstGPT https://arxiv.org/abs/2401.17644 workload trace
31 2024 KVQuant https://arxiv.org/abs/2401.18079 low-bit KV
32 2024 KIVI https://arxiv.org/abs/2402.02750 asymmetric 2-bit KV
33 2024 Hydragen https://arxiv.org/abs/2402.05099 shared-prefix batch
34 2024 ChunkAttention https://arxiv.org/abs/2402.15220 prefix-aware attention
35 2024 Lookahead Decoding https://arxiv.org/abs/2402.02057 parallel n-gram verification
36 2024 Sarathi-Serve https://arxiv.org/abs/2403.02310 chunked prefill
37 2024 LayerSkip https://arxiv.org/abs/2404.16710 self-speculative exit
38 2024 SnapKV https://arxiv.org/abs/2404.14469 approximate KV compression
39 2024 DeepSeek-V2 https://arxiv.org/abs/2405.04434 MLA
40 2024 QServe https://arxiv.org/abs/2405.04532 W4A8KV4
41 2024 CacheBlend https://arxiv.org/abs/2405.16444 non-prefix reuse
42 2024 PyramidKV https://arxiv.org/abs/2406.02069 layerwise KV budget
43 2024 Llumnix https://arxiv.org/abs/2406.03243 live migration
44 2024 Quest https://arxiv.org/abs/2406.10774 query-aware KV sparsity
45 2024 EAGLE-2 https://arxiv.org/abs/2406.16858 dynamic draft tree
46 2024 MemServe https://arxiv.org/abs/2406.17565 elastic memory pool
47 2024 InfiniGen https://arxiv.org/abs/2406.19707 dynamic KV management
48 2024 Preble https://arxiv.org/abs/2407.00023 distributed prompt scheduling
49 2024 Mooncake https://arxiv.org/abs/2407.00079 KV-centric disaggregation
50 2024 FlashAttention-3 https://arxiv.org/abs/2407.08608 Hopper attention
51 2024 DeepSeek-V3 https://arxiv.org/abs/2412.19437 PD / redundant experts / MTP
52 2025 FlashInfer https://arxiv.org/abs/2501.01005 inference attention engine
53 2025 EAGLE-3 https://arxiv.org/abs/2503.01840 multi-layer draft
54 2025 DeepGEMM https://github.com/deepseek-ai/DeepGEMM low-precision kernels
55 2025 FlashMLA https://github.com/deepseek-ai/FlashMLA MLA kernels
56 2025 DeepEP https://github.com/deepseek-ai/DeepEP expert communication
57 2025 Kimi K2 https://arxiv.org/abs/2507.20534 architecture-cost co-design
58 2025 Kimi Linear https://arxiv.org/abs/2510.26692 fixed recurrent state
59 2025 DeepSeek-V3.2 https://arxiv.org/abs/2512.02556 DSA serving cost
60 2026 Kimi K2.5 https://arxiv.org/abs/2602.02276 multimodal / agent traffic
61 2026 DeepSeek-V4 https://arxiv.org/abs/2606.19348 heterogeneous cache / FP4
62 2026 Kimi K3 https://arxiv.org/abs/2607.24653 hybrid cache / fleet

19. 十五张原创视觉合同

  1. 四层服务栈:模型—引擎—内核—fleet
  2. 请求时钟queue → prefill → first token → streaming decode
  3. KV 公式拆箱图batch、length、layers、heads、head dim、bytes
  4. MHA/MQA/GQA/MLA/KDA 状态对照
  5. 连续预留 vs paged allocator
  6. prefill / decode roofline 直觉图
  7. request batching → iteration batching → chunked prefill
  8. common-prefix radix tree 与 copy-on-write
  9. PD 分离的计算流与 KV 运输流
  10. speculative draft / verify / accept / correction 状态机
  11. W/A/KV 量化对象分层图
  12. TP/PP/DP/EP 服务拓扑对照
  13. DeepSeek V2→V4 四层谱系
  14. Mooncake→K3 hybrid cache 谱系
  15. 缓存亲和与预算准入的 fleet 双目标图

图表规范:

  • 全部为原创 HTML/CSS/SVG 重绘;
  • 不复制论文原图;
  • 每张注明“结构示意 / 解析模型 / 依据报告机制重绘”;
  • 作者报告数字紧邻来源与设置;
  • 页面颜色:蓝=状态流,铜=资源选择,绿=SLO/验证,紫=集群状态。

20. 四联交互实验合同

Lab A · Memory & KV

输入:

  • model parameters、weight bits
  • layers、Q heads、KV heads、head dim
  • attention presetMHA / GQA / MLA teaching ratio / KDA hybrid
  • context length、concurrency、KV bits、block size
  • GPU HBM。

输出:

  • weight GiB
  • KV KiB/token/request
  • active KV GiB
  • paged internal waste
  • theoretical concurrency
  • 状态:FIT / KV-LIMITED / OOM。

边界:MLA ratio 与 KDA state size 为显式教学假设;不冒充具体 checkpoint 精确配置。

Lab B · Batch & Phase

输入:

  • short/long prompt mix
  • decode length
  • strategystatic / continuous / chunked / PD
  • batch token budget、chunk size
  • prefill/decode capacity
  • TTFT / TPOT SLO。

输出:

  • analytic TTFT / TPOT
  • head-of-line stall
  • request throughput
  • SLO goodput
  • bottleneck phase。

边界:离散事件教学模拟,不是 vLLM/Sarathi/DistServe 实测复现。

Lab C · Speculative

输入:

  • draft length k
  • acceptance a
  • draft cost / token
  • target step cost
  • parallel verification cost
  • modeindependent LM / Medusa / EAGLE-3 教学 preset。

输出:

  • E[tokens]
  • expected accepted draft
  • toy speedup
  • wasted draft
  • 最优 k 扫描;
  • NO GAIN 警告。

边界:独立 acceptance 是教学假设;不把 preset 当作者 benchmark。

Lab D · Cache & Fleet

输入:

  • prefix length / increment
  • hit rate
  • clusters
  • routinground-robin / cache-affinity
  • secondary failure
  • short / long budgets
  • long-request burst。

输出:

  • avoided prefill tokens
  • hot-cluster skew
  • failover recompute
  • short-request SLO
  • admitted / rejected
  • policy recommendation。

边界:K3 的 400K+4K 只作为报告案例 preset;模拟值不代表 Kimi 线上容量。


21. 二十个正文必须纠正的误解

  1. “显存放得下权重就能服务。” KV、workspace 和并发才刚开始。
  2. “峰值 FLOPs 能直接推 tokens/s。” decode 常受 HBM 和通信限制。
  3. “prefill 与 decode 只是同一 forward 的长短版。” shape、并行与指标不同。
  4. “batch 越大所有用户越快。” throughput 与 TTFT / TPOT 冲突。
  5. “continuous batching 是一个固定算法。” 准入、抢占和 token budget 都是策略。
  6. “PagedAttention 降低 attention FLOPs。” 它首先改内存分配。
  7. “PagedAttention 零碎片。” 最后 block 仍有内部碎片。
  8. “KV 只由 context length 决定。” batch、layers、KV heads、dim、precision 都参与。
  9. “GQA、MLA、KDA 是同一种 KV 压缩。” 它们保留的状态不同。
  10. “相同文本块就能复用 KV。” 前序上下文与位置改变状态。
  11. “prefix hit rate 是模型属性。” 它首先是产品流量属性。
  12. “PD 分离一定降本。” 网络、布局转换与队列可能反噬。
  13. “4-bit 一定比 8-bit 快。” 没有 kernel path 时可能更慢。
  14. “weight quantization 会压 KV。” 对象不同。
  15. “speculative decoding 固定加速 23×。” 接受率和 batch 决定净收益。
  16. “draft 越小越好。” 太弱会让 acceptance 崩溃。
  17. “MoE 只激活少量参数,所以天然便宜。” 权重带宽和 all-to-all 仍昂贵。
  18. “平均 latency 代表体验。” burst 和长请求首先出现在 P99。
  19. “tokens/s 就是 goodput。” 过 SLO 的 token 仍消耗 GPU。
  20. “技术报告数字可以横向排名。” 硬件、负载、SLO 和基线必须对齐。

22. 仍然开放的问题

  1. K3 KDA/MLA unified page pool 的真实 page bytes、不同模型配置与命中分布未公开;
  2. K3 projected-input replay 相对 state snapshots 的完整 latency / bandwidth 曲线未公开;
  3. K3 EAGLE-3 draft 的 production acceptance / throughput / tail latency 未公开;
  4. K3 budget classes、配额比例与真实 rejection traces 未公开;
  5. DeepSeek-V4 三种 SWA on-disk policy 的生产选择分布未公开;
  6. DeepSeek-V4 FP4 QAT 的端到端在线质量 / latency / power 消融仍有限;
  7. 多模态视觉 Token、tool pauses、Agent KV retention 对传统 serving traces 的影响仍需真实数据;
  8. 不同 runtime 对同一 checkpoint 的公平 benchmark 需要冻结 commit、CUDA、kernel 和 sampling
  9. 量化对 function calling、代码 diff、长 Agent 轨迹的细粒度回归证据不足;
  10. prefix cache 的隐私、跨租户 side channel 与删除语义需单独安全章节。

23. 本地核验清单

本轮完整下载并抽取 26 份新增论文 PDF/TXT:

2211.17192  speculative decoding
2302.01318  speculative sampling
2303.06865  FlexGen
2305.05920  FastServe
2305.09781  SpecInfer
2309.06180  vLLM / PagedAttention
2310.07240  CacheGen
2311.18677  Splitwise
2312.07104  SGLang
2401.09670  DistServe
2401.10774  Medusa
2401.15077  EAGLE
2401.18079  KVQuant
2402.02750  KIVI
2402.05099  Hydragen
2402.15220  ChunkAttention
2403.02310  Sarathi-Serve
2405.04532  QServe
2405.16444  CacheBlend
2406.03243  Llumnix
2406.16858  EAGLE-2
2406.17565  MemServe
2407.00023  Preble
2407.00079  Mooncake
2501.01005  FlashInfer
2503.01840  EAGLE-3

2302.11665 AlpaServe 本轮 PDF 下载不完整,正式节点只依据 canonical arXiv 页面定位, 不计入“本地完整 PDF”数字。

复用已有完整缓存:

  • FlashAttention / FlashAttention-2
  • LLM.int8 / GPTQ / SmoothQuant / AWQ
  • DeepSpeed-MoE / MegaBlocks / DeepEP
  • DeepSeek-V2 / V3 / V3.2 / V4
  • Kimi K2 / K2.5 / Kimi Linear / K3。

24. 章节发布闸门

  • 18 张账在页面首屏可见;
  • 62 个正式节点逐项链接;
  • TTFT / TPOT / throughput / goodput 首次出现即区分;
  • KV 公式可由交互实验复算;
  • PagedAttention 不写成 FLOPs 优化或零碎片;
  • prefill / decode 的“常见 regime”不写成不可变定律;
  • prefix / non-prefix reuse 分开;
  • PD 收益与 KV transfer cost 同图;
  • speculative exactness、接受率和 toy 假设明确;
  • W / A / KV 量化分开;
  • DeepSeek V2→V4 四层谱系独立高亮;
  • Mooncake→K3 hybrid cache 独立高亮;
  • 所有作者 speedup 带设置与“作者报告”标签;
  • 四个实验均支持键盘 tabs
  • 390px 无文档级横向溢出;
  • 全站链接、构建与既有专题回归通过。