互动演示:容量、盈亏、命中折叠与超时
这一页把最常被追问的几个“算账”和“判断”做成可以拖动、点击的小工具。改一个参数,马上看到结果怎么变,比读一段公式更快建立直觉。
使用前提:所有结果都是按公式推导的教学估算,不是实测;默认参数是资料里一直使用的示例模型(32 层、8 个 KV head、head dim 128、BF16)。真实系统还有协议开销、排队、分配器浪费和硬件差异。
1. KV 容量计算器:一个请求到底占多少
公式:每 token KV = 2(K 和 V)× 层数 × KV head 数 × head dim × 每个元素字节数。它只适用于普通 MHA/GQA。选择 MLA 时改为:层数 × (latent + RoPE 维度) × 字节数,没有单独的 V,且每个 TP rank 各存一份。滑窗和混合状态模型见复杂模型与 KV 存储。
动手试:把 KV head 从 8 改成 32(相当于不用 GQA),看容量放大几倍;把 TP 改成 16,留意“KV head 少于 TP”时的提示;再选 MLA、层数 61、维度 576,得到 DeepSeek-V3 量级的每 token 约 68.6 KiB。
2. 加载还是重算:远端命中一定划算吗
把“从远端搬回来”的关键路径和“重新算一遍 Prefill”的时间放在一起比。串行模式把网络和 H2D 相加;理想流水取两者较大值,是乐观下界。
预设里的 H2D 取锁页内存的常见实测量级(Gen4 约 24 GiB/s,Gen5 约 48 GiB/s),来源与说明见公开参考数据。
动手试:把命中 token 降到 256,看固定开销怎样吃掉收益;把重算吞吐调到 80000(GPU 很强、模型很小),看远端缓存何时不再值得。
3. 前缀命中折叠:查到很多,能用多少
每一行是一个 TP rank 的对象,每一列是一个 chunk。点击格子切换“有 / 缺”。普通 full attention 下,只有所有 rank 都完整的最长连续前缀可以跳过计算。
动手试:只把 rank 2 的 chunk 1 设为缺失,对比“对象命中率”和“实际可跳过的 token”。这正是面试里“命中 90% 却没变快”的常见原因之一。
4. 超时与租约:这次读到的数据能不能用
对应设计图 D10。时间都从“拿到读租约”开始算。拖动滑块,看一次远端加载会走到哪条路径。
动手试:把排队拉到 6000 ms、超时调到 10000 ms,数据虽然搬完了,却必须拒绝——因为租约已经过期,空间可能已被回收。
5. 共享 KV 池容量规划:要多少机器
对应设计图 D12。先算 payload,再看去掉一个故障域后是否仍然够用。
动手试:把机器数从 128 调到 160、再到 180,看“正常够用”和“故障域退出后仍够用”分别在什么时候成立。
怎样维护这一页
工具逻辑全部在 assets/interactive.js,不依赖网络和第三方库。要新增一个演示:在本页加一个带 id 的 .lab 区块,再在脚本里写对应的计算函数。公式改动要同步检查存储详解中的算例。