<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>KV Cache on 灭火器箱</title><link>https://actypedef.ink/tags/kv-cache/</link><description>Recent content in KV Cache on 灭火器箱</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Tue, 04 Aug 2026 00:00:00 +0800</lastBuildDate><atom:link href="https://actypedef.ink/tags/kv-cache/index.xml" rel="self" type="application/rss+xml"/><item><title>浅读 DeepSeek V4 Sparse Attention</title><link>https://actypedef.ink/p/deepseek-sparse-attention-kv-cache/</link><pubDate>Tue, 04 Aug 2026 00:00:00 +0800</pubDate><guid>https://actypedef.ink/p/deepseek-sparse-attention-kv-cache/</guid><description>&lt;img src="https://actypedef.ink/p/deepseek-sparse-attention-kv-cache/cover.jpg" alt="Featured image of post 浅读 DeepSeek V4 Sparse Attention" /&gt;
 &lt;blockquote&gt;
 &lt;p&gt;本文梳理 Attention、KV Cache、MLA、DSA，以及 DeepSeek-V4 中 CSA/HCA 的计算结构。重点讨论三类问题：各方法作用于特征维度还是 token 维度；Indexer 在执行全序列打分时如何降低主 Attention 成本；压缩 KV 与原始 KV 如何联合参与 Attention。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h2 id="0-问题分解token-维度与特征维度"&gt;0. 问题分解：token 维度与特征维度
&lt;/h2&gt;&lt;p&gt;理解各种 Attention 变体之前，最重要的是区分两个轴：&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;轴&lt;/th&gt;
					&lt;th&gt;含义&lt;/th&gt;
					&lt;th&gt;典型优化方法&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;token 维度&lt;/td&gt;
					&lt;td&gt;有多少历史位置需要保存、打分和读取&lt;/td&gt;
					&lt;td&gt;Sliding Window、DSA、CSA、HCA&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;特征维度&lt;/td&gt;
					&lt;td&gt;每个历史位置保存多少维 K/V，以及有多少个 KV head&lt;/td&gt;
					&lt;td&gt;MHA、GQA、MQA、MLA&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;这两类优化可以组合，但解决的不是同一个问题。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;GQA、MQA、MLA 通常不会改变历史 token 数量 $L$，主要减少每个 token 的 KV 表示。&lt;/li&gt;
&lt;li&gt;Sliding Window、DSA、CSA、HCA 会改变每个 Query 实际访问的历史位置数量；其中 CSA/HCA 还会压缩长期 KV Cache 的 token 轴。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;后文将依据这两个维度对各类方法进行分类。&lt;/p&gt;
&lt;p&gt;一种 Attention 方法可以由以下三项量描述：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Query 序列长度。&lt;/li&gt;
&lt;li&gt;KV Cache 中保存的条目数量。&lt;/li&gt;
&lt;li&gt;每个 Query 实际参与主 Attention 的 KV 条目数量。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;下表汇总了各方法在这些维度上的差异。$W$ 表示局部窗口，$k$ 表示稀疏选择数量：&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;方法&lt;/th&gt;
					&lt;th style="text-align: right"&gt;长期缓存条目数&lt;/th&gt;
					&lt;th&gt;每个条目的表示&lt;/th&gt;
					&lt;th style="text-align: right"&gt;每个 Query 的主 Attention 条目数&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;MHA/GQA/MQA&lt;/td&gt;
					&lt;td style="text-align: right"&gt;$L$&lt;/td&gt;
					&lt;td&gt;KV head 数不同&lt;/td&gt;
					&lt;td style="text-align: right"&gt;$L$&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;MLA&lt;/td&gt;
					&lt;td style="text-align: right"&gt;$L$&lt;/td&gt;
					&lt;td&gt;低秩 latent&lt;/td&gt;
					&lt;td style="text-align: right"&gt;$L$&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Sliding Window&lt;/td&gt;
					&lt;td style="text-align: right"&gt;最多 $W$&lt;/td&gt;
					&lt;td&gt;原始 KV&lt;/td&gt;
					&lt;td style="text-align: right"&gt;$W$&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;DSA&lt;/td&gt;
					&lt;td style="text-align: right"&gt;$L$，另有 index cache&lt;/td&gt;
					&lt;td&gt;MLA latent&lt;/td&gt;
					&lt;td style="text-align: right"&gt;$k$&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;CSA&lt;/td&gt;
					&lt;td style="text-align: right"&gt;主缓存 $L/4$，另有 $L/4$ index cache&lt;/td&gt;
					&lt;td&gt;主 KV 512 维，index key 128 维&lt;/td&gt;
					&lt;td style="text-align: right"&gt;$k+W$&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;HCA&lt;/td&gt;
					&lt;td style="text-align: right"&gt;$L/128$&lt;/td&gt;
					&lt;td&gt;共享 KV 512 维&lt;/td&gt;
					&lt;td style="text-align: right"&gt;$L/128+W$&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="1-标准-attention-的计算形式"&gt;1. 标准 Attention 的计算形式
&lt;/h2&gt;&lt;p&gt;标准 Attention 中三类表示的作用为：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Query：当前 token 用于计算相关性的表示。&lt;/li&gt;
&lt;li&gt;Key：各历史位置参与相关性计算的表示。&lt;/li&gt;
&lt;li&gt;Value：根据 Attention 权重进行聚合的表示。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;对于长度为 $L$、单头维度为 $d_h$ 的一层 Attention：&lt;/p&gt;
$$Q\in\mathbb R^{L\times d_h},\qquad K\in\mathbb R^{L\times d_h},\qquad V\in\mathbb R^{L\times d_v}$$&lt;p&gt;计算过程是：&lt;/p&gt;
$$P=\operatorname{softmax}\left(\frac{QK^\mathsf T}{\sqrt{d_h}}+M\right)$$$$O=PV$$&lt;p&gt;其中 $M$ 是因果 mask，禁止当前位置看到未来 token。&lt;/p&gt;
&lt;p&gt;维度上：&lt;/p&gt;
$$\underbrace{[L,L]}_{P} \times \underbrace{[L,d_v]}_{V} = \underbrace{[L,d_v]}_{O}$$&lt;p&gt;Attention map 的两个轴不是一回事：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;行是 Query 数量，决定输出有多少个 token。&lt;/li&gt;
&lt;li&gt;列是参与计算的 Key/Value 条目数量。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;因此，压缩 Key/Value 的序列轴只会改变 Attention map 的列数。只要 Query 序列长度仍为 $L$，输出序列长度就仍为 $L$。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="2-kv-cache-的缓存内容与规模"&gt;2. KV Cache 的缓存内容与规模
&lt;/h2&gt;&lt;h3 id="21-prefill-与-decode"&gt;2.1 Prefill 与 Decode
&lt;/h3&gt;&lt;p&gt;大模型推理通常分两段：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Prefill&lt;/strong&gt;：一次处理整段输入，生成每一层的历史 K/V。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Decode&lt;/strong&gt;：每次只生成一个新 token。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;在 Decode 的第 $t$ 步，旧 token 的 K/V 不会随新 Query 改变，因此没有必要重复计算。模型把它们保存下来：&lt;/p&gt;
$$K_{\text{cache}}=[k_0,k_1,\ldots,k_{t-1}], \qquad V_{\text{cache}}=[v_0,v_1,\ldots,v_{t-1}]$$&lt;p&gt;新位置只需计算 $q_t,k_t,v_t$。因果自注意力允许位置 $t$ 访问自身，因此本步实际使用的 K/V 为：&lt;/p&gt;
$$K_{\le t}=[K_{\text{cache}};k_t], \qquad V_{\le t}=[V_{\text{cache}};v_t]$$&lt;p&gt;$q_t$ 与 $K_{\le t}$ 计算 Attention 权重，再对 $V_{\le t}$ 进行加权聚合；$k_t,v_t$ 随后作为历史状态保留在缓存中。具体实现可以先写入缓存，也可以将写入与 Attention 内核融合。&lt;/p&gt;
&lt;p&gt;Q 不需要缓存。历史位置的 Query 只用于计算对应位置的输出，不参与后续 Decode 步骤；生成位置 $t$ 时，仅当前 $Q_t$ 与截至位置 $t$ 的 K/V 参与计算。&lt;/p&gt;
&lt;h3 id="22-kv-cache-大小"&gt;2.2 KV Cache 大小
&lt;/h3&gt;&lt;p&gt;传统 Attention 每层 KV Cache 的元素数量约为：&lt;/p&gt;
$$2\times L\times H_{KV}\times d_h$$&lt;p&gt;其中 2 来自 K 和 V。再乘层数、batch size 和每个元素的字节数，就得到实际显存占用。&lt;/p&gt;
&lt;p&gt;因此可以区分三类优化对象：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;减少 $H_{KV}\times d_h$：压缩每个 token 的特征表示。&lt;/li&gt;
&lt;li&gt;减少持久缓存条目数：压缩或删除历史 KV 条目。&lt;/li&gt;
&lt;li&gt;减少每个 Query 的访问条目数：从缓存中稀疏选择部分 KV；这不一定改变缓存长度。&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="3-mhagqamqamla主要优化特征维度"&gt;3. MHA、GQA、MQA、MLA：主要优化特征维度
&lt;/h2&gt;&lt;h3 id="31-mhagqa-与-mqa"&gt;3.1 MHA、GQA 与 MQA
&lt;/h3&gt;&lt;p&gt;假设有 $H_Q$ 个 Query heads：&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;方法&lt;/th&gt;
					&lt;th style="text-align: right"&gt;Query heads&lt;/th&gt;
					&lt;th style="text-align: right"&gt;KV heads&lt;/th&gt;
					&lt;th&gt;含义&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;MHA&lt;/td&gt;
					&lt;td style="text-align: right"&gt;$H_Q$&lt;/td&gt;
					&lt;td style="text-align: right"&gt;$H_Q$&lt;/td&gt;
					&lt;td&gt;每个 Q head 有独立 K/V&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;GQA&lt;/td&gt;
					&lt;td style="text-align: right"&gt;$H_Q$&lt;/td&gt;
					&lt;td style="text-align: right"&gt;$G$&lt;/td&gt;
					&lt;td&gt;一组 Q heads 共享一套 K/V&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;MQA&lt;/td&gt;
					&lt;td style="text-align: right"&gt;$H_Q$&lt;/td&gt;
					&lt;td style="text-align: right"&gt;1&lt;/td&gt;
					&lt;td&gt;所有 Q heads 共享一套 K/V&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;多头仍然体现在 Q 侧。即使所有 Query heads 共享同一套 KV，不同的 $q_h$ 也会产生不同分数：&lt;/p&gt;
