ggaaooppeenngg

为什么计算机科学是无限的但生命是有限的

0. 出发点:固定大小的记忆

KDA(Kimi Delta Attention)是 Kimi K3 里负责长序列的那 69 层(总共 93 层)。它要解决的问题是把随序列线性膨胀的 KV cache 换成一个固定大小的状态矩阵O(nd)O(n \cdot d)O(d2)O(d^2),上下文翻倍时状态大小不变。

代价是这个 dk×dvd_k \times d_v 的矩阵要承载任意长度的序列,记忆必须可写、可改、可遗忘。演进路线就是一步步补齐这三件事:

  • 线性注意力St=St1+ϕ(kt)vtS_t = S_{t-1} + \phi(k_t)v_t^\top,只能累加(同一个 key 写两次读出的是叠加,即记忆碰撞);
  • Mamba-2:加标量衰减门 St=αtSt1+ktvtS_t = \alpha_t S_{t-1} + k_tv_t^\top,会遗忘但衰减全局统一;
  • DeltaNet:改为差值写入 St=(Iβtktkt)St1+βtktvtS_t = (I - \beta_tk_tk_t^\top)S_{t-1} + \beta_tk_tv_t^\top,支持定点改写;
  • GDN:两者结合 St=αt(Iβtktkt)St1+βtktvtS_t = \alpha_t(I - \beta_tk_tk_t^\top)S_{t-1} + \beta_tk_tv_t^\top
  • KDA:把标量门拆成逐通道门 Diag(αt)\operatorname{Diag}(\bm\alpha_t),各维度独立决定衰减速度,并加数值下界。

线性注意力与 SSM 两条路线的推导见前置篇《线性注意力与 SSM:两条技术路线的完整推导》,本文直接用其结论。

记号约定:两套写法互为转置

文献里状态矩阵有两种摆法,内容等价、互为转置,混用会让推导看起来「中途换了个式子」:

主约定(与 KDA 论文一致) 转置约定(chunkwise 推导常用)
状态形状 StRdk×dvS_t \in \mathbb{R}^{d_k \times d_v} S^tRdv×dk\hat S_t \in \mathbb{R}^{d_v \times d_k}
读出 ot=Stqto_t = S_t^\top q_t ot=S^tqto_t = \hat S_t q_t
写入项 ktvtk_t v_t^\top vtktv_t k_t^\top
擦除算子 左乘 (Iβtktkt)St1(I - \beta_t k_tk_t^\top)S_{t-1} 右乘 S^t1(Iβtktkt)\hat S_{t-1}(I - \beta_tk_tk_t^\top)

关系就是一次转置 S^t=St\hat S_t = S_t^\top。由于擦除算子 Ht=IβtktktH_t = I - \beta_tk_tk_t^\top 对称,转置可以直接穿过它。后文若看到 kvkv^\topvkvk^\top 互换、擦除算子从左跑到右,那是切换了约定,不是等式变了。

阅读全文 »

DSpark = DFlash 的并行 backbone forward(1 次)+ N 步轻量 Markov 序列修正,全部在 CUDA Graph 内。 本文结合 vLLM 源码分析 DSpark 的实现细节,并在 Qwen3-8B 上实测 deepseek-ai 官方 draft 和社区 Dogacel draft 的效果差异。

阅读全文 »

Speculative decoding 的 drafter 架构正在经历一次范式转移。DFlash 用 block diffusion 把 drafting 从串行变并行,实现了 6× 加速;DSpark 在此基础上补了两刀——半自回归解决并行生成的后缀衰减,置信度调度解决高并发下的验证浪费。本文围绕这两篇论文,结合源码逐行分析,澄清训练注意力结构中的常见困惑,并讨论其架构设计、核心 trade-off 和工程落地。

阅读全文 »