Administrator
Published on 2026-09-13 / 37 Visits
0
0

DeepSeek V4.1 的 SWA 有界重放:缓存命中时,KV 重建丢了什么

DeepSeek V4.1 的 SWA Bounded Replay 做了一笔很具体的交换:少存局部注意力状态,缓存缺失时只用 Prompt 最后 128 个 Token 重建一个近似状态。DeepSeek 公布的 global KV 是每 Token 890 字节,持久 KV 存储约为 V4-Flash 的八分之一。这些节省确实成立,近似二字决定它能否转化为生产收益。

阅读时间: 约 8 分钟 · 字数: 约 3900 字

TL;DR

  • 890 bytes/token 指始终驻留 HBM 的 global KV,短期 SWA KV 和长期 persistent cache 是另外两本账。
  • 精确重建需要沿多层滑动窗口依赖回放,有界重放只处理最近 128 个 Token。
  • 模型仍有覆盖长上下文的全局稀疏注意力。128 是局部重放窗口,不是模型只记得 128 个 Token。
  • 近似路径丢失的是重放边界以前经多层局部注意力传入当前窗口的部分状态贡献。DeepSeek 明确承认它与完整 prefill 不具有数学等价性。
  • SGLang 已报告特定配置的吞吐收益和一组 AIME 等分结果。公开证据仍较窄,上线前要专门测试 cache-hit 边界。

先把三本缓存账拆开

发布信息很容易被压缩成 V4.1 缓存只剩八分之一,但 DeepSeek 技术报告 实际讨论了三个不同约束。

状态 位置与生命周期 官方结果 主要机制
Global KV 推理时始终在 HBM 每 Token 890 字节,约为 V4-Flash 的四分之一 CSA2 跨层复用与 FP4 main KV
SWA KV 每层运行时局部状态,另有短期 host memory 复用池 从长期持久缓存移除 128 Token 窗口,host pool miss 时 bounded replay
Persistent KV SSD 或 host memory,用于前缀复用 约为 V4-Flash 的八分之一 Global KV 压缩,再叠加不长期保存 SWA KV

所以,八分之一不是新的 HBM 单 Token 数字。技术报告解释了两个乘法因素:保留下来的 global KV 已缩到约四分之一,同时不再把原本接近持久缓存一半容量的 SWA KV 长期写入 SSD。

V4 部署中,global KV 和 SWA KV 都按典型负载保留 72 小时以上。V4.1 继续保证 global KV 至少保存 72 小时;SWA KV 则进入一个占每台机器约 10% host DRAM 的分布式短期池,TTL 只有几分钟。短期池未命中时,编码器侧有界重放负责补状态。

用官方数字做一笔简单推导:一百万 Token 对应约 890 MB,也就是约 849 MiB 的 global KV;8 条这样的活跃上下文合计约 7.12 GB,尚未计入分配器开销和其他状态。每张卡实际承担多少还取决于并行、分片、batch 和推理引擎。这项计算只能确认量级,不能直接变成单卡部署承诺。

瓶颈已经发生迁移。HBM 和持久存储压力下降,重建计算、缓存调度和尾延迟随之变得更重要。

为什么精确重放会随层数扩大

DeepSeek V4.1-Flash 有 40 层 Transformer,分成 20 层 causal encoder 和 20 层 decoder。每层都有窗口为 128 的 SWA 分支,多数层还通过 CSA2 获得压缩后的全局注意力。

单层窗口只有 128,不代表多层以后仍只依赖 128 个 Token。一个 Token 可以先吸收更早邻居的信息,再在下一层把混合后的表示传给后面的 Token。局部依赖会沿层数累计。DeepSeek 给出的结论是,精确重建 L 层 SWA KV 需要回放约 L × n_win 个 Token。

Bounded Replay 把工作量封顶在 n_win,V4.1-Flash 中就是 128。如果回放从位置 s 开始,位置 i 的查询只访问 max(s, i-W+1) 到 i 之间的 SWA keys。对局部注意力路径来说,回放边界相当于一个人为设置的新起点。

这套机制用于两条路径。

编码器路径处理 global KV 命中、SWA KV 缺失

前缀缓存保留压缩 global KV 和 indexer keys。global KV 命中而短期 SWA KV 已过期时,引擎重放缓存前缀最后 128 个 Token,并与未缓存后缀一起处理。被重放的前缀只重建 SWA KV,已经缓存的 global KV 直接复用且不覆盖;后缀则同时生成 global 与局部状态。