$$q_1^\mathsf Tk_s\ne q_2^\mathsf Tk_s$$&lt;p&gt;所以不同 head 仍然可以关注不同关系。&lt;/p&gt;
&lt;h3 id="32-几个具体模型的维度"&gt;3.2 几个具体模型的维度
&lt;/h3&gt;&lt;p&gt;以下矩阵采用 PyTorch 的 &lt;code&gt;[out_features, in_features]&lt;/code&gt; 记法。&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;模型&lt;/th&gt;
					&lt;th&gt;类型&lt;/th&gt;
					&lt;th style="text-align: right"&gt;$d_{model}$&lt;/th&gt;
					&lt;th style="text-align: right"&gt;$H_Q$&lt;/th&gt;
					&lt;th style="text-align: right"&gt;$H_{KV}$&lt;/th&gt;
					&lt;th style="text-align: right"&gt;$d_h$&lt;/th&gt;
					&lt;th style="text-align: right"&gt;每 token 每层 KV 元素数&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;GPT-2 Small&lt;/td&gt;
					&lt;td&gt;MHA&lt;/td&gt;
					&lt;td style="text-align: right"&gt;768&lt;/td&gt;
					&lt;td style="text-align: right"&gt;12&lt;/td&gt;
					&lt;td style="text-align: right"&gt;12&lt;/td&gt;
					&lt;td style="text-align: right"&gt;64&lt;/td&gt;
					&lt;td style="text-align: right"&gt;$2\times12\times64=1536$&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Qwen2.5-7B&lt;/td&gt;
					&lt;td&gt;GQA&lt;/td&gt;
					&lt;td style="text-align: right"&gt;3584&lt;/td&gt;
					&lt;td style="text-align: right"&gt;28&lt;/td&gt;
					&lt;td style="text-align: right"&gt;4&lt;/td&gt;
					&lt;td style="text-align: right"&gt;128&lt;/td&gt;
					&lt;td style="text-align: right"&gt;$2\times4\times128=1024$&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Falcon-7B&lt;/td&gt;
					&lt;td&gt;MQA&lt;/td&gt;
					&lt;td style="text-align: right"&gt;4544&lt;/td&gt;
					&lt;td style="text-align: right"&gt;71&lt;/td&gt;
					&lt;td style="text-align: right"&gt;1&lt;/td&gt;
					&lt;td style="text-align: right"&gt;64&lt;/td&gt;
					&lt;td style="text-align: right"&gt;$2\times1\times64=128$&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;对应投影矩阵的形状为：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;GPT-2 Small
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;WQ, WK, WV: [768, 768]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Qwen2.5-7B
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;WQ: [3584, 3584]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;WK: [512, 3584]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;WV: [512, 3584]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Falcon-7B
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;WQ: [4544, 4544]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;WK: [64, 4544]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;WV: [64, 4544]
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;这些方法不改变 KV 的 token 轴长度：序列长度为 100 万时，仍然有 100 万个 KV 位置，但每个位置保存的特征数量更少。&lt;/p&gt;
&lt;h3 id="33-mla联合压缩-kv-特征"&gt;3.3 MLA：联合压缩 K/V 特征
&lt;/h3&gt;&lt;p&gt;DeepSeek-V2/V3 的 Multi-head Latent Attention（MLA）不再为每个 KV head 保存完整 K/V，而是把它们联合压缩成一个低维 latent：&lt;/p&gt;
$$c_t^{KV}=h_tW^{DKV}$$&lt;p&gt;计算 Attention 时，再通过上投影映射为各 head 使用的 K/V 表示。&lt;/p&gt;
&lt;p&gt;以 DeepSeek-V3 为例：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;隐藏维度 7168
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Query low-rank rank 1536
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;KV latent rank 512
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;每个 head 的 content-key 维度 128
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;每个 head 的 RoPE-key 维度 64
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;每个 head 的 value 维度 128
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Query heads 128
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;a class="link" href="https://huggingface.co/deepseek-ai/DeepSeek-V3/blob/main/config.json" target="_blank" rel="noopener"
 &gt;DeepSeek-V3 官方配置&lt;/a&gt; 中与 MLA 直接相关的字段如下：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;span class="lnt"&gt;8
