【轻量化复刻大模型 / KIMI K3】KDA Serving 基础设施 — 设计 / 实现

罗西的思考 · 软件开发

罗西的思考 2026-11-06 15:27 北京 【轻量化复刻大模型 / KIMI K3】KDA Serving 基础设施 — 设计 / 实现 0x00 概要 0.1 主要内容 0.2 注意说明 0x01 先懂 KDA:为什么它会颠覆 serving 1.1 从最朴素的「KV 缓存」说起 1.2 KDA 把这张清单换成了一个「状态矩阵」 1.3 关键:`M` 是「逐 token 相关」的矩阵 1.4 释疑 0x02 总纲:三个天然属性如何变成三层 Infra 2.1 为什么要做这一套 2.2 范围与边界(本项目做了什么 / 刻意没做什么) 2.3 术语 0x03 实现全貌 3.1 总览图 3.2 组件数据流 3.3 组件快速浏览 0x04 组件一:统一页池 4.1 它要解决什么问题 4.2 难在哪 4.3 总体思路 4.4 落地架构(类 / 函数 / 数据结构) 4.5 数据流 / 执行流 4.6 反方辩手(自我质疑) 4.7 何时用 / 何时不用 4.8 可视化: 0x05 组件二:双粒度前缀缓存 5.1 它要解决什么问题 5.2 难在哪 5.3 总体思路 5.4 背后的原理 5.5 关键:group 到底是用来做啥的? 5.6 checkpoint 的原子性与「all()」的含义 5.7 落地架构与数据结构 5.8 数据流 / 执行流(lookup 的两段式) 5.9 反方辩手 5.10 何时用 / 何时不用 5.11 对比:SGLang 是如何处理 KDA prefix cache 的? 5.12 可视化 0x06 组件三:投机解码 · 投影重放(decode.py) 6.1 要解决什么问题 6.2 难在哪 6.3 一个推测解码例子 6.4 总体思路 6.5 背后的原理 6.6 落地架构与数据结构 6.6 数据流 / 执行流 6.7 反方辩手 6.8 何时用 / 何时不用 6.9 可视化 0x07 组件四:投机解码 · RawInputRing 环形缓冲(replayssm.py) 7.1 问题所在 7.2 SGLang ReplaySSM 7.3 总体思路 7.4 背后的原理 7.5 落地架构与数据结构 7.6 何时调用 7.7 关键对比:投影重放 vs RawInputRing —— 两条路线各在何时适用 7.8 示例 7.9 可视化 0x08 组件五:KDA 上下文并行(KCP) 8.1 它要解决什么问题 8.2 难在哪 8.3 总体思路 8.4 背后的原理 8.5 落地架构与数据结构(parallel/kcp.py) 8.6 数据流 / 执行流 8.7 反方辩手 8.8 何时用 / 何时不用 8.9 实测数值(CPU 可复现) 8.10 验证 0x09 组件六:Fleet 层调度(serve/fleet.py) 9.1 它要解决什么问题 9.2 难在哪 9.3 总体思路(两个策略) 9.4 背后的原理 9.5 落地架构与数据结构 9.6 数据流 / 执行流 9.7 反方辩手 9.8 何时用 / 何时不用 9.10 可视化 0x10 收官引擎:把它们咬合成一个「第二个请求到底省了什么」 10.1 它要解决什么问题 10.2 总体思路与原理 10.3 落地与实测 附录 A:跨仓库核对 — group 语义与每层状态的归属 A.1 kimi3-master(本项目镜像的来源) A.2 kimi-k3-pytorch-main(模块化参考) A.3 SGLang K3 分支(生产实现)—— 前缀复用的事实真相 A.4 合成的结论 附录B: 与 vLLM KV Cache Group 的对比 B.1. 项目中的 `group` 是什么 B.2. vLLM 中的 `KVCache Group` 是什么 B.3. 逐项对比 B.4. 两者为什么容易被认为相同 B.5. 最接近的对应关系 B.6. 关键差异:checkpoint 原子性 vs. 物理 cache 管理 B.7. 最终判断 0xFF 参考 0x00 概要 0.1 主要内容 这份文档写给谁 :给想理解「Kimi Delta Attention(KDA)这种新注意力,到底把整个 serving(推理服务)体系颠覆成了什么样」的人。假定你知道一些 Transformer,但 完全不懂 KDA 的服务端细节——我们从最朴素的问题出发,一路讲到每一层基础设施为什么要那么设计。 serving 相关的主要组件如下: 页池把「两类异构缓存」归一成同一种「页 + kind 标签」; 前缀缓存只信「hash 块的整数边界 + 每个 group 都有 checkpoint」(组 = "必须一起存在"的抽象分区,默认整模型 1 组); 投机不是「删 KV」而是「不存状态存投影、失败时

查看原文