0. 摘要

首先给出一图流进行学习,重点都突出在下面了

image.png

deepseek_v4_architecture (1).jpg

1. 理论重点:Attention 的变化

这次新模型发布,可以看出,DS 为了应对 1M 超长上下文不爆显存,下了很大的功夫。借鉴了类似《MSA: Memory Sparse Attention for Efficient End-to-End Memory Model Scaling to 100M Tokens》 这篇恒大团队的思想:很多时候,超长上下文下,某几个 token 的重要程度较低,既然如此,将这么 M 个 token 聚合起来,视作一个 token,不就得了?(ps,CNN 时代的古法炼丹思想还在追我)。

但是,不同于之前这篇论文,它没有把长上下文问题完全改造成一个外部 memory / document routing 系统,而是直接在 Transformer block 内部重构了 Attention、KV Cache 和推理时的数据布局。换句话说,DeepSeek-V4 仍然长得像一个 Transformer,但它内部已经不是传统的 token-level dense attention 了。

DeepSeek-V4 的 Attention 不再让每个 query token 直接 attend 到所有历史 token,而是先把历史 token 压缩成更少的 KV entry,再根据层类型选择“稀疏看一部分”或者“密集看压缩后的全部”。论文里把这个叫做 Hybrid Attention with CSA and HCA

这比单纯的 sparse attention 更复杂,也比单纯的 KV compression 更激进。它是 compression、sparse selection、sliding window、MQA 和低精度 indexer 的组合拳。

1.1 普通 Attention 的瓶颈

普通 self-attention 大概是这样:

# x: [seq_len, hidden]
q = x @ Wq
k = x @ Wk
v = x @ Wv

score = q @ k.T / math.sqrt(head_dim)      # [seq_len, seq_len]
prob = torch.softmax(score, dim=-1)
out = prob @ v

在 decode 阶段,虽然每次只生成一个 token,但这个 token 仍然要和所有历史 KV 做 dot product:

# decode one token
q_t = h_t @ Wq                  # [head_dim]
score_t = q_t @ K_cache.T       # [past_len]
out_t = torch.softmax(score_t, dim=-1) @ V_cache

past_len = 1M 时,这个操作就非常恐怖了。注意,这里不只是算力问题,还有显存问题:每个历史 token 都要存 K/V。

MSA 这类工作也是在解决类似问题。它的思路更像是把长上下文组织成可检索的 memory/document 结构,通过 memory sparse attention、document-wise RoPE、KV cache compression 和 memory parallel 去支撑更长上下文。DeepSeek-V4 的路线更贴近标准 Transformer:它没有把模型外部化成一个 memory system,而是在 Attention 层内部直接改变 KV 的表示方式。

1.2 CSA:先压缩,再稀疏选择

CSA 的核心路径是:

Token-level KV
  -> 每 m 个 token 压成 1 个 compressed KV
  -> Lightning Indexer 给 compressed KV 打分
  -> 选 top-k
  -> query 只 attend 到这 k 个 compressed KV + sliding window KV