一个全新的双通道注意力机制,让7B模型推理速度提升4倍、KV Cache内存压缩248倍,且只增加了约8KB的参数。
问题:Attention 的 O(n²) 原罪
自注意力机制(Self-Attention)从2017年 Transformer 诞生以来,已经统治了 NLP 领域近十年。但有一个根本性问题一直没人好好解决:
Aij=exp(qiTkj/√d)/Σlexp(qiTkl/√d)Aij=exp(qiTkj/√d)/Σlexp(qiTkl/√d)
序列长度 n 翻倍 → 计算量翻4倍,KV Cache 也翻4倍。
| 序列长度 | 标准 KV Cache | 实际内存 |
|---|---|---|
| 1,024 | O(168 MB) | 168 MB |
| 4,096 | O(672 MB) | 672 MB |
| 8,192 | O(2.1 GB) | 2.1 GB |
| 65,536 | O(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 | 加速比 |
|---|---|---|---|
| 128 | 45ms | 12ms | 3.75× |
| 1,024 | 720ms | 173ms | 4.16× |
| 4,096 | 11,520ms | 2,769ms | 4.16× |
序列越长,加速效果越稳定。
💾 内存压缩:248 倍
| 序列长度 | 标准 KV Cache | SFA KV Cache | 压缩比 |
|---|---|---|---|
| 1,024 | 168 MB | 4.2 MB | 40× |
| 4,096 | 672 MB | 8.6 MB | 78× |
| 8,192 | 2.1 GB | 8.6 MB | 248× |
到了 64K 序列长度,标准注意力内存溢出,SFA 正常运行。
📈 困惑度:深层反而更好了!
在 Qwen2.5-0.5B 上替换 3 个层进行蒸馏训练后:
| 层 | 原始 PPL | SFA PPL | 变化 |
|---|---|---|---|
| 第 0 层(浅层) | 22.375 | 23.062 | +3.07% |
| 第 11 层(中层) | 22.375 | 22.255 | -0.57% ✅ |
| 第 23 层(深层) | 22.375 | 20.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 搞混——它们解决的问题完全不同:
| LoRA | SFA | |
|---|---|---|
| 目的 | 微调适配新任务 | 推理加速 + 内存节省 |
| 额外参数 | 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 协议:
快速开始:
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、讨论。