
〇、一句话本质KV cache 用显存换计算把「历史 token 的 K/V」存起来自回归生成时只算新 token避免 O(n²) 的冗余重算。往下读你会看到这句话的每个词都不是随口说的为什么缓存的是 K/V 而不是别的、为什么是「历史 token」、为什么换来的是「计算」而不是别的。先交代背景长上下文推理128K、1M context是当前大模型的核心战场而 KV cache 的显存和带宽正是长上下文的头号瓶颈。要搞懂 KV cache得先搞懂它缓存的「KV」是什么、从哪来——这就要回到 Transformer 的起源从 Attention 讲起。一、Attention 是怎么来的从 RNN 的困境到 Q/K/V1.1 起源RNN 的兴衰1.1.1 RNN 是什么一个循环的「记忆」单元在 Transformer2017之前处理序列数据文本、语音、时间序列的主力是RNN循环神经网络Recurrent Neural Network。它的思想可以追溯到 1980 年代的 Hopfield 网络、1990 年代的 Elman 网络到了 2010 年代它成了 NLP自然语言处理的绝对主力——机器翻译、语音识别、语言模型几乎都用 RNN 及其变体LSTM、GRU。RNN 的核心思想非常朴素**序列是有顺序的前面的信息会影响后面的理解所以需要一个「记忆」把前面的信息带到后面。**这个「记忆」就是隐藏状态hidden stateh它每一步都在更新h_t f(W·x_t U·h_{t-1})读这个公式当前步的隐藏状态 h_t融合了「当前输入 x_t」和「上一步的记忆 h_{t-1}」——这就是 RNN 的「记忆」机制也是它名字里「循环Recurrent」的由来。1.1.2 RNN 的优势**能处理变长序列**文本、语音长度不固定RNN 天生适合。**参数共享**不管序列多长每一步都用同一套 W、U——参数量不随序列长度增长非常省参数。理论上的「无限记忆」隐藏状态 h 理论上能把任意长的历史信息「压缩」进去让后面的 token 感知到前面的内容。1.1.3 RNN 的两个致命问题RNN 的优势很大但两个致命问题最终让它被 Transformer 取代**问题① 串行无法并行**必须一个 token 接一个 token 地算因为 h_t 依赖 h_{t-1}GPU 的并行算力用不上训练极慢。**问题② 长距离依赖丢失梯度消失**训练时反向传播的梯度要「连乘」一路上传每个因子都小于 1 时梯度指数级衰减——传到序列开头时几乎为 0远处的信息「训练不到」。**这两个问题的本质**问题①是「计算效率」问题串行问题②是「信息传递」问题长距离衰减。而后面要讲的 Attention正是同时解决这两个问题的答案——这为 1.2 的「Attention 诞生」埋下了伏笔。1.2 转折Attention 的诞生2014-20152014 年Bahdanau 等人提出Attention 机制用于机器翻译的 Seq2Seq核心是一个颠覆性的想法与其让解码的每一步「只靠最后一步的隐藏状态」RNN 的做法不如让每一步「直接看到输入的所有位置」自己决定该关注哪里。这个「直接看全局」的能力一举解决了 RNN 的「长距离依赖丢失」——不管距离多远注意力都能一步直达。1.3 集大成Transformer 与自注意力20172017 年Google 的论文《Attention Is All You Need》把这件事推向极致完全抛弃 RNN只用 Attention。关键创新是「自注意力Self-Attention」让序列内部的每个 token都和其他所有 token 建立「注意力关系」——一个 token 的含义由它「关注」哪些其他 token 决定。1.4 Q/K/V怎么算、为什么这么算1.4.1 计算embedding 和三个投影矩阵Q/K/V 的计算分两步先把「文字」变成「向量」embedding再用三个矩阵投影成 Q/K/V。**第一步**token 变向量embedding——文本不能直接算要先变成数字向量**分词tokenize**把文本切成 token“The cat” → “The”、“cat”。**映射 id**每个 token 查词典得到一个编号如 “The” → #1001。**查 embedding 表**用 id 到「词嵌入矩阵」词表大小 × d_model里查一行得到这个 token 的向量 x如 4096 维。关于「映射 id」这个 id 不是随便编的它来自「词表vocabulary」而词表是分词器用 **BPEByte Pair Encoding字节对编码**算法从海量语料里「长」出来的BPE 的思路从「字符」开始反复统计并合并「最高频的相邻字符对」“t”“h→th”“th”“e→the”…直到词表达到目标大小如 5 万。结果是「高频词」是完整词“the”、“cat”「低频词」被拆成子词“unhappy→un”“happy”。好处是既能处理常见词又不会「不认识」生僻词OOV 问题。embedding 表怎么训练——它分两个时代**早期2013 Word2Vec**专门训练词向量——用「上下文预测词」CBOW或「词预测上下文」Skip-gram让「出现在相似上下文里的词」向量相近。这就是「分布式假设」distributional hypothesis语义相近的词上下文也相似。**现代 LLM**embedding 表不再是单独训练而是「整个模型的一部分」随整个模型用「预测下一个 token」这个任务一起训练。反向传播时embedding 表和其他参数一起更新最终学会「把语义编码进向量」。一句话embedding 表一开始是随机的靠训练「逼」它把语义相近的词放到相近的位置。**第二步**向量投影成 Q/K/V——拿到向量 x 后用三个训练出来的矩阵 W_Q、W_K、W_V 做「矩阵乘法」线性变换Q x · W_Q K x · W_K V x · W_V**三个矩阵怎么来的**W_Q、W_K、W_V 都是 d_model × d_model 的矩阵和 embedding 表一样「随机初始化 训练更新」。投影x · W_Q本质是一次「线性变换」——把 x 从「原始语义空间」变换到「查询空间 / 键空间 / 值空间」。**一句话总结**embedding 把「字」变成「语义向量」三个矩阵再把「语义向量」投影成「提问(Q)、被匹配(K)、被取值(V)」三个角色。1.4.2 为什么是「三个不同的投影」关键点一个 token 同时扮演三个角色而这三个角色需要「不同的视角」作为Q它是「提问者」——「我想找什么信息」。作为K它是「被匹配的标签」——「我能被什么信息找到」。作为V它是「被取走的内容」——「我被找到后能贡献什么」。因为「提问」「被提问」「被取值」是三个不同的角度所以不能用同一个投影必须用三个不同的 W_Q、W_K、W_V 分别投影。类比同一个人在图书馆里「找书」时是读者Q被检索系统「当标签」时是书K被借走「当内容」时是书的内容V——同一个对象三个不同的角色所以要三个不同的投影。1.4.3 语义来源为什么叫「查询-键-值」Q/K/V 这个名字不是随便起的它来自信息检索Information Retrieval和数据库的经典「查询-键-值Query-Key-Value」范式Query查询你发起的「查询」。Key键数据里每条记录的「索引键」。Value值匹配到键之后取回的「值」。注意力计算三步① 相关度score Q·Kᵀ② 归一化 softmax③ 加权求和output softmax(QKᵀ)·V。关键观察为第二章埋下伏笔K 和 V 是「每个 token 的属性」——只取决于这个 token 本身x 和 W_K、W_V 都是这个 token 的一旦算出来就固定不变而 Q 是「当前这一步的提问」——每一步的「当前位置」不同Q 就不同。这个区别就是后面「为什么缓存 K/V、不缓存 Q」的根源。二、Attention 的完整流程 自回归第一章讲了 Q/K/V 怎么算这一章把它们串起来——先看 attention 的完整流程再看自回归怎么反复用它这会自然引出「因果掩码」和「KV cache」。2.1 Attention 的完整流程回顾一个 token 的 attention 输出分三步算**算相关度**score Q · Kᵀ当前 token 的 Q 和所有 token 的 K 点积。**归一化**softmax 把分数变成概率谁更该被关注。**加权求和**output 概率 · V按关注度取走各 token 的内容。注意这张图里的三个关键点——它们直接决定后面 KV cache 的设计步骤① 需要「当前 Q」「所有历史的 K」步骤③ 需要「所有历史的 V」。而Q 每步都变当前提问K 和 V 是历史 token 的属性固定不变。2.2 自回归一次一个 token反复跑 attentionLLM 是「自回归」生成一次只预测一个 token然后把新 token 拼回输入再预测下一个。生成 “Time flies fast” 的过程是输入 “Time” → 生成 “flies”输入 “Time flies” → 生成 “fast”输入 “Time flies fast” → 生成下一个 token关键每一步都要跑一遍完整的 attention上面那三步。而不做优化的话每一步都要把「前面所有 token 的 K/V 重新算一遍」——因为步骤①和③需要所有历史的 K 和 V。序列越长重复计算越多总计算量是O(n²)。这就是生成长文本时「越到后面越慢」的原因。一个几乎人人都会卡住的疑问预测 “fast” 时Q 是谁的答案Q 是 “flies” 的最后一个已生成 token不是 “fast” 的——“fast” 还没预测出来它没有 Q。规律是预测第 N 个词时Q 来自第 N-1 个词最后一个已生成的K/V 来自前 N-1 个词全部历史。“fast” 的 Q要等「预测 fast 的下一个词」时才出现。类比读填空题 “Time flies ____”你Q站在 “flies” 后面眼睛扫过 “Time”、“flies”用 Q 查 K/V然后猜空格填什么预测 “fast”。空格里的词还没出现它不可能「提问」只能「被预测出来」。2.3 因果掩码 → KV cache 的诞生但这里有一个关键洞察来自「因果掩码」causal mask自回归生成时当前 token 只能看到它前面的 token不能看未来。这意味着一个历史 token 的 K 和 V不会因为它后面又生成了新 token 而改变。既然历史 token 的 K/V 是「一成不变」的那它们「算一次、永久复用」就是天经地义的——这就是 KV cache 成立的逻辑基础。数据支撑无缓存 vs 有缓存的实测约 5 倍速度差小模型上无缓存 13.7s vs 有缓存 2.8s。下一章第三章就正式讲 KV cache 具体怎么「缓存 K/V、不缓存 Q」。2.4 输出向量怎么变回 tokenlm_head前面讲的是「token 怎么变成向量」embedding这里补上闭环的另一半——最后输出的向量怎么变回预测的 token。答案不是「查表反查」而是经过lm_head语言模型头——一个线性层把 512 维向量投影到「词表大小」维再 softmax 取最大关键一步是logits h · W_lmh 是 512 维W_lm 是「512 × 词表大小」的矩阵乘出来是「词表大小」维——logits 的每个维度就对应一个 token 的得分。softmax 之后变成概率取最大或采样就是预测的 token。为什么像「查表反查」很多模型的 lm_head 权重 embedding 表的转置权重共享tie weights。所以「输入查 embedding 表」和「输出乘 lm_head」用的是同一个矩阵 E方向相反输入token id → 取 E 的第 id 行 → 向量查表输出向量 → 乘 Eᵀ → 词表维分数 → 取最大 → token id反查直觉一个 token 的 embedding 就是「这个 token 的语义坐标」最后一层的 h 是「当前要预测内容的语义坐标」。h 和某个 token 的 embedding 越「近」点积越大就越可能是这个 token——所以「取点积最大」「找和 h 最像的 token」。三、KV Cache 原理缓存什么、不缓存什么基于上面的洞察KV cache 的做法是**缓存 K 和 V**每个历史 token 的 K/V 算一次存进显存后面直接复用。**不缓存 Q**因为「预测下一个 token」只需要「当前 token 的 Q」——历史的 Q 只服务于「当时那一步」后续步骤用不上。于是推理被清晰分成两个阶段Prefill预填充一次性并行处理整个 prompt 的所有 token算它们的 K/V生成第一个 token。算力密集决定 TTFT首 token 时间。Decode解码从第二个 token 起每步只算「当前新 token」的 Q/K/V把新 K/V 追加concat到缓存用新 Q 和「全部缓存的 K/V」算注意力生成下一个 token。串行逐 token 生成。关键Decode 阶段是「带宽敏感」不是「算力敏感」——每步只算一个新 token算力需求极小但要「读」全部的 KV cache数据量巨大。这一句是理解后面「存储层级」和「KV cache 优化」的关键。四、显存代价KV Cache 到底占多大前置先懂 Transformer 和 Attention 的本质基于《Attention Is All You Need》先看整张全景图——从输入到输出的完整结构注意「× N 层」和「多头」两个关键概念KV cache 的「KV」来自 attention而 attention 的本质是论文里的核心公式——缩放点积注意力Scaled Dot-Product AttentionAttention(Q, K, V) softmax( Q·Kᵀ / √d_k ) · V读这个公式当前 token 的 Q 和所有历史 token 的 K 做点积算相关度→ 除以 √d_k 缩放 → softmax 归一化 → 加权求和 V。这就是 attention 的全部。而「Q 每步变、K/V 是历史 token 的属性」这个性质就藏在这个公式里——它是 KV cache 成立的根源。再看 Transformer 的「一层」长什么样论文里 encoder/decoder 每层都是这个结构这一层 Multi-Head Attention产生 K/V FFN前馈网络然后堆叠 N 层。每层有独立的 W_Q / W_K / W_V所以每层的 K/V 都不同——这就是「KV cache 要 × 层数」的根源。为什么需要「多层」堆叠因为一层 attention 只能做「一次浅层的信息混合」softmax(QKᵀ)·V 只是一次加权组合只能学到「词与词」的直接关系。要表达「深层、组合、抽象的语义」必须堆叠多层让信息逐层提炼第 1 层学到词与词的局部关系“cat” 和 “sat” 相关。第 2 层在上一层基础上学到短语结构“the mat” 是一个整体。第 3 层学到句法关系主语、谓语、宾语。更高层学到全局语义整句话描述了一个场景。这跟 CNN 堆深度学「边缘 → 纹理 → 物体」是同一个道理深度 表达能力。而且同样的参数量「堆深」比「加宽」更能表达复杂函数深度神经网络的万能近似。这也解释了为什么「每层都要存 KV」既然信息要逐层提炼每一层都有自己的「中间表示」这一层的 K/V自回归时每层都要复用「自己这层的历史 K/V」——所以 KV cache 要「× 层数」。前置先搞懂「多头注意力」公式才看得懂第 4 章公式里的「层数、KV头数、头维度」都来自 attention 的「多头multi-head」结构。一个 token 的向量不是「一整块」做 attention而是被切成多个「头」每个头独立算自己的 K/V三个关键关系头数 向量切成几个头头维度 hidden ÷ 头数如 4096 ÷ 32 128层数 这样的多头注意力块堆叠了几层。每个「头」都有一份 K/V每份长度 头维度——这就是 KV cache 要「层 × 头 × 维度」铺开的原因。KV cache 是「用显存换计算」代价就是显存。这一章把「大小到底怎么算出来」一步步讲清楚。4.1 公式逐项拆解总 KV cache 大小的公式是KV 2 × batch × 层数 × KV头数 × 头维度 × token数 × 字节/元素每一项的含义2K 和 V 各一份两个都要缓存。batch并发处理的序列数同时服务几个请求。层数模型有多少层每一层都要存自己的 K/V。KV头数每层有多少个 KV 头MHA 头多、GQA 头少。头维度每个头的 K/V 向量的长度。token数序列长度上下文多长。字节/元素精度FP162、FP81、INT40.5。**关于「token 数」它 prompt 的 token 数 已经生成decode出来的 token 数。**KV cache 是「边生成边增长」的——prefill 阶段一次性缓存 prompt 所有 token 的 KVdecode 阶段每生成一个新 token 就追加一个新 token 的 KV。所以序列越长长上下文KV 越大。4.2 为什么和「网络结构」有关先回答一个最常见的疑问为什么每一层都要存一份 KV因为 Transformer 是「多层堆叠」的每一层都有自己独立的一套权重W_Q / W_K / W_V所以每一层的 K/V 是「这一层独有的向量」——第 1 层的 K¹V¹ 和第 2 层的 K²V² 是用不同权重算出来的完全不同。所以自回归时每一层都要缓存「自己这一层的」历史 K/V才能下一步复用——这就是公式里「× 层数」的来历。看公式就明白KV cache 的大小一大半由「网络结构」的四个参数决定——层数、KV头数、头维度、精度。同一个模型结构一旦定了「每个 token 的 KV 大小」就是一个固定常数KV cache 只会随「token 数」线性增长。层数越多→ KV 越大每层都存一份。KV 头越多→ KV 越大MHA 32 头 vs GQA 8 头差 4 倍。头维度越大→ KV 越大hidden 越大头维度越大。精度越高→ KV 越大FP16 2字节 vs INT4 0.5字节差 4 倍。4.3 具体算例Llama2-7B 一步步算Llama2-7B 的网络结构32 层、32 个 KV 头MHA、头维度 128、FP16。一步步算「一个 token 的 KV」先算「一个 token、一层、一个头」的 K 向量128 维 × 2 字节 256 字节。一层有 32 个 KV 头256 × 32 8KB一层、一个 token 的 K。K 和 V 各一份8KB × 2 16KB一层、一个 token 的 KV。32 层16KB × 32 512KB一个 token 的全部 KV。所以 Llama2-7B 每个 token 的 KV cache 512KB。再乘以 token 数4096 tokenbatch1 512KB × 4096 ≈ 2GB。这就是「Llama2-7B 4096 ctx ≈ 2GB」的来历。4.4 MHA vs GQA为什么 GQA 省 8 倍关键在「KV 头数」MHA 每个 Q 头都有独立的 KV 头32 个 Q 头 32 个 KV 头GQA 让多个 Q 头共享一个 KV 头比如 Qwen3 的 32 个 Q 头只配 4 个 KV 头8:1 共享。因为 KV 大小正比于「KV 头数」所以 GQA4 头比 MHA32 头省 8 倍更激进的 MQA只 1 个 KV 头省 32 倍。Llama2-70B 也是 64 头 MHA → 8 头 GQA同样省 8 倍。4.5 长上下文爆炸KV cache 随 token 数线性增长。256K 上下文的模型512KB × 256K 128GB超过单卡显存——这就是 KV cache 优化的核心痛点。五、优化技术全景六个维度围绕「怎么让 KV cache 更小、更快」有六个优化维度每个都对应一个具体痛点**架构层**MHA → MQA → GQA。MQA 所有头共享一套 KVGQA 分组共享折中。核心是「减少 KV 头数量」直接降低显存斜率。量化层KV 从 FP16 → INT8/FP8/FP4内存省 2-4 倍。FP8 比 INT8 更能处理离群值精度损失更小但需硬件支持。**内存管理层**PagedAttentionvLLM把 KV cache 切成固定大小的「页」像虚拟内存分页一样管理解决碎片化提高 GPU 利用率。**计算层**FlashAttentionIO 感知的融合内核避免完整注意力矩阵写回 HBM内存从 O(n²) 降到 O(n)。**驱逐层**StreamingLLMattention sink 滑动窗口、H2O重击 token 驱逐、SnapKV观察窗口压缩——识别「重要 token」保留驱逐「不重要 token」。**层级存储**InfiniGen / InfLLM把「热 KV」放 GPU、冷 KV 卸载到 CPU/存储层级化降低显存。六、实战国内四大开源模型的 attention 与 KV cache 设计6.1 DeepSeekMLA多头潜在注意力DeepSeek 从 V2 起用 MLA是「低秩压缩 KV」路线的代表也是最激进的 KV cache 优化之一。**路线**把「多头 K/V」压缩成「每 token 一个低维潜向量 c^KV」缓存的是潜向量不是完整 K/V。**效果**KV cache 减少 93.3%最大生成吞吐提升 5.76 倍。**三步机制**① 低秩下投影压缩W^DKV② 按需上投影解压W_uk / W_uv③ 解耦 RoPE 矩阵吸收。下面这张图展示了 MLA 的完整流程——「写入时压缩缓存潜向量、读取时解压还原 K/V」**本质**和 GQA「共享 KV 头」不同MLA 是「压缩 KV 内容」——保持多头结构压缩维度。cache 规模相当于「只有 2.25 组的 GQA」但表达能力可超过完整 MHA。会损失 KV 信息吗会但损失的是「冗余」不是「有效信息」——而且压缩是训练学出来的所以实际性能几乎不降甚至更好。**数学上有损**把多头 K/V如 4096 维压缩成潜向量128 维降维必然损失信息。**但性能不降**因为压缩矩阵 W^DKV / W^UK / W^UV 是「训练中一起学的」不是「事后硬压」——模型学会把 KV 的有效信息保留在低维潜向量里、丢掉冗余这是关键区别。**低秩假设**多头 KV 有大量冗余不同头信息重叠有效秩远小于名义维度所以压到低秩只丢冗余、不丢有效信息。**实际结果**MLA 的 KV cache 规模 2.25 组 GQA但表达能力可超过 MHA。6.2 QwenGQA → Gated DeltaNetQwen 走了「从 GQA 到线性注意力」的演进路线两代思路完全不同Qwen3GQA分组查询注意力——核心是「让多个 Q 头共享 KV 头」用「减少 KV 头数」来省 KV cache而 Q 头数不变保持表达能力Qwen3 典型配置32 个 Q 头 / 4 个 KV 头8:1 共享head_dim 128KV ≈ 96KB/token。还加了 QK-Norm对 Q/K 归一化提升训练稳定性。但 GQA 复杂度仍是 O(n²)——它只压缩了 KV 头数没改变「每个新 token 要看所有历史」的本质。Qwen3.5Gated DeltaNet线性注意力——范式级改变不再用 KV cache改用「固定大小的循环状态」核心思想用核函数近似 softmax把「先算所有分数再加权」变成「边读边更新状态」复杂度从 O(n²) 降到 O(n)。Gated DeltaNet 额外加了 delta rule精准更新 自适应门控智能遗忘解决线性注意力的「记忆饱和」问题。拆开理解这个名字Delta Gated**DeltaNet**线性注意力用「固定状态 S」替代「随长度增长的 KV cache」。**Deltadelta rule**更新状态时「先擦旧、再写新」S S - S·k·kᵀ β·k解决线性注意力的「记忆饱和」旧 key 干扰新 key。**Gated门控**用门 β 控制「该更新多少」实现「智能遗忘」——重要的记住、过时的忘掉。状态 S 怎么设计——它是线性注意力的核心一句话S 是一个「固定大小的矩阵」d_k × d_v装「历史 K/V 的累加」用它代替 KV cache。因为 output φ(q)·S 数学上等效于注意力所以不用存每个 token 的 KV只需维护一个 S。代价是「有损压缩」记忆饱和所以需要 delta rule精确更新 门控智能遗忘来补救。为什么它没有「完全解决」KV cache 爆炸大家只学「混合」因为线性注意力本质是**「有损压缩」——把「每个 token 的 KV」压进「一个固定大小的状态 S」状态容量有限长上下文会「记忆饱和」**旧的被新的挤掉。这在「多跳推理」「长距离依赖」上暴露得很明显MiniMax 实测SFT 后超 32K 上下文的多跳推理有严重缺陷。所以它不是「银弹」而是**「用精度换显存」**的权衡——大家的选择是「3:1 混合」75% 线性层省显存 25% 全注意力层保精度而不是「完全替代」Qwen3.5Gated DeltaNet 全注意力3:1Kimi K369 层 KDA 24 层 MLAGLM-5.3KDA 全注意力3:1此外还有两个现实障碍硬件/生态不匹配现有 GPU 和 FlashAttention 都为 softmax 注意力优化线性注意力的「循环状态更新」需要全新 kernel训练更难需要特殊优化器如 Muon。6.3 GLMMHA → MLADSA → KDAGLM 的演进核心是「怎么压缩 KV」。三种算法从三个不同维度压缩 KV逐个讲清楚三个算法的具体算法**MHA多头注意力不压缩**Q/K/V 各切 h 个头每个头独立做 softmax(QKᵀ/√d)·V。每个 token 存「每层 × 每个头」的 K/VKV cache 最大。**MLA多头潜在注意力压维度**① 下投影 c^KV W^DKV·x把 x 压成低维潜向量② 缓存 c^KV而非多头 K/V③ 用时上投影 K WUK·cKV、V WUV·cKV 解压回各头。它压缩的是「维度」——多头 K/V 变成一个潜向量。**DSA动态稀疏注意力压数量**① 计算每个 token 的注意力分数 ② 选 top-K如 2048个最重要的 token ③ 只对这 K 个做完整注意力其余 KV 丢弃。它压缩的是「数量」——全部 token 变成 top-K。DSA 的「选 top-K」发生在哪个阶段答案是 decode 阶段——prefill 阶段照常做稠密注意力不稀疏。这正好呼应前面「prefill 算力敏感、decode 带宽敏感」**Prefill**并行、一次性算所有 prompt token瓶颈是「算力」GPU 能吃饱稀疏省不了多少所以做稠密。**Decode**逐 token、每个都要读全部历史 KV瓶颈是「带宽」选 top-K 只读最相关的 K 个 KV省大量带宽——所以在这里做稀疏。而且 decode 的 top-K 还能「复用」——上一步选的 top-K 和下一步高度相关时间相关性可以「猜 验证 修正」不必每次从头算prefill 没有上一步可复用硬算反而更贵。补充注意力分数怎么算——就是 Q 和 K 的矩阵乘点积score Q·Kᵀ/√d_k当前 token 的 Q 和所有 token 的 K 点积每个 token 一个分数分数越大越相关。DSA 里「算分数选 top-K」那一步用的就是这个。一个重要澄清DSA 省「计算」不省「存储」DSA 是「动态」稀疏——每个 query 选「不同的」top-K所以任何一个 token 的 KV 都可能被某个 query 需要不能「只存一部分」。因此 KV cache 还是全量存DSA 省的是 decode 时的「读取带宽 注意力计算」存储量一点没省。那「存储量」靠谁省靠 MLA。这正是 GLM-5 把两者组合的原因——分工不同**MLA**省「存储」每个 token 的 KV 从多头压成一个潜向量KV cache 变小。**DSA**省「计算」decode 只对 top-K 做注意力省读取带宽和计算。类比MLA 把每本书「压成摘要」书变薄省书架空间存储DSA 找资料时只翻「最相关的 20 本」省翻书时间计算。书一本没少DSA 不省存储书变薄省存储是 MLA 的功劳。DSA 的三步流程重点看「算分数 → 选 top-K → 精确注意力」所以 GLM 的演进逻辑是「一层层加压缩」**GLM-4.7**MHA——不压缩KV 最大≈962KB/token是 Qwen3 的 10 倍。**GLM-5**MLA DSA——两层正交压缩MLA 压「维度」每 token 的 KV 变小DSA 压「数量」只留 top-K token叠加大幅省 KV。**GLM-5.3**KDA——转向线性注意力KDA 是 Kimi 原创GLM 也采用了。6.4 KimiKDA线性注意力 MLA 混合Kimi月之暗面是「长上下文」的代表KDAKimi Delta Attention是它原创的线性注意力**KDA**在 Gated DeltaNet 基础上做「通道级门控」每个特征维度独立控制遗忘率更精确管理有限状态。**核心设计**固定大小循环状态替代 KV cacheDPLR 转移矩阵分块并行 kernel fusiondelta 更新规则。Kimi 的架构是KDA线性 MLA全注意力的 3:1 混合**Kimi LinearK2**3:1 混合3 层 KDA 1 层 MLA48B 总参数 / 3B 激活支持 1M 上下文KV cache 减少 75%解码吞吐提升 6 倍。Kimi K3最新93 层69 层 KDA 24 层 Gated MLAFlashKDA 高性能算子缩放效率是 K2 的 2.5 倍。6.5 四条路线的本质对比6.6 对内存管理的启示重点**线性注意力是「范式级」变化**用「固定大小循环状态」替代「随长度增长的 KV cache」KV cache 不再随上下文线性增长。如果目标模型走线性注意力显存压力大减但存储层级设计要从「KV 分层」转向「循环状态管理」。**但有代价**线性注意力有「记忆饱和」问题MiniMax 实测 32K 上下文多跳推理有缺陷所以最新架构都是「3:1 混合」75% 线性 25% 全注意力折中。MLA 让推理引擎只需缓存「低维潜向量」而不是「多头 K/V」——缓存对象本身变了。**收敛趋势**四家最新架构都趋同「线性注意力混合 稀疏 长上下文」且都在「长上下文」上卷——Kimi K3 稳定支持 1M。推理系统的 KV cache 设计要兼容「混合架构 超长上下文」。学AI大模型的正确顺序千万不要搞错了2026年AI风口已来各行各业的AI渗透肉眼可见超多公司要么转型做AI相关产品要么高薪挖AI技术人才机遇直接摆在眼前有往AI方向发展或者本身有后端编程基础的朋友直接冲AI大模型应用开发转岗超合适就算暂时不打算转岗了解大模型、RAG、Prompt、Agent这些热门概念能上手做简单项目也绝对是求职加分王给大家整理了超全最新的AI大模型应用开发学习清单和资料手把手帮你快速入门学习路线:✅大模型基础认知—大模型核心原理、发展历程、主流模型GPT、文心一言等特点解析✅核心技术模块—RAG检索增强生成、Prompt工程实战、Agent智能体开发逻辑✅开发基础能力—Python进阶、API接口调用、大模型开发框架LangChain等实操✅应用场景开发—智能问答系统、企业知识库、AIGC内容生成工具、行业定制化大模型应用✅项目落地流程—需求拆解、技术选型、模型调优、测试上线、运维迭代✅面试求职冲刺—岗位JD解析、简历AI项目包装、高频面试题汇总、模拟面经以上6大模块看似清晰好上手实则每个部分都有扎实的核心内容需要吃透我把大模型的学习全流程已经整理好了抓住AI时代风口轻松解锁职业新可能希望大家都能把握机遇实现薪资/职业跃迁这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】