内容提要
本文介绍DeepSeek-V4模型中的压缩稀疏注意力(CSA)机制。KV缓存每4个token压缩为一条,1M上下文仍有26万条目,故用lightning indexer打分选择top-1024块。Indexer源自V3.2的DSA,采用64头128维、ReLU加权和FP4量化,通过KL散度模仿主注意力分布训练。V4将索引对象从token改为压缩块,query共享低秩latent。文章详述了indexer实现细节、一层CSA的完整维度流程及参数统计。
延伸解读
为什么压缩后还要稀疏选择
即使每4个token压缩成一条KV,1M上下文仍有约26万条。若每个query对所有条目做注意力,计算量巨大。因此CSA采用lightning indexer先筛选出top-1024个块,再对选中的块执行注意力,将核心注意力计算量降至与上下文长度无关,而indexer本身计算量虽随序列增长,但常数小且可用低精度加速。
indexer的设计权衡
indexer采用64头128维,仅为128头512维主注意力的1/8计算量。使用ReLU而非softmax,避免跨条目归一化,便于独立计算和top-k选择。权重由query动态生成,可决定各头的贡献。FP4量化进一步降低开销,配合Hadamard旋转减少量化误差。这些设计使indexer在保持足够选择质量的同时,开销远低于主注意力。
V4与V3.2的差异
V4将索引对象从token改为压缩块,每个块含4个token,top-1024块覆盖4096个原始token,而V3.2选择2048个token。V4的indexer query共享主注意力的低秩latent,且拥有独立的压缩键(128维)。论文指出减小top-k是有意为之,以提升短文本和中等长度序列的速度。
训练与推理细节
indexer通过KL散度模仿主注意力分布训练,分稠密热身和稀疏训练两阶段。V4沿用此框架,先用稠密注意力训练1T token,再在64K序列长度引入稀疏。推理时FP4量化是模拟的,实际部署使用FP4内核。indexer的梯度不进入主模型,输入被detach,确保两者互不干扰。
Q&A
DeepSeek-V4 中 Lightning Indexer 的作用是什么?
Lightning Indexer 用于在压缩稀疏注意力(CSA)中为每个 query 选择 top-1024 个压缩块,从而避免对所有压缩条目进行注意力计算,降低计算复杂度。
DeepSeek-V4 的 Lightning Indexer 与 V3.2 的 DSA 有何不同?
主要区别在于索引对象:V3.2 索引 token,V4 索引压缩块(每块 4 个 token)。此外,V4 的 query 从共享的低秩 latent 生成,且 top-k 从 2048 个 token 变为 1024 个块。
Lightning Indexer 的打分公式是什么?为什么使用 ReLU 而不是 softmax?
打分公式为:I_{t,s} = Σ_{j=1}^{H^I} w^I_{t,j} · ReLU(q^I_{t,j} · k^I_s)。使用 ReLU 是为了提高吞吐:负内积直接归零,无需跨条目归一化,每个分数可独立计算,也无需维护 max 和 sum。
Lightning Indexer 是如何训练的?
训练分两阶段:1) 稠密热身:冻结主模型,保持稠密注意力,仅训练 indexer,通过最小化 KL 散度模仿主注意力分布;2) 稀疏训练:打开 top-k 选择,全部参数一起训练,indexer 的 KL 目标只在选中的集合上计算,且其输入从计算图中 detach。
DeepSeek-V4 中 CSA 的核心注意力计算量是多少?为什么与上下文长度无关?
每 token 每层 CSA 的核心注意力计算量约为 151 MFLOP,与上下文长度无关。因为每个 query 只对固定的 1152 条(128 条滑窗 + 1024 条被选中的压缩块)进行注意力计算,不随序列长度变化。
DeepSeek-V4 中 Lightning Indexer 的 key 和 query 分别来自哪里?
key 来自独立的压缩算子,为每个压缩块生成 128 维的索引键;query 从主注意力的低秩 latent(c^Q,1536 维)通过矩阵 W^{IUQ} 展开得到 64 头 × 128 维。
DeepSeek-V4 中 Lightning Indexer 使用了哪些量化技术?
Indexer 的 query 和 key 在打分前会进行 FP4 量化,并采用随机 Hadamard 旋转来减少量化误差。
DeepSeek-V4 中一层 CSA 的完整维度流程是怎样的?
流程包括:query 生成(7168→1536→128×512)、单条 KV 生成(7168→512)、压缩(每 4 token 一条 512 维)、索引(Indexer 选 top-1024 块)、核心注意力(对 1152 条做 MQA)、输出投影(16384→7168)。