Study MLA Indexer

定位

Indexer 是 DeepSeek 为 MLA 配套设计的预选器,完整组合叫 DSA(DeepSeek Sparse Attention)

数学流

按数据流顺序:

hidden_states X ∈ ℝ^(L×d)
    │
    ├─ K compressor:  k_repr_t = RoPE(x_t · W_kr)  → quant(FP8)   d → d_idx
    ├─ 写 Indexer K cache
    ├─ Q proj:        q_t = RoPE(x_t · W_q)                        d → d_idx
    ├─ Logits:        logits[i,j] = q_i · k_repr_j / √d_idx        [L, L]
    └─ Top-k:         topk_indices[i] = arg top-k_j logits[i,j]    [L, k]
                              ↓
              MLA sparse MQA 在 topk 处 gather latent c^KV

关键参数(DSv3.2):$d=7168$、$d_{idx}=128$、$d_c=512$、$k=2048$、$L$ 可达 100K+。

成本比:$d / d_{idx} ≈ 56×$(indexer 计算量是 MLA 主注意力的 1/56)。

三个 why

问题 答案
为什么 decode 必须 sparse? 单 query 对 L 个 KV:dense 是 $O(L \cdot d)$,memory-bound(读 KV 1.4GB/step)。sparse gather 仅 $k \cdot d_c = 1\text{MB}$,省 1000× 带宽。
为什么 prefill 短可以 dense? 当 query 侧 $\leq k$ 时 dense MHA 总开销 $O(L_q \cdot L \cdot d)$ 可控($L_q$ 小),indexer 反而是浪费。所有 prefill seq_len ≤ k 时直接走 dense MHA,indexer 算了也没人用。
为什么 indexer 要 cache? 不 cache 时每步重算历史 $k_repr$:总成本 $O(L^2 \cdot d \cdot d_{idx})$。cache 后 $O(L \cdot d \cdot d_{idx})$。L=100K 时差 10 万倍

两条 cache 区分

Cache 存什么 维度 谁写 谁读
MLA KV cache $c^{KV}$(latent 压缩) $d_c=512$ MLA 主路径 MLA 主路径
Indexer K cache $k_repr$(RoPE + quant) $d_{idx}=128$ indexer step 1 indexer step 4(logits)

完全独立的两条 cache。Indexer 的 K cache 是 indexer 自己的持久状态——即使下游决定不读 topk,K cache 也必须先于 scoring 决策更新(下游 step 仍可能消费历史 $k_repr$)。

性能账

代入 $L=10^5, k=2048, d=7168, d_c=512, d_{idx}=128$:

路径 单次计算 累计 L 个 query
Dense MHA $O(L \cdot d)$ $7.2 \times 10^{13}$ ops
Sparse MQA + indexer $O(k \cdot d_c + L \cdot d_{idx})$ $1.4 \times 10^{12}$ ops
加速比   ≈ 50×

e2e 实测(DSv3.2, GLM-5.2):短 prefill 场景 +2.54% req/s,TPOT decode 零回归,gsm8k 准确率 0.9424 不变。

与其他 sparse attention 的关系

方案 提出者 选择机制 可学习 与 MLA 配合
DSA indexer DeepSeek-V3.2 小 attention 网络 → top-k 专为 latent 设计
NSA DeepSeek 早期 三分支(压缩+选择+滑动窗) 独立
Sliding Window Mistral / Longformer 固定窗口 通用
BigBird Google 随机+窗口+全局 通用
Routing Transformer Roy et al. k-means 聚类 部分 通用
MInference Microsoft 动态 pattern 预测 通用

DSA 独特之处:indexer 选出的 top-k 在 MLA 的 latent $c^{KV}$ 上 gather,gather 数据量 $k \cdot d_c$ 比 GQA 上的 $k \cdot d$ 小 14×。没有 MLA 的 latent compression,indexer 的内存优势不显著

vLLM 现状

用 indexer 的模型:DeepSeek-V3.1 / V3.2 / R1、GLM-5.x、Kimi K2 Thinking 不用:Qwen-3(dense MLA)、Llama / Mistral(GQA)、GPT-OSS

核心文件:vllm/model_executor/layers/sparse_attn_indexer.py

Open questions