

编辑|Panda
前两天,DeepSeek V4.1 Flash 正式上线,又快又强,引发了广泛关注和测试热潮。

比如著名测试机构 Artificial Analysis 对 V4.1 Flash 进行了非常充分的测试后,给出了 40 分的指数评分,超过了 DeepSeek 家参数量大得多的 V4 Pro。

当然,这并不意外,毕竟 DeepSeek 自己也得出了这一结论,并表示会让 V4 Pro 下线并将相关请求直接路由的 V4.1 Flash。顺带一提,DeepSeek 已经连续两次修改决定,先是延迟下线 V4 Pro:

然后又放弃下线 V4 Pro 并继续提供 API 调用服务:

此外,Artificial Analysis 的系统评测中还有另一些看点:
DeepSeek V4.1 Flash 在智能体能力和长上下文推理方面进步明显。
DeepSeek V4.1 Flash 以 69% 在 AutomationBench-AA 上排名第一,与 GPT-6 Astra(69%)持平,略高于 Grok 4.6(67%)。
DeepSeek V4.1 Flash 是其测得的冗长度最高的模型之一,每个 Intelligence Index 任务 89k Tokens。
尽管如此冗长,DeepSeek V4.1 Flash 每个 Intelligence Index 任务仍仅花费 0.27 美元。这主要得益于其低定价。
Sebastian Raschka 甚至认为 DeepSeek V4.1 Flash 创新之大,应该叫它 DeepSeek V5。

那么,DeepSeek V4.1 Flash 究竟是如何做到的呢?如何以 552B 参数的小肥鱼超越了 Pro 的 1.6T 参数大肥鱼?下面我们就基于其官方技术报告来进行一番解读。

报告地址:https://huggingface.co/deepseek-ai/DeepSeek-V4.1-Flash/blob/main/DeepSeek_V41_Tech_Report.pdf
这是一篇围绕 KV 缓存写的报告
先看技术报告的标题:「DeepSeek-V4.1-Flash: Pushing the Limits of KV Cache Compression」。推进 KV 缓存压缩之极限。翻完架构章节,我们发现,这不是一个修辞,几乎每一处设计都能回溯到同一个目标:把 KV 缓存压下去。
先看几个数字。V4.1-Flash 的全局 KV 缓存(始终常驻 HBM 的那部分)被压到每 token 890 字节,约为 V4-Flash 的 1/4;如果拉到 DeepSeek-V1 的 389,120 字节来看,这是 437 倍的差距。持久化 KV 缓存(落在 SSD 或主机内存里、用于前缀复用的那部分)则被压到 V4-Flash 的约 1/8。
模型本身是 552B 主干参数外加 196B Engram 参数的多模态 MoE,原生支持 100 万 token 上下文,在 45T token 的多模态语料上预训练,prefill 阶段每 token 只激活 8B 参数,decode 阶段激活 16B。

DeepSeek 历代模型每 token 全局 KV 缓存大小对比
这套数字组合起来,才是「552B 干掉 1.6T」的真正含义:比较的核心是同样一次 agent 调用里,模型要占多少显存、要从 SSD 搬多少数据、要重算多少次 prefill。
稀疏注意力之后,贵的地方是存和搬
要理解 DeepSeek 为什么把全部火力对准 KV 缓存,得先看清楚瓶颈的变化。
从 V3.2 的 DSA 到 V4 的 CSA,稀疏注意力已经把长序列的计算成本削得足够低。但长程 agent 的工作负载有个特点:输入重(input-heavy)。
一个跑几小时的编码 agent,每次工具调用都会产生一次新的 prefill 请求,上下文只增不减,真正需要生成的 token 反而是少数。
于是,当「算」不再是瓶颈之后,「存」和「搬」就顶了上来。
报告把这个新瓶颈拆成三块:
HBM 容量限制了运行时能同时装下多少并发请求的全局 KV;
SSD 和主机内存容量限制了前缀缓存能存多久、命中率有多高;
IO 与互联带宽则限制了缓存迁移和加载的速度。
三个问题合起来,决定了一个 agent 服务的吞吐上限和单位成本。V4 时代 DeepSeek 已经把 CSA 与 HCA 混合起来做序列维度的压缩,V4.1-Flash 则选择在架构、精度、部署三个层次上同时下手。
CED:把一半的 prefill 计算直接砍掉
V4.1-Flash 的语言主干是 40 层,但被切成了两半:前 20 层是因果编码器(Causal Encoder),后 20 层是解码器。这个结构叫 Causal Encoder-Decoder,简称 CED。这也是 DeepSeek 官方发布页上「输入激活 8B、输出激活 16B」这条不对称设计的来源。