这样一来,长期前缀缓存只依赖 global KV。代价是新后缀的状态会受到 cache-hit 位置影响。DeepSeek 明确写道,不同命中位置下生成的后缀 global KV 和 SWA KV 并不具有数学同一性。

解码器路径省掉上半栈的完整 prefill

在 Causal Encoder-Decoder 架构中,decoder global KV 由 encoder 最终 hidden states 投影得到。但最开始的 decode steps 仍需要各 decoder layer 自己的局部 SWA 状态。

Bounded Replay 不让完整 Prompt 通过所有 decoder layers,只把 Prompt 最后 128 个 Token 的 encoder outputs 送入 decoder stack,并沿相同截断窗口生成 decoder SWA KV。这份状态只用于后续 decode,不写回 prefix cache。DeepSeek 还在 post-training 中模拟相同 replay,让模型对这种近似路径进行适配。

重建到底丢了什么

128 Token 的回放边界不会抹掉此前全部 Prompt。CSA2 仍提供压缩的全局注意力,每个查询最多选择 512 个远端条目,模型仍支持最长一百万 Token 的上下文。

缺失的是更具体的一层信息:边界以前的 Token 原本可以通过逐层 SWA 传播,把细粒度局部贡献带入当前窗口;截断重放无法完整恢复这条传递链。

看回放段的第一个 Token 就很直观。完整 prefill 时,它可以注意到段外的局部前驱,而这些前驱本身已经在更早层混合了各自邻域的信息。有界重放时,第一个 Token 看不到 s 以前的局部 keys。这一差异又会影响回放段后面的 Token。全局稀疏注意力可以通过另一条路径找回相关远端内容,但无法让局部状态在数学上重新变得相同。

风险因此分成三类:

  1. 边界敏感性: 同一个后缀在 cache-hit 位置变化后,可能得到不同的近似状态。
  2. 局部链任务: 依赖细粒度变换跨边界逐步传播的任务,可能比主要依靠全局检索的任务更敏感。
  3. 误差累积: 首次回答看起来正常时,小的表示差异仍可能在长输出、多轮工具调用或后续缓存状态中继续传播。

DeepSeek 引用的 PowerAttention 论文 认为,实际有效感受野可能小于逐层 SWA 的理论范围。这为有界重放提供了设计依据,但没有证明 V4.1 的所有工作负载都与完整 prefill 等价。

公开证据已经证明了什么

DeepSeek 表示内部实验中 response quality 影响很小。技术报告没有公布 bounded replay 专项消融表,也没有披露任务分布、cache-hit 位置、方差和置信区间。好在限制章节说得很直接:CSA2 选择错误与 SWA 近似状态重建仍可能在未测试边界造成能力下降,后续压力测试会重点覆盖长上下文稀疏检索和缓存恢复边界。

SGLang 与 Miles 的官方集成报告 提供了更具体的一组实现数据。在 batch 8、8K Token Prompt 的配对测试中,解码器 replay 把 prefill throughput 在 8×H200 上提高到 1.56 倍,在 4×GB300 上提高到 1.37 倍。4×GB300 的 AIME 2026 测试中,replay 关闭与开启都答对 453/480。

这组结果确实验证了一个配置下的机制:prefill 吞吐提高,AIME 聚合 pass@1 未变。它没有证明逐 Token logits 相同,也没有覆盖长上下文检索、Agent 工具行为和 p99 延迟。

实现边界同样需要进入部署决策。SGLang 把 encoder 与 decoder replay 都设计成显式开关;encoder replay 与 speculative decoding 不兼容,decoder tail-only computation 不支持 input logprobs 或完整 Prompt hidden-state capture。只要业务依赖其中任何一项,兼容性门槛已经触发。

发布成熟度也是一道门槛。截至 2026 年 9 月 13 日,SGLang 的 DeepSeek V4.1 支持 PR 相对 main 仍处于开放状态,replay 修复进入的是 dsv4.1 集成分支。该分支的 encoder replay helper 只处理普通、非 speculative 的 extend,要求缓存前缀边界为偶数,并在 replay 中显式清空多模态输入。模型卡提供的通用安装命令无法证明某个正式版推理引擎已经复现 DeepSeek 的生产缓存策略。部署测试应固定 branch 或 commit,并把版本写入结果记录。

一份可执行的上线验收矩阵

