自注意力跑了20年,我们让它终于学会"压缩记忆":4倍加速,248倍内存压缩,8KB代码开源

49 阅读5分钟

一个全新的双通道注意力机制,让7B模型推理速度提升4倍、KV Cache内存压缩248倍,且只增加了约8KB的参数。


问题:Attention 的 O(n²) 原罪

自注意力机制(Self-Attention)从2017年 Transformer 诞生以来,已经统治了 NLP 领域近十年。但有一个根本性问题一直没人好好解决:

Aij=exp(qiTkj/√d)/Σlexp(qiTkl/√d)Ai​j=exp(qiT​kj​/√d)/Σl​exp(qiT​kl​/√d)

序列长度 n 翻倍 → 计算量翻4倍,KV Cache 也翻4倍。

序列长度标准 KV Cache实际内存
1,024O(168 MB)168 MB
4,096O(672 MB)672 MB
8,192O(2.1 GB)2.1 GB
65,536O(33 GB)内存溢出

7B 模型处理 64K 长序列,需要超过 30GB 的 KV Cache,普通笔记本根本跑不动。

20年来,所有人都在"近似"注意力矩阵上做文章——FlashAttention 优化 I/O、MQA/GQA 共享 K/V、稀疏注意力固定模式、Mamba/RWKV 用 SSM 替代。

我们换了一条路:不是近似,而是让模型"聪明地记住"。


Signal Field Attention:近场精确 + 远场压缩

想象你听一个人说话:

  • 刚刚说的(近场),你听得清清楚楚,一字不落
  • 很久之前说的(远场),你记住了大概意思,不需要逐字逐句

SFA(Signal Field Attention)就是让 LLM 学会这个机制:

双通道架构

                    ┌─────────────────────────┐
输入 Q_t  ───────→ │  SFA 注意力机制          │
                    │                         │
              ┌─────┴─────┐                   │
              │ 近场通道   │──→ softmax(k个token)───→ O_near  [精确]
              │ 精确计算   │                   │
              └───────────┘                   │
         (最近 k 个 token)                     │
                                              │
              ┌───────────┐                   │
              │ 远场通道   │──→ EWMA 压缩状态 ──→ α · S_far  [压缩]
              │ 压缩存储   │                   │
              └───────────┘                   │
         (历史所有 token 的加权平均)           │
                                              │
              ┌─────────────────────────┐    │
              │  融合: O = O_near + α·S_far  │
              └─────────────────────────┘    │
                                            ↓
                                          输出

近场通道:对最近的 k 个 token 做标准 softmax 注意力(精确计算)

远场通道:用 EWMA(指数加权移动平均)将历史 KV 压缩成一个固定大小的状态向量

融合:两个通道的输出加权求和

核心公式

S_t = γ · S_{t-1} + (1-γ) · mean(K_hist)
  • γ ∈ (0,1):衰变因子,控制"记忆"的保留程度
  • α:可学习的混合系数

整个 SFA 只需要约 8KB 的可学习参数。


实测数据:不仅仅是理论

🚀 推理加速:4.16 倍

在 Qwen2.5-7B-Instruct (4-bit) 上的单 token 解码速度:

序列长度标准注意力SFA加速比
12845ms12ms3.75×
1,024720ms173ms4.16×
4,09611,520ms2,769ms4.16×

序列越长,加速效果越稳定。

💾 内存压缩:248 倍

序列长度标准 KV CacheSFA KV Cache压缩比
1,024168 MB4.2 MB40×
4,096672 MB8.6 MB78×
8,1922.1 GB8.6 MB248×

到了 64K 序列长度,标准注意力内存溢出,SFA 正常运行。

📈 困惑度:深层反而更好了!

在 Qwen2.5-0.5B 上替换 3 个层进行蒸馏训练后:

原始 PPLSFA PPL变化
第 0 层(浅层)22.37523.062+3.07%
第 11 层(中层)22.37522.255-0.57%  ✅
第 23 层(深层)22.37520.011-10.57%  ✅

深层层的困惑度反而下降了 10.57%。  因为深层编码的是更抽象的语义信息,天然可压缩,压缩后反而更鲁棒。

⚡ 训练成本:不到 2 分钟

指标数值
额外参数8.1 KB
训练步数800 步
训练时间< 2 分钟
显存占用~200 MB

竞品对比:和 MiniMax Sparse Attention 的差异

昨天 MiniMax 也发了 Sparse Attention 论文(arXiv:2606.13392),同样做注意力加速,但方向完全不同:

维度MiniMax MSA我们的 SFA
策略块级稀疏 + GQA Top-k双通道:精确近场 + 压缩远场
目标规模109B 模型,1M 上下文0.5B–7B 模型,实际部署
解码加速7.6×(H800 + 定制内核)4.16×(MacBook M1 Pro)
部署门槛需要 GPU 内核 co-design纯 Python,任何平台可跑
硬件依赖H800 专用优化任意设备(Python + 标准库)

MSA 解决的是"如何在顶级 GPU 上让 109B 模型处理 100 万 token" ,而 SFA 解决的是"如何在普通设备上让 7B 模型跑长上下文"

两个方向互补,不是竞争。


和 LoRA 的对比

很多人会把 SFA 和 LoRA 搞混——它们解决的问题完全不同:

LoRASFA
目的微调适配新任务推理加速 + 内存节省
额外参数0.1–1% 模型大小~8KB
推理加速❌ 无4.16×
内存节省❌ 无248×
训练要求需要任务特定数据从基础模型蒸馏

两者完全不冲突,甚至可以组合使用。


QN1 Engine:不止 SFA 一个模块

这个项目叫 QN1 Engine,SFA 只是八大技术模块之一:

code复制

01. Signal Field Attention  — 双通道注意力(核心)
02. Huayue(华岳)          — 注意力 + SSM 混合架构
03. Guiyuan(归元)         — SSM KV 缓存压缩
04. LingYa(灵芽)          — 正交基微调
05. RingBuffer              — O(1) 环形缓冲区 KV Cache
06. RCA                     — 频域注意力(RFF 近似)
07. Metal Kernel            — Metal GPU 内核加速
08. Ultra                   — 极致部署优化

一键运行全部 8 套实验:

python3 run_all.py

纯 Python 实现,零外部依赖,任何机器都能跑。


开源发布

全部代码开源,MIT 协议:

👉 github.com/CN-QN1-dali…

快速开始:

git clone https://github.com/CN-QN1-dalin/signal-field-attention.git
cd signal-field-attention
python3 run_all.py

写在最后

2017 年 Transformer 提出了 Self-Attention,20 年过去了,我们终于让它学会"压缩记忆"。

8KB 的改动,4 倍的速度,248 倍的内存压缩。

这也许就是让大语言模型"跑在任何人任何设备上"的重要一步。

如果你觉得这个工作有意思,给个 Star 支持一下 🌟


代码和论文同步开源。欢迎 Fork、PR、讨论。