有趣的是,Arena 的 Peter Gostev 还让 Astra 阅读了 DeepSeek v4.1 Flash 的论文,用 3D 将其架构与原始 Transformer 架构进行了非常直观的对比。他还将其分享了出来,你可以放大并排查看每一个元素:
https://transformer-architecture.petergostev.chatgpt.site/

关键在于解码器那 20 层的全局 KV 是怎么来的?
常规 Transformer 里,每层的 K、V 都从该层自己的隐藏状态算出来,所以处理一段提示词必须把 40 层全部跑完。
CED 不这么做:解码器各层的 KV 条目直接由第 20 层(也就是编码器最后一层)的隐藏状态用各自的投影矩阵映射得到。换句话说,prefill 阶段只需要跑前 20 层,上半部分的全局 KV 缓存就已经以极低的代价拿到手了。序列长度远大于窗口时,prefill 的复杂度从 O(NL) 降到约 O(NL/2),接近对半砍。
这个思路继承自微软的 YoCo(You Only Cache Once),但 CED 做了结构上的加厚:YoCo 是让上半部分直接共享下半部分产生的同一份 KV 缓存,CED 则是为每一层配置独立的投影权重,在保住「只算一半」的前提下,扩大了 KV 的有效容量和生成深度。
代价也有,出现在滑动窗口注意力上。SWA 仍然是逐层计算的,每层的局部 K、V 都来自本层隐藏状态,这样才能维持局部信息的计算深度。可这意味着 prefill 时解码器仍需额外处理 n_win × L/2 个 token 来补齐 SWA 状态,对于多轮短提示的场景反而成了新的开销。
DeepSeek 的处理方式是「近似」:既然已有研究表明 SWA 的实际有效感受野远小于理论上的 n_win × L/2,那就只回放提示词最后的 n_win 个 token。这就是后面要讲的 Decoder SWA Bounded Replay。
CSA2:三个压缩维度,第一次被同时吃满
CED 管计算,CSA2(Compressed Sparse Attention 2)管的是存储。
报告把 KV 缓存的压缩空间归纳成三个互相相乘的维度:条目大小(GQA 减少 KV 头数、MLA 让各头共享一个小 latent)、序列维度(每 m 个 token 压成一条,V4 的 CSA 和 HCA 属于这一类)、以及层维度(让部分层复用其他层的缓存和选择结果)。
报告中还介绍了三项之前的成果:
IndexCache 跨层复用 Top-K 索引,省的是索引器的算力而不是缓存;
YOIO 把稀疏路由算一次全网共享,但全网共享会伤性能;
HySparse 让稀疏层复用稠密层的 KV 缓存,可它仍然保留了完整注意力层。
三者都没有覆盖全部三个维度,而 CSA2 想要的是同时吃满。
它的做法是给每个 CSA2 层静态分配三种模式之一。
Full 模式自己算 main KV 和索引器 Q,从 main KV 投影出索引器 K,跑完整的索引流程产出新鲜的 Top-K 索引。
Reindex 模式复用前面某层的 main KV 和索引器 K,但用自己的索引器 Q 重新打分、选出属于自己的 Top-K——缓存共享了,选择还是自己的。
Reuse 模式最省,main KV 和 Top-K 索引全部沿用,直接做稀疏注意力,连索引器 Q 都不算。

