真正的性能优化,不是让模型更聪明,而是让它记住得更少

Kevin Di

Hatched by Kevin Di

May 21, 2026

1 min read

86%

0

你以为性能瓶颈在计算,其实常常在记忆

如果一个模型已经足够强,为什么还会慢得难以忍受?更反直觉的是,很多时候拖垮系统的,不是矩阵乘法本身,而是模型为了“记住上下文”而付出的代价。当上下文越长、对话越久、层数越深,系统真正消耗的,往往不是“思考能力”,而是“搬运记忆”的成本。

这带来一个值得重新思考的问题:一个高性能模型,到底应该把算力花在更复杂的推理上,还是花在更聪明地减少记忆负担上?

答案可能比直觉更偏向后者。因为在大模型推理和循环网络加速这两类看似不同的系统里,最有力的优化都指向同一件事:不要把每一层、每一步、每一轮都当成必须重新计算和重新存储的独立事件。真正的效率,来自对“可重复部分”的识别、压缩和复用。


速度的本质,不是做更多,而是少做无谓的事

我们通常把性能理解为“算得快”,但在现代模型里,性能更像是一个三角平衡:计算、显存、通信。很多优化一开始看起来像是在削减精度或简化结构,实际上是在重新分配这三者之间的关系。只要缓存太大,内存带宽就成了瓶颈;只要状态太多,跨层和跨轮次的搬运就开始吞噬吞吐量。

这也是为什么一些看似激进的设计,反而能显著提速。比如把多头注意力中的 K 和 V 共享起来,本质上不是“少算了一点”,而是让每个 token 不必携带一整套重复的记忆副本。再比如采用局部注意力并稀疏地插入全局层,也不是简单地削弱模型,而是承认一个事实:大多数信息交互并不需要每一层都全局同步

可以把这件事想象成一个办公室。传统做法像是每位员工都带着完整档案上下班,任何新任务都先把所有文件复制一遍;更高效的做法是,让整个团队共享少量核心材料,只在少数关键节点召开全员会议。前者看起来“完整”,后者才是真正可扩展。

性能优化的第一原则,不是把每一步做得更强,而是识别哪些步骤其实是在重复处理同一份信息。

这种思路与循环网络里的 persistent 机制非常一致。只有当权重矩阵足够小,且采用合适的数据类型,才值得把它们保留在更近的位置跨迭代复用。换句话说,缓存不是默认权利,而是一种建立在规模边界之上的特权。这条原则放在大模型里同样成立:只有当某种状态真的会被反复访问,且访问成本足够高时,才值得设计复杂的缓存层次。


记忆不是越多越好,关键是“谁来记,记什么,何时记”

真正有意思的地方在于,最有效的优化并不是单纯压缩,而是重新定义记忆的粒度

先看注意力机制。多头注意力的价值在于表达能力,但它的代价也很清楚,每个头都保留独立的 K 和 V,意味着大量重复信息。多查询注意力把多个头的 K 和 V 共享起来,组查询注意力则在完全共享和完全独立之间取折中。更进一步的低秩压缩,本质上是在问:这份记忆需要原样保存吗,还是只要保留能够恢复它的骨架就够了?

这已经不是单纯的工程技巧,而是一种认知上的转变。传统设计默认每个层、每个头都必须拥有独立记忆,好像能力与独占存储绑定。但现实里,很多层并不是在“新增信息”,而是在对已有信息做不同角度的重述、筛选和传播。于是,共享记忆并不一定削弱智能,反而可能暴露出智能真正需要的东西:可复用的结构,而不是冗余的副本

再看跨层共享。这一类设计更加激进,因为它不是在同层内部做压缩,而是直接承认相邻层之间存在很强的状态连续性。也就是说,层与层之间未必都需要一套全新的中间结果。某些情况下,上一层的记忆已经足够接近下一层的需求,重复生成只是在浪费带宽。

这让我想到一种更普遍的系统观:层并不是孤立的计算盒子,而是同一条信息流上的不同压缩阶段。如果前一阶段已经形成了足够稳定的表示,后一阶段就不该重新把它展开成全量状态再压一次。优秀系统设计的关键,不是强迫每一层都“完整工作”,而是让不同层承担不同的信息角色。


长对话的真正敌人,不是长度,而是“每轮都从零开始”

最值得玩味的是跨轮次缓存。长对话场景里,瓶颈不只是单次上下文太长,而是每一轮都在不断重复处理此前已经算过的前缀。如果一个聊天平均有上百轮,那么系统真正浪费的不是一次两次大计算,而是无数次对相同前缀的重算。

这就像一个人反复问同一个问题,每次都要求你从第一页开始把整本书重新读一遍。问题不在于书太厚,而在于系统没有记住已经读到哪里,也没有把“已经确认过的事实”保存下来。于是,最关键的优化就变成了:把稳定不变的前缀状态持久化,把变化的部分留给新一轮处理

