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

.jpg)
这次新模型发布,可以看出,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:
m 个 token 压成 1 个 compressed KV entry,然后再通过 indexer 选 top-k 个 compressed entry 做 attention。m' 个 token 压成 1 个 compressed KV entry,m' >> m,但压缩后不做 sparse top-k,而是 dense attention over compressed KV。这比单纯的 sparse attention 更复杂,也比单纯的 KV compression 更激进。它是 compression、sparse selection、sliding window、MQA 和低精度 indexer 的组合拳。
普通 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 的表示方式。
CSA 的核心路径是:
Token-level KV
-> 每 m 个 token 压成 1 个 compressed KV
-> Lightning Indexer 给 compressed KV 打分
-> 选 top-k
-> query 只 attend 到这 k 个 compressed KV + sliding window KV