对照实验应冻结模型、推理引擎版本、Prompt 语料、采样参数和硬件,只改变 bounded replay 开关。测试集按真实业务形状构造,平均值无法代替边界样本。引擎能力允许时,每条 Prompt 至少走四种状态:冷启动完整 prefill、global 与 local 双命中、global 命中但 local miss、同一 global hit 改变 prefix cut point。

维度 最小变体 目的
Cache-hit 位置 起点、128 边界前后、长前缀末端 暴露位置依赖的重建差异
上下文长度 8K、128K、512K、目标上限 把公开 8K 证据与长上下文行为分开
未缓存后缀 空、短对话、长工具返回、图文混合 改变新状态对重建路径的依赖程度
任务 边界 passkey、多跳检索、代码修改、结构化提取、工具循环 同时覆盖局部传播和全局检索
并发 1、常态负载、饱和负载 暴露 replay 调度与带宽竞争
输出长度 短答、长生成、多轮续写 检查下游误差是否累计

资源与结果指标要一起看:global 与 SWA KV 字节数、短期池 miss rate、replayed tokens、prefill throughput、TTFT、端到端 p50/p95/p99 延迟、decode tokens/s、任务成功率、结构化输出有效率、工具调用正确率和安全失败。

Cache 边界应主动左右平移,形成成对 Prompt。稳定的整体平均值可能掩盖窄小但稳定的边界退化。采样具有随机性时,需要重复运行并比较任务层差异。最终动作依据应是成功完成一次真实任务的成本,这与按任务形状做模型路由的判断方式一致。

通过标准要在跑测试以前冻结。一份可执行的发布合同可以要求:关键工具调用和安全场景零新增失败;任务成功率下降不得超过预先设定的误差预算,并报告置信区间;p99 延迟仍处于既有 SLO;代表性负载下吞吐或容量收益为正。误差预算由业务风险决定。提前写死门槛,可以避免看见漂亮的显存图以后再放宽质量标准。

部署顺序可以更保守一些:先以 replay 关闭作为基线;再开启已有公开吞吐与质量数据的 decoder replay;测清短期 SWA 命中率,并确认业务不依赖 speculative decoding 后,再评估 encoder replay。边界任务正确率、工具行为或尾延迟超过预设阈值时直接回滚。

常见问题

DeepSeek V4.1 的 SWA Bounded Replay 是什么?

它是一项部署优化。SWA KV 缺失时只重放 Prompt 最后 128 个 Token,以有界计算重建近似的局部注意力状态。精确路径需要沿多层依赖处理更长序列。

模型会忘掉 128 个 Token 以前的所有内容吗?

不会。模型仍有覆盖长上下文的压缩全局注意力。近似发生在局部 SWA 状态的重建路径,而不是把整个上下文窗口截成 128 个 Token。

有界重放和完整 prefill 等价吗?

两者不等价。DeepSeek 明确说明,编码器后缀状态会依赖 cache-hit 位置,解码器重建的 SWA KV 也不等同于完整 decoder forward pass。

890 bytes/token 代表多少显存?

它是 HBM 中 global KV 的单 Token 聚合足迹,约为 V4-Flash 的四分之一。持久 KV 约八分之一是另一个指标,来自 global KV 压缩与不长期保存 SWA KV的叠加。

哪些情况适合先关闭 replay?

业务需要不兼容功能,或者成对测试发现边界任务、工具行为、安全或尾延迟明显退化时,应继续使用基线路径。SGLang 已列出 speculative decoding 和可观测性相关的具体限制。

上线前怎样测试 bounded replay?

冻结输入和环境,对比开关两组结果,同时变化命中位置、上下文长度、后缀类型、并发和输出长度。显存与吞吐只是半张成绩单,任务正确性和尾延迟必须一起验收。

结论:这是一场瓶颈迁移

DeepSeek V4.1 证明了长上下文推理可以少保留很多 KV 状态。架构说明与 SGLang 初步结果让内存和 prefill 收益具有可信度。有界重放则通过接受近似局部状态,换来了其中一部分收益。

真正的部署结论需要在系统层完成。受持久缓存容量限制的服务可能获得显著收益;以冷前缀、不兼容功能、边界敏感任务或严格尾延迟为主的负载,可能马上遇到下一个约束。890 字节和八分之一适合作为测量计划的起点。完成真实负载对照后,才能知道瓶颈移动到了哪里。

参考资料


Comment