这里的妙处在于,它把缓存从“短期加速器”变成了“对话记忆系统”。一旦缓存组织得足够好,比如用树状结构和最长前缀匹配来定位可复用状态,系统就能把历史对话中的共同部分直接拿来用,而不是一遍遍回溯。这其实揭示了一个更深的设计哲学:高效系统并不是每次都更努力,而是更会识别“哪些东西已经不值得重新证明”

这和循环网络里的 persistence 也形成了呼应。只有满足一定条件,才值得把状态留在更快的地方跨迭代复用。否则,维护缓存本身的成本就会超过收益。于是,真正成熟的性能设计都不是“越缓存越好”,而是建立一种有边界感的记忆经济学

记忆的价值不在于保存得多,而在于保存得恰到好处。


一个更大的框架:高性能系统是在做“记忆分层”

把这些技术放在一起看,会发现一个比“优化注意力”更大的模式:高性能模型是在做记忆分层

这个框架可以分成四层:

  1. 即时记忆:当前 token 或当前时间步正在参与的状态,必须最快访问。
  2. 局部记忆:短窗口内高频使用的信息,可以用轻量机制保留。
  3. 结构记忆:跨层共享的、具有通用性的中间表示,尽量避免重复存储。
  4. 持久记忆:跨轮次、跨迭代仍然稳定的前缀状态,应当进入更长期的缓存体系。

从这个角度看,许多性能优化其实都在回答同一个问题:一段信息应该生活在哪一层记忆里?

如果所有东西都放进即时记忆,系统会爆炸,因为显存和带宽不够。如果所有东西都进入持久记忆,系统又会僵化,因为维护和检索成本太高。真正好的架构,是让不同类型的信息拥有不同的生命周期。短暂变化的东西快速流动,稳定重复的东西被压缩,真正公共的结构被共享。

这也是为什么“少记一点”并不意味着“能力差一点”。恰恰相反,智能的一个标志,就是知道什么不必反复记忆。人类大脑也如此。我们不会把每次对话的每个字都完整重演,而是抓取主题、意图、约束和关系。模型系统若能学会类似的分层记忆,就会从“暴力存储器”进化为“有选择的理解器”。


从工程到哲学:压缩不是损失,而是判断力

很多人一听到压缩,就会联想到损失。但在这里,压缩更像是一种判断力。你之所以能把 K 和 V 共享,是因为你判断它们的差异不足以支撑独立存储。你之所以能用局部注意力,是因为你判断大部分交互是局部完成的。你之所以能缓存跨轮次状态,是因为你判断某些前缀在短时间内大概率不会变。

也就是说,性能优化不是纯粹的技术动作,而是一种关于信息价值的判断。哪些信息是高频、稳定、可复用的,哪些只是临时噪声,哪些必须精确保留,哪些只要近似就够了。模型越大,越需要这种判断,因为规模越大,冗余也越容易膨胀成成本。

这给系统设计一个非常重要的启发:不要先问“如何让模型保留更多”,而要先问“哪些状态值得被反复保留”。前者是容量思维,后者是结构思维。容量思维会把问题导向更大显存和更多算力,结构思维则会推动你重新设计信息流。

这也是为什么看似不同的优化方法,最终会在同一个地方相遇:让记忆尽可能少地参与重复劳动,让计算尽可能少地处理已经确认过的内容。当系统学会区分“新信息”和“旧信息的不同呈现方式”,性能提升就不再依赖蛮力扩展,而依赖精妙的组织。


Key Takeaways

  1. 先找重复,再谈加速。 性能瓶颈常常不是计算量本身,而是重复存储和重复搬运同一份信息。

  2. 把记忆分层,而不是一股脑缓存。 即时、局部、结构、持久四种记忆应使用不同的存储和复用策略。

  3. 共享不等于牺牲能力。 在很多场景里,共享 K 和 V、共享跨层状态,反而能揭示真正有用的结构信息。

  4. 缓存要有边界感。 只有当状态稳定且反复访问时,缓存才值得,否者缓存本身会成为负担。

  5. 把“少记”看作一种判断力。 好的系统不是尽可能保存一切,而是知道哪些信息值得被长期保留,哪些只需要短暂存在。


结语:最强的系统,未必记得最多,而是忘得最有智慧

我们总是被“更多”吸引:更多参数,更多上下文,更多缓存,更多层数。但真正成熟的系统设计告诉我们,性能的上限往往不取决于你能记住多少,而取决于你能否把记忆组织得足够聪明。

如果说传统优化追求的是“让模型多想一点”,那么这类设计追求的则是“让模型少背一点”。看似是减法,实则是把智能从负担中解放出来。最好的记忆系统,不是拥有无限存储,而是只让那些值得保留的东西持续发光。

也许,下一次我们谈论模型加速时,真正该问的不是“还能不能再算快一点”,而是:它是否终于学会了,不把同一件事记两遍。

Sources

← Back to Library

Hatch New Ideas with Glasp AI 🐣

Glasp AI allows you to hatch new ideas based on your curated content. Let's curate and create with Glasp AI :)

Start Hatching 🐣