DeepSeek V4 结构速览

本文最后更新于 2026年8月16日

本文是对 DeepSeek V4 结构的粗略笔记。

要解决的问题

长上下文推理有两个主要瓶颈:

  • KV cache 显存随长度线性增长。MLA 虽然比 MHA/MQA 省得多,但到 1M 长度依然扛不住。
  • attention 计算量。即使有 DSA(DeepSeek Sparse Attention,V3.2 引入),长上下文下的计算仍然是大头。

核心设计

V4 的 attention 由3个组件组合而成:

  1. 跨 token 压缩 KV cache(省 4x ~ 128x):
    • c4a:约 4 倍压缩。一个压缩 token 是 8 个原始 token 的加权和,步长 4(相邻压缩 token 之间有重叠)。
    • c128a:约 128 倍压缩。一个压缩 token 是 128 个原始 token 的加权和,步长 128(不重叠)。
  2. DSA 稀疏注意力(把计算量卡住):c4a 压缩后 1M 上下文仍有 250k 条压缩 token,所以用 lightning indexer 选出 top-k(k=512,Pro 为 1024)条来算注意力。c128a 压缩后 1M 上下文最多只有 8192 条,直接对全部条目做 full attention 即可(等价于 top-k=8192)。
  3. 128 的短滑窗(保住局部性):作用在未压缩的 token 上。特别是 c128a 下,query 在压缩边界之前可能一条压缩 token 都看不了(causality),滑窗保证它至少能看到本地信息。

CSA(c4a 路线)

CSA 层的完整算子图如下。输入 hidden 为 ,query 先下投影到 1024 维潜向量 (RMSNorm 后按位置加 RoPE),再上投影出 64 个头、head dim 512 的 q;KV 侧共享一份 512 维的 latent(K=V),一路进 128 大小的滑窗 cache(未压缩),另一路经 compressor 4 合 1 压缩后进压缩 KV cache。indexer 用 FP4 打分选出 top-512 条压缩条目,与滑窗条目拼接后做注意力,输出后 64 维做 Inverse RoPE。

CSA 算子图

C4A Compressor

compressor 的结构:当前块和上一块各自做投影(,各 512 维),然后把两块的权重拼起来加偏置,得到每个压缩位置 8 个权重,在 512 个通道上各自做逐通道 softmax 归一;内容同样拼接后按权重加和,得到一个压缩条目,最后过 RMSNorm + RoPE(RoPE 的锚点位置是 )。第 0 块时上一块内容补零、权重置 ;decode 时”上一块”是最近的完整块,“当前块”是滚动缓冲。

C4A Compressor 内部结构

Lightning Indexer

沿用 V3.2 DSA 的 lightning indexer,QK 通路全程 FP4:query 侧从 投影出 64 个头、128 维的索引 query,另有 产生逐头权重;key 侧用与主路同款的 compressor(4 合 1)生成 128 维的索引键并以 FP4 缓存。打分是 FP4 GEMM 后接 ReLU(负分直接置零),再按头加权求和(分数存 BF16),最后在满足因果性的范围()内取 top-512。

Lightning Indexer 内部结构

HCA(c128a 路线)

HCA 层没有 indexer:压缩比 128 使得 1M 上下文也只有至多 8192 条压缩条目,直接对”滑窗 128 条 + 全部压缩条目”做稠密注意力(MQA 形式,K=V,含 attention sink)。其余结构(潜向量维度、64 头、逐头 RMSNorm、Inverse RoPE)与 CSA 一致,RoPE 锚点位置为

HCA 算子图

KV cache 账

  • DeepSeek V3.2 风格的 KV cache:每层每 token 存 MLA latent B + indexer B = 1408 B,61 层共约 83.9 GiB / 序列
  • DeepSeek V4-Pro:每层 CSA 存压缩 KV 条 + indexer 条 = 320 MiB,每层 HCA 只存 条 = 8 MiB,共约 9.62 GiB / 序列省了约 8.7x

主要参考 vLLM 的博客 DeepSeek V4 in vLLM: Efficient Long-context AttentionDeepSeek V4 技术报告和https://zhuanlan.zhihu.com/p/2036707452293535593