三种模式的共同点是,每层仍然保留自己的全局 Q 和 SWA KV,所以层与层之间的表达能力并没有被抹平。具体配置参见原报告。
FP4 与 Bounded Replay
架构之外,还有两刀。
第一刀在精度上。V4 已经对索引器的 Q、K 做了 FP4 量化感知训练,V4.1-Flash 把 FP4 推进到了 main KV 缓存。格式上选的是 E2M1 配每 16 通道一个 E4M3 缩放因子,接近 NVFP4 但省掉了它的二级全局缩放。报告也硬核地论证了这个做法,感兴趣的读者可自行查阅。
第二刀在部署上,就是前面提到的 SWA Bounded Replay。由于 SWA 的依赖会逐层累积,精确重建 L 层的 SWA KV 需要回放 L × n_win 个 token,V4 的技术报告里提出过「Zero SWA Caching」的思路,但这个代价在生产部署中被证明过高。V4.1-Flash 干脆接受近似:只回放最近的 n_win 个 token(配置里 n_win = 128),并把 SWA 截断到回放段内。
这个「接受近似」换来的收益很明显。在 V4 的部署中,SWA KV 占了持久化缓存近一半的容量,而它的访问模式跟持久化缓存的长留存策略根本不匹配——全局 KV 有长尾复用价值,SWA KV 却只在一个活跃会话内的分钟级窗口里有用,会话一结束就是死数据。
于是 V4.1-Flash 把 SWA KV 整个移出持久化缓存,改放进由每台机器 10% 主机 DRAM 组成的分布式内存池,TTL 只有几分钟,靠高周转服务绝大多数并发会话;全局 KV 继续留在 SSD 上,保证至少 72 小时的生命周期。
偶尔出现全局 KV 命中而 SWA KV 未命中的请求,就用 bounded replay 重算 n_win 个 token 兜底。报告称这把一次灾难性的缓存未命中变成了一次廉价的优雅降级,持久化 KV 缓存也因此降到 V4-Flash 的约 1/8。
所有这些加在一起的效果:上下文从 4K 拉到 1M、放大 256 倍,V4.1-Flash 的单 token decode FLOPs 只增加了 1/4。

各代 DeepSeek 模型单 token decode FLOPs 随上下文长度的变化
Single-Pass mHC、Engram 与 DSpark
熟悉 DeepSeek 这一年论文节奏的读者,会在架构章节里看到不少老面孔。
mHC(流形约束超连接)来自今年元旦发布的那篇论文,解决的是超大规模训练的稳定性问题。
V4.1-Flash 把它升级成了 Single-Pass mHC。
原始实现里,输入混合系数 A 必须等隐藏维度上的规约完成才能拿到,导致残差更新、系数预测、输入混合三个 kernel 只能串行,激活访存量是理论下界的两倍。
新版本的做法是把混合系数错开一个 block——每个 block 消费上一个 block 产出的混合系数,依赖关系就此消失,三步可以融进一个叫 Mega-mHC 的 kernel 里,激活访存从 (4n+4)d 降到 (2n+2)d,正好减半。报告说这个错位带来的性能损失可以忽略。
Engram 则是今年 1 月 DeepSeek 与北京大学合作提出的条件记忆模块,思路是用 N-gram 哈希实现 O(1) 复杂度的静态知识检索,把「记忆」从昂贵的 GPU 显存卸载到廉价的 DRAM,让 MoE 专心做组合推理。
V4.1-Flash 里它第一次进了正式版模型:196B 参数平均分给两个模块,放在第 1 层和第 14 层,采用 {2, 3, 4} 阶 N-gram、8 个哈希头、每阶总嵌入维度 2048,每个头索引约 1600 万条目,表大小取互不相同的质数。嵌入表和投影都用 FP8,推理时靠确定性寻址从主机内存后台 RDMA 预取,第一个模块的预取直接和第一个 Transformer block 的计算重叠。相比原始 Engram 设计,这里去掉了那个短因果卷积,理由是它的收益不足以抵消推理栈的复杂度。
投机解码模块 DSpark 由三个 Transformer block 组成,滑动窗口 128 token,一次前向并行给出五个草稿位置的 base logits,再用一个轻量的 Markov 头建模草稿 token 之间的依赖,另有一个置信度头预测逐位置的接受概率,由调度器结合引擎吞吐曲线动态决定每个请求的验证长度。跟 V3 里全程与主干联合训练的 MTP 不同,DSpark 是在预训练之后单独训练的,后训练阶段跟着主干一起走但不回传梯度,好处是它能持续对齐不断演化的策略,同时加速线上服务和 RL 的 rollout 生成。
优化器层面也有两处调整:Q、K 权重用按头切分的 head-wise Muon,以处理注意力头之间的异质性;Engram 嵌入表、token 嵌入和预测头则用动量更新配 Sinkhorn 平衡替代 Adam,只需一个动量缓冲,省下了大量优化器状态显存。
这些优化效果明显:占绝大多数的 Reuse 模式层,prefill 时只需执行 15 个 kernel,decode 时只需 11 个。
后训练:「没有算法创新」
DeepSeek 在后训练章节坦率地表示:这一版没有引入新的后训练算法,流程就是标准的 SFT 加 RL 加 on-policy 蒸馏,没有超出成熟实践的改动。所有的改动都在数据管线上,这里就不多展开了,详见原论文。
一个有意思的点是,后训练引入了一个对使用者直接可见的设计:reasoning effort。
训练时把一个 1 到 100 的标量 effort 显式写进系统提示,同一 effort 下的多个采样构成一个子组,组内做奖励中心化,而长度惩罚系数随 effort 指数衰减:effort 每增加一个特征尺度,惩罚系数乘以 1/e。这样一来,同一份权重就能在成本-质量曲线上滑动。DeepSeek API 暴露的 max、high、low 三档,对应的正是 b=100、75、50。
这也顺带解释了开头 Artificial Analysis 那条「最冗长模型之一」的观察:它测的是 max 档,而 max 档在设计上就是这条曲线最右端的点。
报告给出的数据是,effort 从 25 提到 100,八个推理密集型基准的平均 Pass@1 从 67.1% 升到 76.3%,DeepSWE v1.1 从 66.0% 到 74.2%,Terminal-Bench 2.1 从 82.4% 到 90.6%,代价是约 2.5 倍的输出 token。