&lt;/span&gt;&lt;span class="lnt"&gt;9
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;hidden_size&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;7168&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;num_attention_heads&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;128&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;q_lora_rank&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1536&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;kv_lora_rank&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;512&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;qk_nope_head_dim&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;128&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;qk_rope_head_dim&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;64&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;v_head_dim&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;128&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;MLA 实际缓存：&lt;/p&gt;
$$\underbrace{c_t^{KV}}_{512} + \underbrace{k_t^R}_{64} =576\text{ 个元素/token/layer}$$&lt;p&gt;若使用等价的完整 MHA，需要：&lt;/p&gt;
$$128\times(128+64+128)=40960$$&lt;p&gt;所以特征缓存约缩小 $40960/576\approx71$ 倍。&lt;/p&gt;
&lt;p&gt;但要注意：MLA 仍然保存 $L$ 个 latent。它主要压缩特征轴，不压缩 token 轴。&lt;/p&gt;
&lt;h3 id="34-mla-的展开方式与计算成本"&gt;3.4 MLA 的展开方式与计算成本
&lt;/h3&gt;&lt;p&gt;MLA 最确定的收益是 KV Cache 容量和 Decode 访存带宽。&lt;/p&gt;
&lt;p&gt;如果显式地将 latent 展开成完整 K/V 后再执行普通 Attention，核心 token-pair 数量不会减少，并且会增加展开操作。高效实现利用结合律，将上投影吸收到 Query 和输出投影中，例如：&lt;/p&gt;
$$q^\mathsf T(W^{UK}c) = ((W^{UK})^\mathsf Tq)^\mathsf Tc$$&lt;p&gt;这样无需为全部历史 token 显式展开 K。不过 $L$ 个历史位置仍然都要参与，因此 MLA 本身没有解决长上下文的 token 维度问题。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="4-rope让-qk-点积感知相对位置"&gt;4. RoPE：让 QK 点积感知相对位置
&lt;/h2&gt;&lt;h3 id="41-rope-的旋转计算"&gt;4.1 RoPE 的旋转计算
&lt;/h3&gt;&lt;p&gt;RoPE 把相邻两个特征维度视为一个二维向量。对位置 $p$ 和第 $i$ 个二维对子，旋转角度为：&lt;/p&gt;
$$\theta_{p,i}=p\cdot\omega_i, \qquad \omega_i=\Theta^{-2i/d_{rope}}$$&lt;p&gt;二维旋转为：&lt;/p&gt;
$$\begin{bmatrix} x'_{2i}\\ x'_{2i+1} \end{bmatrix} = \begin{bmatrix} \cos\theta_{p,i} &amp; -\sin\theta_{p,i}\\ \sin\theta_{p,i} &amp; \cos\theta_{p,i} \end{bmatrix} \begin{bmatrix} x_{2i}\\ x_{2i+1} \end{bmatrix}$$&lt;p&gt;记位置 $p$ 的整体旋转矩阵为 $R_p$。对 Q、K 分别旋转：&lt;/p&gt;
$$q'_t=R_tq_t,\qquad k'_s=R_sk_s$$&lt;p&gt;它们的点积满足：&lt;/p&gt;
$$(q'_t)^\mathsf Tk'_s =q_t^\mathsf TR_t^\mathsf TR_sk_s =q_t^\mathsf TR_{s-t}k_s$$&lt;p&gt;因此绝对位置 $s,t$ 被转化成了相对距离 $s-t$。&lt;/p&gt;
&lt;h3 id="42-rope-在-qk-上的作用与-v-的坐标一致性"&gt;4.2 RoPE 在 Q/K 上的作用与 V 的坐标一致性
&lt;/h3&gt;&lt;p&gt;Q、K 直接决定 Attention logits，因此在这两个表示上引入位置变换，可以使权重计算依赖相对位置。V 只参与权重确定后的聚合，通常保持在统一的特征坐标系中：&lt;/p&gt;
$$o_t=\sum_s\alpha_{t,s}v_s$$&lt;p&gt;如果直接对 V 做绝对位置旋转：&lt;/p&gt;
$$o_t=\sum_s\alpha_{t,s}R_sv_s$$&lt;p&gt;来自不同位置的 Value 会处在不同的旋转坐标系中。即使其未旋转表示相同，旋转后的分量也可能在加权求和时发生抵消。因此标准 Attention 通常不旋转 V。&lt;/p&gt;
&lt;p&gt;这并不表示 V 不能使用位置变换，而是需要额外操作将聚合结果转换到一致的坐标系。DeepSeek-V4 通过输出端的逆 RoPE 处理这一问题。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="5-sparse-attention-的计算动机"&gt;5. Sparse Attention 的计算动机
&lt;/h2&gt;&lt;p&gt;即使使用 GQA、MQA 或 MLA，只要每个 Query 仍然访问全部历史位置，长上下文计算量仍然较高。&lt;/p&gt;
&lt;p&gt;对于长度 $L$：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Prefill 的 Dense Attention token-pair 数量约为 $O(L^2)$。&lt;/li&gt;
&lt;li&gt;Decode 每生成一个 token，需要访问 $O(L)$ 个历史位置。&lt;/li&gt;
&lt;li&gt;KV Cache 的 token 轴仍然为 $O(L)$。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Sparse Attention 的目标是让主 Attention 只访问一个较小集合：&lt;/p&gt;
$$\mathcal S_t\subseteq\{0,1,\ldots,t\}, \qquad |\mathcal S_t|\ll t$$&lt;h3 id="51-sliding-window-attention"&gt;5.1 Sliding Window Attention
&lt;/h3&gt;&lt;p&gt;最直接的方法是只保留最近 $W$ 个 token：&lt;/p&gt;
$$\mathcal S_t=\{t-W+1,\ldots,t\}$$&lt;p&gt;单层只能传播 $W$ 范围的信息，但多层堆叠可以扩大理论感受野。如果每层最多向前传播 $W-1$ 步，堆叠 $N$ 层后：&lt;/p&gt;
$$\text{感受野}\approx1+N(W-1)$$&lt;p&gt;第 2 层读取的局部隐藏状态已经包含第 1 层聚合的信息，因此信息可以通过多层局部 Attention 跨越更长的历史距离传递至当前位置。&lt;/p&gt;
&lt;p&gt;但理论可达范围不等价于对长距离位置的直接访问。多层传播路径会增加信息损失，因此长上下文模型通常还需要显式的长距离 Attention 机制。&lt;/p&gt;
&lt;h3 id="52-attention-与残差连接的作用"&gt;5.2 Attention 与残差连接的作用
&lt;/h3&gt;&lt;p&gt;Attention 在同一层内聚合不同 token 的表示；残差连接则在层间保留同一 token 的已有表示。二者分别对应序列维度上的信息交互和网络深度方向上的状态传递。&lt;/p&gt;
&lt;p&gt;标准残差形式为：&lt;/p&gt;
$$h_t^{(l+1)}=h_t^{(l)}+\operatorname{Attention}^{(l)}(h)_t$$&lt;p&gt;因此，Attention 输出作为增量加入原隐藏状态，而不是完全替换原隐藏状态。对于有损的 KV 压缩，这可以保留未经过当前层 Attention 聚合的 token 表示。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="6-deepseek-v32-dsa低维全序列打分与稀疏主-attention"&gt;6. DeepSeek-V3.2 DSA：低维全序列打分与稀疏主 Attention
&lt;/h2&gt;&lt;p&gt;DeepSeek Sparse Attention（DSA）使用轻量 Indexer 对全部历史位置计算相关性分数，选择 top-$k$ 位置后，主 MLA Attention 仅在选中位置上计算。&lt;/p&gt;
&lt;h3 id="61-indexer-打分公式"&gt;6.1 Indexer 打分公式
&lt;/h3&gt;&lt;p&gt;对于 Query token $t$、历史 token $s$，Indexer 使用多个轻量 query heads 和一套共享 index key：&lt;/p&gt;
$$I_{t,s} = \sum_{j=1}^{H_I} w^I_{t,j} \operatorname{ReLU} \left((q^I_{t,j})^\mathsf Tk^I_s\right)$$&lt;p&gt;该式包含三个步骤：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;各 indexer head 独立计算 Query 与共享 index key 的相关性。&lt;/li&gt;
&lt;li&gt;当前 Query 产生动态系数 $w^I_{t,j}$。&lt;/li&gt;
&lt;li&gt;对各 head 的 ReLU 分数进行加权求和，得到位置 $s$ 的标量分数 $I_{t,s}$。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;随后：&lt;/p&gt;
$$\mathcal S_t=\operatorname{TopK}_s(I_{t,s})$$&lt;p&gt;V3.2 的主 Attention 使用 top-2048。所有主 Query heads 共享这个选中集合，但各自重新计算高维主 Attention 权重。&lt;/p&gt;
&lt;h3 id="62-indexer-的计算范围与成本"&gt;6.2 Indexer 的计算范围与成本
&lt;/h3&gt;&lt;p&gt;Indexer 对全部历史位置执行低维 QK 打分，但不构成完整的 Dense Attention。&lt;/p&gt;
&lt;p&gt;它没有执行完整主路径中的高维多头 QK、全长度 softmax 和 Value 聚合。其计算成本可近似表示为：&lt;/p&gt;
$$\text{Dense Decode}: L\cdot C_M$$$$\text{DSA Decode}: L\cdot C_I+k\cdot C_M, \qquad C_I\ll C_M,\quad k\ll L$$&lt;p&gt;因此 Decode 对 $L$ 的渐近阶没有改变，但全序列项的计算维度较低，高维主 Attention 只处理 $k$ 个位置。&lt;/p&gt;
&lt;p&gt;忽略常数项后，Prefill 可以近似写成：&lt;/p&gt;
$$\text{Dense Prefill}: L^2C_M$$$$\text{DSA Prefill}: L^2C_I+LkC_M$$&lt;p&gt;因此 DSA 的 Prefill 在渐近意义上仍有平方项，但该平方项对应计算成本较低的 Indexer。&lt;/p&gt;
&lt;h3 id="63-dsa-的-kv-cache-长度"&gt;6.3 DSA 的 KV Cache 长度
&lt;/h3&gt;&lt;p&gt;DSA 不压缩主 MLA Cache 的 token 轴。V3.2 的主 MLA Cache 仍然有 $L$ 个位置，并且还增加了一份低维 index key cache。&lt;/p&gt;
&lt;p&gt;DSA 的主要收益是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;将主 Attention 读取的历史 KV 数量从 $L$ 降至 $k$。&lt;/li&gt;
&lt;li&gt;将主路径中的高维计算限制在选中位置。&lt;/li&gt;
&lt;li&gt;降低 Decode 阶段的显存带宽需求。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;但它没有从根本上把长期 KV Cache 从 $L$ 压成 $L/4$ 或 $L/128$。这正是 DeepSeek-V4 继续改进的方向。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="7-deepseek-v4csa-与-hca-的混合-attention"&gt;7. DeepSeek-V4：CSA 与 HCA 的混合 Attention
&lt;/h2&gt;&lt;p&gt;DeepSeek-V4 先在 token 轴上压缩长期 KV，再对压缩表示执行稀疏或稠密 Attention。&lt;a class="link" href="https://arxiv.org/html/2606.19348v1#S2.SS3" target="_blank" rel="noopener"
 &gt;DeepSeek-V4 技术报告&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;两种层交错出现：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;CSA：Compressed Sparse Attention，以 $4:1$ 压缩长期 KV 后执行稀疏选择。&lt;/li&gt;
&lt;li&gt;HCA：Heavily Compressed Attention，以 $128:1$ 压缩长期 KV 后执行稠密 Attention。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;二者共同使用：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;多头低秩 Query。&lt;/li&gt;
&lt;li&gt;共享 Key-Value MQA，即 $K=V=C$。&lt;/li&gt;
&lt;li&gt;最近 128 个原始 token 的滑动窗口。&lt;/li&gt;
&lt;li&gt;末尾 64 维的 Partial RoPE。&lt;/li&gt;
&lt;li&gt;Attention 输出的逆 RoPE。&lt;/li&gt;
&lt;li&gt;分组低秩输出投影。&lt;/li&gt;
&lt;li&gt;Attention sink。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt="DeepSeek-V4 总体架构" class="gallery-image" data-flex-basis="222px" data-flex-grow="92" height="646" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://actypedef.ink/p/deepseek-sparse-attention-kv-cache/assets/deepseek-v4-figure-2.png" width="598"&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;图 1：DeepSeek-V4 总体架构。原图为 DeepSeek-V4 Tech Report Figure 2；Attention 层交错使用 CSA 与 HCA。来源：&lt;a class="link" href="https://arxiv.org/html/2606.19348v1#S2.SS3" target="_blank" rel="noopener"
 &gt;DeepSeek-V4 Technical Report&lt;/a&gt;。&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;下面截取 &lt;a class="link" href="https://huggingface.co/deepseek-ai/DeepSeek-V4-Pro/blob/main/inference/config.json" target="_blank" rel="noopener"
 &gt;DeepSeek-V4-Pro 官方 config&lt;/a&gt; 中与 Attention 直接相关的字段。压缩层序列只展示前几项：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;span class="lnt"&gt;16
&lt;/span&gt;&lt;span class="lnt"&gt;17
&lt;/span&gt;&lt;span class="lnt"&gt;18
&lt;/span&gt;&lt;span class="lnt"&gt;19
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-jsonc" data-lang="jsonc"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;dim&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;7168&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;n_heads&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;128&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;q_lora_rank&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1536&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;head_dim&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;512&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;rope_head_dim&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;64&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;o_groups&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;o_lora_rank&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1024&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;window_size&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;128&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;index_n_heads&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;64&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;index_head_dim&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;128&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;index_topk&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1024&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// 仅展示前 6 项：128 表示 HCA，4 表示 CSA
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;compress_ratios&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;128&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;128&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;128&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;128&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;这些字段表明：主 Query 包含 128 个 512 维 heads；长期 KV 使用单个 512 维共享表示；Indexer 使用 128 维表示。&lt;/p&gt;
&lt;h3 id="71-v4-的-query-投影"&gt;7.1 V4 的 Query 投影
&lt;/h3&gt;&lt;p&gt;当前 token 的隐藏状态：&lt;/p&gt;
$$h_t\in\mathbb R^{7168}$$&lt;p&gt;先做低秩降维：&lt;/p&gt;
$$c_t^Q=\operatorname{RMSNorm}(h_tW^{DQ}) \in\mathbb R^{1536}$$&lt;p&gt;再展开为 128 个 Query heads：&lt;/p&gt;
$$[q_{t,1};\ldots;q_{t,128}] =c_t^QW^{UQ} \in\mathbb R^{128\times512}$$&lt;p&gt;每个 head 再做 RMS 归一化，最后 64 维应用 RoPE。&lt;/p&gt;
&lt;p&gt;下面是根据官方 &lt;a class="link" href="https://huggingface.co/deepseek-ai/DeepSeek-V4-Pro/blob/main/inference/model.py" target="_blank" rel="noopener"
 &gt;model.py&lt;/a&gt; 主干等价化简的伪代码。它省略了张量并行、量化和 cache 管理，只保留形状变化：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# x: [B, L, 7168]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;q_latent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;q_norm&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;wq_a&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="c1"&gt;# [B, L, 1536]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;q&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;wq_b&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;q_latent&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# [B, L, 128 * 512]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;q&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;reshape&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;B&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;L&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;128&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;512&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;q&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;rms_normalize_each_head&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;...&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;64&lt;/span&gt;&lt;span class="p"&gt;:]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;rope&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;...&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;64&lt;/span&gt;&lt;span class="p"&gt;:],&lt;/span&gt; &lt;span class="n"&gt;position&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="72-csa每-4-个-token-产生一个重叠压缩项"&gt;7.2 CSA：每 4 个 token 产生一个重叠压缩项
&lt;/h3&gt;&lt;p&gt;&lt;img alt="DeepSeek-V4 CSA 核心架构" class="gallery-image" data-flex-basis="488px" data-flex-grow="203" height="485" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://actypedef.ink/p/deepseek-sparse-attention-kv-cache/assets/deepseek-v4-figure-3-csa.png" srcset="https://actypedef.ink/p/deepseek-sparse-attention-kv-cache/assets/deepseek-v4-figure-3-csa_hu_fcc9be11483fb694.png 800w, https://actypedef.ink/p/deepseek-sparse-attention-kv-cache/assets/deepseek-v4-figure-3-csa.png 987w" width="987"&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;图 2：CSA 核心架构。原图为 DeepSeek-V4 Tech Report Figure 3，包含主压缩路径、Lightning Indexer、滑动窗口 KV 与共享 KV MQA。来源：&lt;a class="link" href="https://arxiv.org/html/2606.19348v1#S2.SS3" target="_blank" rel="noopener"
 &gt;DeepSeek-V4 Technical Report&lt;/a&gt;。&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;CSA 的压缩率为 $m=4$。区别于均值池化，CSA 从隐藏状态产生两套候选表示和门控分数：&lt;/p&gt;
$$C_j^a=h_jW^{KV,a},\qquad C_j^b=h_jW^{KV,b}$$$$Z_j^a=h_jW^{Z,a},\qquad Z_j^b=h_jW^{Z,b}$$&lt;p&gt;第 $i$ 个压缩项结合：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;当前块的 $C^a$。&lt;/li&gt;
&lt;li&gt;前一个块的 $C^b$。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;形式上：&lt;/p&gt;
$$C_i^{\text{Comp}} = \sum_{j=mi}^{m(i+1)-1}S_j^a\odot C_j^a + \sum_{j=m(i-1)}^{mi-1}S_j^b\odot C_j^b$$&lt;p&gt;权重在总共 $2m=8$ 个候选位置上按特征维度做 softmax，并加入可学习的块内位置偏置。第一个块没有前驱，其对应位置使用 padding 和负无穷分数。&lt;/p&gt;
&lt;p&gt;以三个连续原始块为例：$G_0=(x_0,\ldots,x_3)$、$G_1=(x_4,\ldots,x_7)$、$G_2=(x_8,\ldots,x_{11})$。各压缩项的来源如下：&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;压缩项&lt;/th&gt;
					&lt;th&gt;前一块的 $C^b$ 分支&lt;/th&gt;
					&lt;th&gt;当前块的 $C^a$ 分支&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;$C_0^{\text{Comp}}$&lt;/td&gt;
					&lt;td&gt;padding&lt;/td&gt;
					&lt;td&gt;$G_0$&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;$C_1^{\text{Comp}}$&lt;/td&gt;
					&lt;td&gt;$G_0$&lt;/td&gt;
					&lt;td&gt;$G_1$&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;$C_2^{\text{Comp}}$&lt;/td&gt;
					&lt;td&gt;$G_1$&lt;/td&gt;
					&lt;td&gt;$G_2$&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;这里的两套 $C$ 是压缩过程中的中间表示，不是两套最终 KV Cache。最终仍然只保存：&lt;/p&gt;
$$C^{\text{Comp}}\in\mathbb R^{(L/4)\times512}$$&lt;p&gt;重叠压缩用于降低固定分块边界造成的信息损失。同一个 token 通过不同投影，分别参与当前压缩条目和后继压缩条目的计算。&lt;/p&gt;
&lt;p&gt;依据论文符号，官方 Compressor 的核心逻辑可化简如下。完整实现还包含 Prefill/Decode 状态管理、量化和未完成块处理：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 每个 token 投影为两套 512 维候选和门控分数&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;c_a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;c_b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;wkv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="mi"&gt;512&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;z_a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;z_b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;wgate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="mi"&gt;512&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 第 i 个输出使用前一块 B 与当前块 A，共 8 个来源&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;source&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;concat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;previous_block&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;c_b&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;current_block&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;c_a&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;dim&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;token&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;gate&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;concat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;previous_block&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;z_b&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;current_block&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;z_a&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;dim&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;token&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;gate&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;gate&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;learned_position_bias&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 对每个特征维度，沿 8 个来源分别归一化&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;c_comp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;source&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;softmax&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;gate&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;dim&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;token&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dim&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;token&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;c_comp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;rms_norm&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;c_comp&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# [B, L / 4, 512]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;c_comp&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;...&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;64&lt;/span&gt;&lt;span class="p"&gt;:]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;rope&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;c_comp&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;...&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;64&lt;/span&gt;&lt;span class="p"&gt;:],&lt;/span&gt; &lt;span class="n"&gt;block_start_position&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;这里的 &lt;code&gt;block_start_position&lt;/code&gt; 使用原始 token 坐标 $mi$，而不是压缩序列下标 $i$。&lt;/p&gt;
&lt;h3 id="73-csa-的-indexer对压缩条目进行稀疏选择"&gt;7.3 CSA 的 Indexer：对压缩条目进行稀疏选择
&lt;/h3&gt;&lt;p&gt;CSA 的 Indexer 沿用 DSA 的打分形式，但候选集合从 $L$ 个原始 token 变为 $L/4$ 个压缩条目。&lt;/p&gt;
&lt;p&gt;Indexer 不直接使用主 Attention 的 512 维 $C^{\text{Comp}}$，而是从隐藏状态独立学习一套 128 维压缩 index key：&lt;/p&gt;
$$K^I\in\mathbb R^{(L/4)\times128}$$&lt;p&gt;同一个 Query latent $c_t^Q\in\mathbb R^{1536}$ 被投影成：&lt;/p&gt;
$$Q_t^I\in\mathbb R^{64\times128}$$&lt;p&gt;每个 indexer head 与全部已完成压缩条目计算点积：&lt;/p&gt;
$$r_{t,j,i} = \operatorname{ReLU} \left((q_{t,j}^I)^\mathsf Tk_i^I\right)$$&lt;p&gt;再用当前 Query 产生的 head 权重合并：&lt;/p&gt;
$$I_{t,i} = \sum_{j=1}^{64}w_{t,j}^I r_{t,j,i}$$&lt;p&gt;最后选择 top-1024 压缩条目。Indexer 仅返回位置下标，主 Attention 根据这些下标读取对应的 512 维 $C_i^{\text{Comp}}$。主压缩路径与 Indexer 压缩路径具有独立参数，二者的输出分别用于主 Attention 和位置选择。&lt;/p&gt;
&lt;p&gt;对应的 Indexer 主干可写成：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;span class="lnt"&gt;8
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# q_index: [B, L, 64, 128]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# k_index: [B, L/4, 128]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;score_per_head&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;einsum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;blhd,btd-&amp;gt;blht&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;q_index&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;k_index&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;score_per_head&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;relu&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;score_per_head&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 当前 token 为 64 个 indexer heads 产生动态权重&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;index_score&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;score_per_head&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;head_weight&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;...&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;None&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dim&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;head&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;selected&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;topk&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;index_score&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1024&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;dim&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;compressed_token&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;CSA Indexer 仍然对 $L/4$ 个候选执行全长度低维打分。相较于 DSA：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;候选数量减少至原序列的 $1/4$。&lt;/li&gt;
&lt;li&gt;index 特征只有 128 维并使用低精度计算。&lt;/li&gt;
&lt;li&gt;不执行全长度 Value 聚合。&lt;/li&gt;
&lt;li&gt;128-head、512 维主 Attention 只处理 top-1024。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;从 &lt;a class="link" href="https://huggingface.co/deepseek-ai/DeepSeek-V4-Pro/blob/main/inference/model.py" target="_blank" rel="noopener"
 &gt;公开推理代码&lt;/a&gt; 看，Indexer 的 Q/K 还会先执行 Hadamard rotation，再模拟 FP4 量化；主 KV 的 448 个非 RoPE 维度使用低精度存储，而位置敏感的 64 个 RoPE 维度保留 BF16。因此，V4 同时利用候选压缩和混合精度降低计算与存储成本。&lt;/p&gt;
&lt;h3 id="74-压缩-c-作为共享-keyvalue"&gt;7.4 压缩 C 作为共享 Key/Value
&lt;/h3&gt;&lt;p&gt;主压缩项经过 RMSNorm，并在最后 64 维应用 RoPE。随后不再分别展开 K 和 V，而是直接令：&lt;/p&gt;
$$K_i=V_i=C_i^{\text{Comp}}$$&lt;p&gt;对于主 Query head $a$：&lt;/p&gt;
$$z_{t,a,i} = \frac{q_{t,a}^\mathsf TC_i^{\text{Comp}}}{\sqrt{512}}$$$$o_{t,a} = \sum_i\operatorname{softmax}_i(z_{t,a,i})C_i^{\text{Comp}}$$&lt;p&gt;官方稀疏内核执行以下运算：&lt;/p&gt;
$$QC^\mathsf T \rightarrow\operatorname{softmax} \rightarrow\operatorname{softmax}(QC^\mathsf T)C$$&lt;p&gt;同一个 $C$ 在点积阶段充当 Key，在加权求和阶段充当 Value。&lt;/p&gt;
&lt;p&gt;下面是 &lt;a class="link" href="https://huggingface.co/deepseek-ai/DeepSeek-V4-Pro/blob/main/inference/kernel.py" target="_blank" rel="noopener"
 &gt;官方 TileLang kernel&lt;/a&gt; 的数学等价简化。生产内核使用在线 softmax，不显式物化完整 Attention map：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# selected_kv: 对每个 Query gather 后的 [top-k + window, 512]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;logits&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;q&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt; &lt;span class="n"&gt;selected_kv&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;transpose&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="n"&gt;sqrt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;512&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;weights&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;softmax_with_attention_sink&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;logits&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Value 聚合使用同一个 selected_kv&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;out&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;weights&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt; &lt;span class="n"&gt;selected_kv&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;这里的 attention sink 是每个 head 一个可学习标量。它只在 softmax 分母中增加一项，不提供 Value：&lt;/p&gt;
$$\alpha_{t,h,j} = \frac{\exp(z_{t,h,j})} {\sum_k\exp(z_{t,h,k})+\exp(z'_h)}$$&lt;p&gt;该 sink 项使实际 KV 权重之和可以小于 1，从而允许 Attention 输出的幅值由模型自适应调节。&lt;/p&gt;
&lt;p&gt;V4-Pro 得到 128 个 512 维 head 输出后，并不直接使用一个巨大的 $65536\to7168$ 投影。它把 128 个 heads 分成 16 组，每组 8 个 heads：&lt;/p&gt;
$$128\times512 \rightarrow 16\times4096 \rightarrow 16\times1024 \rightarrow 7168$$&lt;p&gt;中间的 $4096\to1024$ 是每组独立的低秩输出投影，对应配置中的 &lt;strong&gt;o_groups=16&lt;/strong&gt; 和 &lt;strong&gt;o_lora_rank=1024&lt;/strong&gt;。&lt;/p&gt;
&lt;h3 id="75-kv-序列压缩与输出序列长度"&gt;7.5 KV 序列压缩与输出序列长度
&lt;/h3&gt;&lt;p&gt;该结构不包含序列上采样操作。被压缩的是 Key/Value 轴，而 Query 轴始终为 $L$：&lt;/p&gt;
$$Q\in\mathbb R^{L\times d}, \qquad K,V\in\mathbb R^{(L/4)\times d}$$&lt;p&gt;为单独说明 Query 轴与 KV 轴的维度关系，暂时忽略 causal mask、top-$k$ 和滑动窗口；若主分支对全部压缩项计算 Attention，其矩阵形状为：&lt;/p&gt;
$$P\in\mathbb R^{L\times(L/4)}$$&lt;p&gt;因此：&lt;/p&gt;
$$\underbrace{[L,L/4]}_P \times \underbrace{[L/4,d]}_V = \underbrace{[L,d]}_O$$&lt;p&gt;矩阵乘法保留 Attention map 的 Query 轴，因此输出 token 数量仍为 $L$。&lt;/p&gt;
&lt;p&gt;CSA 实际不会计算完整主 Attention map。经过 top-$k$ 和滑动窗口后，每个 Query 的主 Attention 近似为：&lt;/p&gt;
$$[k+128]\times d$$&lt;p&gt;整个 Prefill 输出仍然是：&lt;/p&gt;
$$O\in\mathbb R^{L\times d}$$&lt;h3 id="76-原始-kv-与压缩-kv-的联合-attention"&gt;7.6 原始 KV 与压缩 KV 的联合 Attention
&lt;/h3&gt;&lt;p&gt;对于 Query $t$，最终候选集合是：&lt;/p&gt;
$$\mathcal M_t = \underbrace{\{R_{t-127},\ldots,R_t\}}_{\text{最近原始 KV}} \cup \underbrace{\{C_{i_1}^{\text{Comp}},\ldots,C_{i_k}^{\text{Comp}}\}}_{\text{长距离压缩 KV}}$$&lt;p&gt;二者均为 512 维，并在同一个 softmax 中归一化：&lt;/p&gt;
$$\alpha_{t,a,j} = \operatorname{softmax}_j \left(\frac{q_{t,a}^\mathsf TM_j}{\sqrt{512}}\right)$$&lt;p&gt;两类 KV 的统计分布和位置粒度不同。V4 通过以下设计使其可以联合参与计算：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;原始 KV 和压缩 KV 使用不同的可学习投影，两套投影在相同的 Query 分布和语言模型目标下联合训练。&lt;/li&gt;
&lt;li&gt;两者都做 RMSNorm，使点积尺度可比较。&lt;/li&gt;
&lt;li&gt;两者都有相同的 448 维内容通道和 64 维 RoPE 通道。&lt;/li&gt;
&lt;li&gt;原始窗口保留局部 token 级信息，压缩 KV 提供长距离上下文表示。&lt;/li&gt;
&lt;li&gt;压缩和主 Attention 端到端联合训练。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;压缩仍会引入损失：压缩条目的位置粒度更粗，多个原始 token 的信息被合并，重叠压缩与滑动窗口之间也可能存在信息重复。&lt;/p&gt;
&lt;h3 id="77-v4-value-分支的部分-rope-与输出逆旋转"&gt;7.7 V4 Value 分支的部分 RoPE 与输出逆旋转
&lt;/h3&gt;&lt;p&gt;V4 使用 $K=V=C$，因此对 C 的最后 64 维旋转后，Value 也不可避免地带有绝对位置旋转：&lt;/p&gt;
$$o_t^R = \sum_i\alpha_{t,i}R_{p_i}c_i^R$$&lt;p&gt;V4 在求和后按当前 Query 位置做逆旋转：&lt;/p&gt;
$$R_{-t}o_t^R = \sum_i\alpha_{t,i}R_{p_i-t}c_i^R$$&lt;p&gt;这样输出携带的是来源位置相对于 Query 的距离，而不是混杂的绝对旋转坐标。官方实现只对最后 64 维执行这一操作，其余 448 维保持内容坐标不变。&lt;/p&gt;
&lt;p&gt;在 &lt;a class="link" href="https://huggingface.co/deepseek-ai/DeepSeek-V4-Pro/blob/main/inference/model.py" target="_blank" rel="noopener"
 &gt;model.py&lt;/a&gt; 中，该操作对应以下调用：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;apply_rotary_emb&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;output&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;...&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;64&lt;/span&gt;&lt;span class="p"&gt;:],&lt;/span&gt; &lt;span class="n"&gt;query_position&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;inverse&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="78-hca-的-1281-压缩与稠密-attention"&gt;7.8 HCA 的 128:1 压缩与稠密 Attention
&lt;/h3&gt;&lt;p&gt;&lt;img alt="DeepSeek-V4 HCA 核心架构" class="gallery-image" data-flex-basis="395px" data-flex-grow="164" height="363" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://actypedef.ink/p/deepseek-sparse-attention-kv-cache/assets/deepseek-v4-figure-4-hca.png" width="598"&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;图 3：HCA 核心架构。原图为 DeepSeek-V4 Tech Report Figure 4；HCA 对 KV 进行高压缩率聚合，并与滑动窗口 KV 共同参与共享 KV MQA。来源：&lt;a class="link" href="https://arxiv.org/html/2606.19348v1#S2.SS3" target="_blank" rel="noopener"
 &gt;DeepSeek-V4 Technical Report&lt;/a&gt;。&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Heavily Compressed Attention（HCA）使用压缩率 $m'=128$，不使用 Indexer，也不对长期压缩条目执行稀疏选择。&lt;/p&gt;
&lt;p&gt;对于原始隐藏状态：&lt;/p&gt;
$$C=HW^{KV},\qquad Z=HW^Z$$&lt;p&gt;第 $i$ 个 128-token 块内加入可学习位置偏置 $B\in\mathbb R^{128\times512}$，并按特征维度在 128 个位置上做 softmax：&lt;/p&gt;
$$S_{128i:128(i+1)-1} = \operatorname{Softmax}_{\text{token}} \left(Z_{128i:128(i+1)-1}+B\right)$$$$C_i^{\text{Comp}} = \sum_{j=128i}^{128(i+1)-1} S_j\odot C_j$$&lt;p&gt;所以：&lt;/p&gt;
$$C^{\text{Comp}}\in\mathbb R^{(L/128)\times512}$$&lt;p&gt;HCA 不使用重叠块，也没有 Indexer。所有已完成的长期压缩项都会直接参与主 Attention：&lt;/p&gt;
$$\mathcal M_t = \{\text{全部已完成 HCA 压缩项}\} \cup \{\text{最近 128 个原始 KV}\}$$&lt;p&gt;尚未包含完整 128 个 token 的当前块不能提前生成压缩项，否则会引入未来信息。最近 128 个原始 KV 用于覆盖当前未完成块，并保留局部 token 级表示。&lt;/p&gt;
&lt;p&gt;HCA 与 CSA 在官方代码中复用同一个 Compressor 类，只是参数和分支不同。其核心可以简化为：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;span class="lnt"&gt;8
&lt;/span&gt;&lt;span class="lnt"&gt;9
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;ratio&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;128&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;overlap&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;False&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;wkv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;reshape&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;B&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;num_blocks&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;128&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;512&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;gate&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;wgate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;reshape&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;B&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;num_blocks&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;128&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;512&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;gate&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;gate&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;learned_position_bias&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;c_comp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;softmax&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;gate&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;dim&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;token&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dim&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;token&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;c_comp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;rms_norm&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;c_comp&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# [B, L / 128, 512]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;CSA 与 HCA 的实现差异主要体现在压缩参数和候选选择方式：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;CSA：ratio=4、overlap=true、创建 Indexer。&lt;/li&gt;
&lt;li&gt;HCA：ratio=128、overlap=false、把所有压缩项下标交给主 Attention。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="79-csa-与-hca-的区别"&gt;7.9 CSA 与 HCA 的区别
&lt;/h3&gt;&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;&lt;/th&gt;
					&lt;th style="text-align: right"&gt;CSA&lt;/th&gt;
					&lt;th style="text-align: right"&gt;HCA&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;全称&lt;/td&gt;
					&lt;td style="text-align: right"&gt;Compressed Sparse Attention&lt;/td&gt;
					&lt;td style="text-align: right"&gt;Heavily Compressed Attention&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;长期压缩率&lt;/td&gt;
					&lt;td style="text-align: right"&gt;$4:1$&lt;/td&gt;
					&lt;td style="text-align: right"&gt;$128:1$&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;是否重叠压缩&lt;/td&gt;
					&lt;td style="text-align: right"&gt;是&lt;/td&gt;
					&lt;td style="text-align: right"&gt;否&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;是否有 Indexer&lt;/td&gt;
					&lt;td style="text-align: right"&gt;有&lt;/td&gt;
					&lt;td style="text-align: right"&gt;无&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;长期主 Attention&lt;/td&gt;
					&lt;td style="text-align: right"&gt;top-1024 压缩项&lt;/td&gt;
					&lt;td style="text-align: right"&gt;全部压缩项&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;原始窗口&lt;/td&gt;
					&lt;td style="text-align: right"&gt;最近 128 个 token&lt;/td&gt;
					&lt;td style="text-align: right"&gt;最近 128 个 token&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;长距离信息粒度&lt;/td&gt;
					&lt;td style="text-align: right"&gt;较细&lt;/td&gt;
					&lt;td style="text-align: right"&gt;较粗&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;主要误差来源&lt;/td&gt;
					&lt;td style="text-align: right"&gt;Indexer top-k 选择遗漏&lt;/td&gt;
					&lt;td style="text-align: right"&gt;高压缩率造成的信息损失&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;二者交错使用具有互补性：CSA 保留较细粒度的长距离表示，但依赖 top-k 选择；HCA 对全部长期压缩条目执行 Attention，但单个条目的压缩率更高。&lt;/p&gt;
&lt;h3 id="710-从官方代码看-kv-cache-布局"&gt;7.10 从官方代码看 KV Cache 布局
&lt;/h3&gt;&lt;p&gt;&lt;a class="link" href="https://huggingface.co/deepseek-ai/DeepSeek-V4-Pro/blob/main/inference/model.py" target="_blank" rel="noopener"
 &gt;官方实现&lt;/a&gt; 把固定滑动窗口和长期压缩缓存放进同一块主 KV Cache。省略 batch 维后：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;long_term_entries&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;max_seq_len&lt;/span&gt; &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="n"&gt;compress_ratio&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;main_kv_cache&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;zeros&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;window_size&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;long_term_entries&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;512&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 只有 CSA 层额外拥有 Indexer cache&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;compress_ratio&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;index_kv_cache&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;zeros&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;max_seq_len&lt;/span&gt; &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;128&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;因此持久缓存的主要形状为：&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;层类型&lt;/th&gt;
					&lt;th style="text-align: right"&gt;512 维主 KV Cache&lt;/th&gt;
					&lt;th style="text-align: right"&gt;额外 Index cache&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;CSA&lt;/td&gt;
					&lt;td style="text-align: right"&gt;$128+L/4$ 个条目&lt;/td&gt;
					&lt;td style="text-align: right"&gt;$L/4$ 个 128 维条目&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;HCA&lt;/td&gt;
					&lt;td style="text-align: right"&gt;$128+L/128$ 个条目&lt;/td&gt;
					&lt;td style="text-align: right"&gt;无&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;实际实现还需要保存不足 4 或 128 个 token 的未完成压缩块状态。它们是固定大小的 state cache，不会随完整上下文长度线性增长。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="8-以-100-万-token-为例估算整体开销"&gt;8. 以 100 万 token 为例估算整体开销
&lt;/h2&gt;&lt;p&gt;设上下文长度：&lt;/p&gt;
$$L=1{,}000{,}000$$&lt;h3 id="81-dsa"&gt;8.1 DSA
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;主 MLA Cache 仍然约有 100 万个 token 位置。&lt;/li&gt;
&lt;li&gt;Indexer 对约 100 万个低维 key 计算相关性分数。&lt;/li&gt;
&lt;li&gt;主 Attention 只读取 top-2048。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="82-csa"&gt;8.2 CSA
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;主长期 KV：约 $1{,}000{,}000/4=250{,}000$ 个 512 维压缩项。&lt;/li&gt;
&lt;li&gt;Index cache：约 250,000 个 128 维压缩 key。&lt;/li&gt;
&lt;li&gt;Indexer 对这 250,000 个低维 key 计算相关性分数。&lt;/li&gt;
&lt;li&gt;主 Attention 读取 top-1024 压缩项，加最近 128 个原始项。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="83-hca"&gt;8.3 HCA
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;主长期 KV：约 $1{,}000{,}000/128\approx7{,}812$ 个 512 维压缩项。&lt;/li&gt;
&lt;li&gt;不需要 Indexer。&lt;/li&gt;
&lt;li&gt;主 Attention 读取全部约 7,812 个压缩项，加最近 128 个原始项。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;三者的差异在于长期缓存条目数与主 Attention 条目数：DSA 保留长度为 $L$ 的主 Cache；CSA 将长期 Cache 压缩至 $L/4$ 后执行稀疏选择；HCA 将长期 Cache 压缩至 $L/128$ 后对全部压缩条目计算 Attention。&lt;/p&gt;
&lt;p&gt;若只考虑长期主 KV 的平均元素数，不计固定窗口、未完成块状态、量化格式和 Index cache：&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;结构&lt;/th&gt;
					&lt;th style="text-align: right"&gt;每个原始 token 对应的长期主 KV 元素数&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;V3 MLA&lt;/td&gt;
					&lt;td style="text-align: right"&gt;576&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;V4 CSA&lt;/td&gt;
					&lt;td style="text-align: right"&gt;$512/4=128$&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;V4 HCA&lt;/td&gt;
					&lt;td style="text-align: right"&gt;$512/128=4$&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;实际 V4 在不同层交错使用 CSA/HCA，因此模型整体指标需要根据两类层的配置加权计算。&lt;/p&gt;
&lt;h3 id="84-复杂度近似"&gt;8.4 复杂度近似
&lt;/h3&gt;&lt;p&gt;设：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$C_I$：低维 Indexer 对一个候选打分的成本。&lt;/li&gt;
&lt;li&gt;$C_M$：主 Attention 对一个候选执行多头打分和 Value 聚合的成本。&lt;/li&gt;
&lt;li&gt;$W=128$：原始滑动窗口。&lt;/li&gt;
&lt;li&gt;$k=1024$：V4-Pro CSA 的 top-k。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Decode 时可近似写成：&lt;/p&gt;
$$\text{CSA Decode} \approx \frac{L}{4}C_I+(k+W)C_M$$$$\text{HCA Decode} \approx \left(\frac{L}{128}+W\right)C_M$$&lt;p&gt;Prefill 时则近似为：&lt;/p&gt;
$$\text{CSA Prefill} \approx \frac{L^2}{4}C_I+L(k+W)C_M$$$$\text{HCA Prefill} \approx \left(\frac{L^2}{128}+LW\right)C_M$$&lt;p&gt;这些式子用于表示 token 维度的变化，没有计入 causal 三角形的 $1/2$ 系数、head 数、特征维度、量化精度、分块、通信、访存和 kernel 融合。实际性能还取决于这些实现因素。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="9-机制演进与统一比较"&gt;9. 机制演进与统一比较
&lt;/h2&gt;&lt;p&gt;DeepSeek 系列的相关结构可以按优化对象归纳如下：&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;结构&lt;/th&gt;
					&lt;th&gt;主要优化对象&lt;/th&gt;
					&lt;th style="text-align: right"&gt;长期 KV 条目数&lt;/th&gt;
					&lt;th style="text-align: right"&gt;主 Attention 条目数&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;MLA&lt;/td&gt;
					&lt;td&gt;每个 token 的 KV 特征维度&lt;/td&gt;
					&lt;td style="text-align: right"&gt;$L$&lt;/td&gt;
					&lt;td style="text-align: right"&gt;$L$&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;DSA&lt;/td&gt;
					&lt;td&gt;主 Attention 的候选位置数&lt;/td&gt;
					&lt;td style="text-align: right"&gt;$L$&lt;/td&gt;
					&lt;td style="text-align: right"&gt;$k$&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;CSA&lt;/td&gt;
					&lt;td&gt;KV token 轴与主 Attention 候选数&lt;/td&gt;
					&lt;td style="text-align: right"&gt;$L/4$&lt;/td&gt;
					&lt;td style="text-align: right"&gt;$k+W$&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;HCA&lt;/td&gt;
					&lt;td&gt;KV token 轴&lt;/td&gt;
					&lt;td style="text-align: right"&gt;$L/128$&lt;/td&gt;
					&lt;td style="text-align: right"&gt;$L/128+W$&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;在每个 V4 Attention 层中，输入与输出隐藏状态的序列长度始终为 $L$。CSA/HCA 压缩的是该层 Key/Value 的 token 轴，而不是 Transformer 主干的隐藏状态序列。CSA 的 512 维主压缩 KV 和 128 维 index key 由独立压缩器生成；HCA 则仅维护 512 维主压缩 KV。两种结构都将最近 128 个原始 KV 与长期压缩 KV 联合用于主 Attention。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="10-容易混淆的结论"&gt;10. 容易混淆的结论
&lt;/h2&gt;&lt;h3 id="误区-1gqamqamla-会减少-token-数量"&gt;误区 1：GQA/MQA/MLA 会减少 token 数量
&lt;/h3&gt;&lt;p&gt;通常不会。它们主要减少每个 token 的 KV heads 或特征维度。&lt;/p&gt;
&lt;h3 id="误区-2sparse-attention-一定减少-kv-cache-长度"&gt;误区 2：Sparse Attention 一定减少 KV Cache 长度
&lt;/h3&gt;&lt;p&gt;不一定。DSA 只减少主 Attention 读取的 token，主 MLA Cache 仍为 $L$。CSA/HCA 将长期 Cache 压缩到 $L/4$ 或 $L/128$。&lt;/p&gt;
&lt;h3 id="误区-3indexer-等同于另一遍完整-attention"&gt;误区 3：Indexer 等同于另一遍完整 Attention
&lt;/h3&gt;&lt;p&gt;Indexer 执行全长度低维 QK 打分，但不执行完整高维主 Attention 的 Value 聚合。&lt;/p&gt;
&lt;h3 id="误区-4kv-压成-输出也只剩"&gt;误区 4：KV 压成 $L/4$，输出也只剩 $L/4$
&lt;/h3&gt;&lt;p&gt;Query 仍有 $L$ 个，Attention map 是 $L\times L/4$，因此输出仍有 $L$ 行。&lt;/p&gt;
&lt;h3 id="误区-5csa-的两套重叠-c-会产生两套-cache"&gt;误区 5：CSA 的两套重叠 C 会产生两套 Cache
&lt;/h3&gt;&lt;p&gt;两套 C 仅是压缩阶段的中间投影，最终产生约 $L/4$ 个压缩 KV。&lt;/p&gt;
&lt;h3 id="误区-6压缩块和原始-token-不能放进同一个-softmax"&gt;误区 6：压缩块和原始 token 不能放进同一个 softmax
&lt;/h3&gt;&lt;p&gt;两类表示可以联合计算，但需要具有相同维度和可比较的数值尺度。V4 使用独立投影、RMSNorm、共同的部分 RoPE 和端到端训练完成对齐。&lt;/p&gt;
&lt;h3 id="误区-7rope-绝对不能用于-v"&gt;误区 7：RoPE 绝对不能用于 V
&lt;/h3&gt;&lt;p&gt;标准 Attention 为保持统一的 Value 特征坐标，通常只旋转 Q、K。V4 因为 $K=V$，V 的部分维度也带有旋转，因此在输出端使用逆 RoPE 转换为相对位置表示。&lt;/p&gt;
&lt;h3 id="误区-8-意味着-key-和-value-的作用相同"&gt;误区 8：$K=V=C$ 意味着 Key 和 Value 的作用相同
&lt;/h3&gt;&lt;p&gt;$K=V=C$ 表示两种代数角色复用同一个向量。C 在点积中作为 Key，在加权求和中作为 Value；两种作用仍由其在公式中的位置决定。&lt;/p&gt;
&lt;h3 id="误区-9csahca-只在模型入口压缩一次"&gt;误区 9：CSA/HCA 只在模型入口压缩一次
&lt;/h3&gt;&lt;p&gt;每个 Attention 层都根据本层隐藏状态生成原始和压缩 KV。层间隐藏序列始终保留 $L$ 个位置，压缩对象是各层独立的 KV 序列。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="11-总结"&gt;11. 总结
&lt;/h2&gt;&lt;p&gt;核心结论如下：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;KV Cache 保存的是每层历史 K/V，避免 Decode 时重复计算。&lt;/li&gt;
&lt;li&gt;MHA/GQA/MQA/MLA 主要改变每个 token 的特征存储，不直接减少 token 数量。&lt;/li&gt;
&lt;li&gt;DSA 用低维 Indexer 从完整历史中选择 top-$k$，节省主 Attention 计算和访存，但不缩短主 Cache。&lt;/li&gt;
&lt;li&gt;DeepSeek-V4 进一步压缩 token 轴：CSA 以 $4:1$ 压缩后执行稀疏选择；HCA 以 $128:1$ 压缩后对全部压缩条目计算 Attention；二者都使用 128-token 原始窗口保留局部信息。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;MLA 主要压缩单个 token 的 KV 特征维度；DSA 在不缩短主 KV Cache 的情况下减少主 Attention 候选；CSA/HCA 则进一步减少长期 KV Cache 在 token 轴上的条目数量。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="参考资料"&gt;参考资料
&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;&lt;a class="link" href="https://arxiv.org/html/2606.19348v1#S2.SS3" target="_blank" rel="noopener"
 &gt;DeepSeek-V4 Technical Report&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://huggingface.co/deepseek-ai/DeepSeek-V4-Pro/blob/main/inference/config.json" target="_blank" rel="noopener"
 &gt;DeepSeek-V4-Pro 官方配置&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://huggingface.co/deepseek-ai/DeepSeek-V4-Pro/blob/main/inference/model.py" target="_blank" rel="noopener"
 &gt;DeepSeek-V4-Pro 官方推理实现&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://huggingface.co/deepseek-ai/DeepSeek-V4-Pro/blob/main/inference/kernel.py" target="_blank" rel="noopener"
 &gt;DeepSeek-V4-Pro Sparse Attention Kernel&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://arxiv.org/html/2512.02556v1#S2.SS1" target="_blank" rel="noopener"
 &gt;DeepSeek-V3.2 Technical Report&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://arxiv.org/html/2412.19437#S2.SS1.SSS1" target="_blank" rel="noopener"
 &gt;DeepSeek-V3 Technical Report&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://huggingface.co/deepseek-ai/DeepSeek-V3/blob/main/config.json" target="_blank" rel="noopener"
 &gt;DeepSeek-V3 官方配置&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://arxiv.org/html/2405.04434#S2.SS1" target="_blank" rel="noopener"
 &gt;DeepSeek-V2 / MLA Technical Report&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://arxiv.org/abs/2104.09864" target="_blank" rel="noopener"
 &gt;RoFormer: Enhanced Transformer with Rotary Position Embedding&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/openai/gpt-2/blob/master/src/model.py" target="_blank" rel="noopener"
 &gt;GPT-2 官方实现&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://huggingface.co/Qwen/Qwen2.5-7B/blob/main/config.json" target="_blank" rel="noopener"
 &gt;Qwen2.5-7B 配置&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://huggingface.co/tiiuae/falcon-7b/blob/main/config.json" target="_blank" rel="noopener"
 &gt;Falcon-7B 配置&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</description></item></channel></rss>