DeepSeek V4.1 Flash:架构学习笔记
By AI Dance (@AI_Whisper_X)

DS 的架构创新还是太屌了。
放出来的已经是这个样子,很难想象他们背后做了多少探索。
DeepSeek 发布了 V4.1 Flash,采用 Causal Encoder-Decoder(CED)结构,输入和输出的计算不对称:处理输入时,每个 token 激活约 8B 参数;生成时约 16B。
先聊架构方面的创新。
这套设计受到 YoCo 启发。相关前作是 2024 年的《You Only Cache Once: Decoder-Decoder Architectures for Language Models》。它们都在探索:让前半段提供记忆,后半段复用,从而减少重复计算与缓存。
前作论文:You Only Cache Once(YoCo,2024)
Causal-Encoder-Decoder 到底做了什么?
先分清模型使用时的两个阶段:
- Prefill:处理已经拿到的输入,建立缓存。
- Decode:利用已有上下文,逐步生成输出。
KV 缓存可以粗略理解为模型保存的“上下文笔记”。生成下一个 token 时,模型直接读取已有历史的状态,不用把全部历史重新计算一遍。这里的“笔记”是数字表示,不是文字摘要。
普通 Decoder-only Transformer 中,各层通常依据自己的中间状态建立 KV 缓存。因此,在处理尚未缓存的长输入时,输入 token 通常要经过整个网络。
DeepSeek 改变了后半段网络的全局 KV 来源:这些 KV 从前半段的最终输出构造,不必为了建立后半段的全局记忆,让全部输入再跑完后半段。

图 1|先看前后两个大框:语言主干各 20 层;Encoder 输出用于构造 Decoder 的全局 KV。图源:DeepSeek-V4.1-Flash 技术报告 Figure 3,第 7 页。
具体来说,V4.1 Flash 的主干共有 40 层:
- 前 20 层叫 Causal Encoder。
- 后 20 层叫 Decoder。
- 后半段的全局 KV由前半段最终输出经过投影生成,不必为了建立这些 KV,把全部输入再跑完后 20 层。
于是计算路径大致变成:
处理长输入 / Prefill
输入 → 前 20 层 → 构造后半段全局 KV
末尾 128 token 还需经过 Decoder,补齐局部窗口状态。
生成下一步 / Decode
当前 token → 前 20 层 → 后 20 层 → 预测下一个 token
前后两部分都读取相应缓存,并为新增位置建立状态。
这里有两个容易误读的地方。第一,生成时前后 40 层仍然全部运行,16B 是整条生成路径的激活参数口径,不是 Decoder 单独的大小。第二,后半段仍保留逐层的滑动窗口注意力,因此输入阶段也需要对末尾一小段做补算。对足够长的输入,prefill 计算量接近减半,但不能直接推导成所有请求耗时减半。
但此 Encoder 非彼 Encoder
Encoder 是“编码器”:把输入转成 后续网络可用的表示。这里前 20 层承担为后半段构造全局记忆的职责,所以叫 Encoder;20+20 只是这款模型的配置。Causal 则规定了信息的方向:每个位置只能利用当前位置和此前的信息,不能提前看后文。
比如一句话:
小明把苹果吃了。
传统双向 Encoder 在处理“小明”这个位置时,可以利用后面的“苹果”“吃了”。
Causal Encoder 在“小明”这个位置不能提前利用后文;处理到“吃了”时,才可以利用此前的信息。Causal 指的是“不能看未来”的依赖限制,不代表模型因此具备因果推断能力。单向依赖也不等于 prefill 必须逐字串行:已知输入仍可通过掩码并行计算。
真正贯穿论文的主题,是 KV 缓存压缩
这篇报告的主线是:长上下文不只是“算得贵”,还“存得贵、搬得慢”。Agent 反复读取网页、代码和工具结果,历史越来越长,缓存的存储与搬运也会成为瓶颈。DeepSeek 因而同时减少重复存储、降低缓存精度,并重新决定哪些状态值得长期保留。
最关键的结果是:全局 KV 降至约 890 字节/token,在相同上下文长度下,约为 V4 Flash 的 1/4;在报告所述的相同工作负载下,持久化 KV 缓存约为上一代的 1/8。这两个比例针对缓存,不代表整个模型的显存或硬盘需求同比下降。