性能与输出长度随 reasoning effort 的变化
但收益是前置的——60 到 80 这一档已经能用不到一半的 token 预算拿到接近满档的准确率,而从 80 走到 100 会让 agent 轨迹再长 1.6 到 1.8 倍,换来的只是边际提升。报告的建议是把 max 留给最难的任务。

结语
把这份报告读完,会发现它最值得注意的是三个层次被拧在同一个方向上:架构层用 CED 砍掉一半 prefill、用 CSA2 把跨层复用做到三个维度全覆盖,精度层把 main KV 压到 FP4,部署层则用 bounded replay 把 SWA KV 整个赶出持久化缓存。
任何单独一项都只能带来百分之几十的改善,叠在一起才效果显著。
顺带一提,DeepSeek 还开源了一些新的代码仓库,方便更容易地部署 V4.1 Flash 以及后续的开源模型:

deepseek-recipe:是一组 Rust 库和 Python bindings,可将不同格式的 API 请求统一转换为 Conversation 格式,将其编码为 DeepSeek 模型的提示,并将模型输出转换为相应格式的响应。使用这些组件将推理后端连接到支持多种格式的 API 服务。
https://github.com/deepseek-ai/deepseek-recipe
DeepJIT:一个轻量级、仅头文件的 C++20 JIT 运行时,面向 NVIDIA CUDA GPU 和华为昇腾 NPU。它为 C++/Python 扩展作者提供了一个共享接口,用于在运行时编译内核源代码、缓存生成的二进制文件、将其加载到设备上,并使用后端特定的选项启动它们。
https://github.com/deepseek-ai/DeepJIT
DeepSelect:是 DeepSeek 稀疏注意力(DSA)(用于 DeepSeek V3.2、DeepSeek V4 和 DeepSeek V4.1 模型)中所用 TopK 内核以及采样器的高性能实现。与原生 torch.topk 相比,它实现了 2 ~ 20 倍的加速。
https://github.com/deepseek-ai/DeepSelect
再顺带一提,DeepSeek 已经开始灰度语音交互了: