一个常驻在笔记本或边缘设备上的 Agent,既需要准确找回用户刚才输入的变量名,也希望运行数小时后缓存不会随上下文不断膨胀。纯 Attention 很擅长前一件事:它保留历史位置对应的 Key 和 Value,当前 Token 可以直接计算与这些位置的相关性。代价是 KV Cache 随可见上下文增长。纯状态空间模型则持续把历史压缩进固定大小的 State,缓存更稳定,却必须承担压缩造成的细节损失。
这类负载很难用“Attention 或 SSM 谁更先进”来回答。Hymba 采用了更直接的工程策略:在同一个模型块中同时保留两条计算路径,让 Attention 负责显式的内容检索,让状态空间路径负责递归状态更新,再把两者的输出融合。它不是简单地把 Transformer 层和 Mamba 层交替堆叠,而是把两种机制放到同一层、同一输入和同一残差路径中协同执行。
两种记忆机制解决的是不同问题
Attention 的历史状态是一组可寻址的 KV。假设上下文里出现过函数名 normalizeRequest,当前 Token 可以通过 Query 与各历史 Key 的匹配,直接把相关 Value 聚合回来。这种访问方式接近内容寻址:模型不必提前知道重要信息会出现在第几个位置,只要当前查询与某个历史表示匹配,就能重新读取它。
SSM 的状态则不保存一份可逐位置查询的历史副本。每接收一个新 Token,模型利用输入相关参数更新内部 State;之后的计算只能访问更新后的压缩状态。它适合把长期趋势、主题或连续变化累积下来,但对“原样复制第 583 个 Token”这类任务并不天然占优。
| 维度 | Attention 路径 | SSM 路径 |
|---|---|---|
| 历史表示 | 每个可见位置的 K/V | 固定维度的递归 State |
| 读取方式 | 当前 Query 显式检索历史 | 从压缩 State 中读出 |
| 推理状态 | 随保留上下文增长 | 通常基本固定 |
| 优势 | 复制、检索、局部精确匹配 | 流式更新、长序列累计、缓存稳定 |
| 主要风险 | KV Cache 和带宽持续增长 | 历史压缩后细节可能不可恢复 |
“快照记忆”和“渐变记忆”可以帮助理解这种差异,但不应被当成模型内部已经被严格划分的语义模块。Hymba 并没有为某个 Head 写死“只负责精确检索”或“只负责概括主题”;这些职责是架构提供的计算能力与训练结果共同形成的。工程上更稳妥的表述是:两条路径拥有不同的信息保留方式,因此可能在同一任务中提供互补表示。
Hybrid-head 不是把两类层前后串联
一种简单的混合方案是交替堆叠:第一层使用 Attention,第二层使用 Mamba,之后继续轮换。这样能够在网络深度方向组合两类模块,但每一层仍只有一种主要序列混合机制。信息必须先经过一条路径,再交给下一层的另一条路径。
Hymba 的 Hybrid-head Parallel Architecture 在同一块内并行处理输入。可以把一次前向抽象成下面的数据流:
flowchart TD
A[输入隐藏状态] --> B[归一化与投影]
B --> C[Attention 路径]
B --> D[SSM 路径]
C --> E[显式检索表示]
D --> F[递归状态表示]
E --> G[融合两路输出]
F --> G
G --> H[残差与前馈网络]
H --> I[下一层隐藏状态]
两条路径看到相同的输入位置,但内部状态不同。Attention 路径读取其可见 KV;SSM 路径读取上一时刻 State,并用当前输入更新它。输出融合后进入后续残差和前馈网络。这样,网络不必等到下一层才把两种表示相遇。
并行不代表两条路径在硬件上必然同时完成。Attention Kernel 与 Selective Scan/SSM Kernel 的执行结构不同,运行时可能分别发射 Kernel,再进行同步和融合。架构层面的“并行分支”只规定数据依赖;实际是否获得延迟收益,还取决于 Kernel 实现、张量尺寸、流调度以及两条路径能否有效重叠。
Meta Token 是模型参数,不是用户上下文
Hymba 在输入前加入一组可学习 Meta Token。它们会出现在每个样本的固定前缀位置,但并非用户输入的自然语言,也不是运行时临时生成的摘要。这些向量作为模型参数参与训练,并通过序列模块与普通 Token 交互。
可以把输入结构表示为:
[Meta 1][Meta 2]...[Meta M][用户 Prompt][后续 Token]
由于 Meta Token 对所有请求都存在,模型可以在训练中利用这些稳定位置承载通用表示或提供注意力落点。论文将它们与 forced-to-attend 现象联系起来:当某些 Head 没有明确需要检索的内容时,Softmax 仍必须分配权重,固定可学习位置可能比随机依赖普通开头 Token 更容易形成稳定结构。
这与 Attention Sink 有相似的表面现象,但不能直接画等号。Attention Sink 是模型对初始位置产生异常集中注意力的一类观察;Meta Token 是架构主动加入的可学习参数。Meta Token 还会参与 SSM 与其他层的表示更新,其作用范围不只是在 Attention 中吸收权重。
部署时,Meta Token 也会进入序列状态。对 Attention 路径而言,它们对应的 KV 需要可用;对 SSM 路径而言,它们会影响初始 State。推理引擎若希望批量处理请求,必须保证每个序列的 Meta Token 布局、位置编码和缓存索引一致。它们数量不大,但会改变模型输入协议,因此不能把普通 Transformer 的缓存管理逻辑原样套用。
KV Cache 缩减来自一组联合设计
Hymba 保留了 Attention,因此不可能仅靠“加入 SSM Head”自动消除 KV Cache。论文中的缓存降低来自多项设计共同作用,包括跨层 KV 共享和部分滑动窗口 Attention。SSM 路径承担部分长程状态建模后,Attention 路径可以在更受限的缓存预算内工作,但这些组件的贡献需要分别理解。
跨层 KV 共享意味着多个层不再各自维护完全独立的 K/V 投影结果,而是在指定层之间复用部分缓存。它直接减少按层重复保存的 KV 数量,但也降低了每层拥有独立历史表示的自由度。共享范围越大,缓存越省,层间差异化能力和实现复杂度之间的权衡越明显。
部分滑动窗口 Attention 则限制某些 Attention 路径只读取最近窗口。较旧的逐 Token KV 可以被淘汰,使缓存上限与窗口大小相关。代价是这些 Head 无法直接检索窗口外的原始位置,必须依赖其他全局 Attention 层、SSM State 或后续表示传递保留远程信息。
| 组件 | 直接作用 | 主要收益 | 需要承担的代价 |
|---|---|---|---|
| SSM Head | 递归压缩历史状态 | 固定状态、长序列累计 | 精确历史可能丢失 |
| Attention Head | 显式内容检索 | 复制与精确匹配能力 | 需要维护 KV |
| 跨层 KV 共享 | 多层复用缓存表示 | 减少按层 KV 占用 | 层间表示独立性下降 |
| 部分滑动窗口 | 限制可见 KV 范围 | 缓存上限更可控 | 窗口外信息不能直接读取 |
| Meta Token | 提供稳定可学习前缀 | 改善公共表示与注意力组织 | 改变输入和缓存协议 |
因此,论文报告的 KV Cache 缩减与吞吐提升不能全部归因于 Hybrid-head 本身。模型规模、窗口配置、KV 共享方式、Kernel、精度和硬件都会影响结果。更合理的评估方式是逐项消融:关闭 KV 共享、改变窗口、移除 Meta Token 或替换 SSM 路径,再分别观察质量、缓存和延迟变化。
为什么小模型更需要混合设计
云端大模型可以通过张量并行、KV 分页和多机部署扩展资源,但手机、PC 和边缘设备的内存与功耗预算通常固定。一个小模型即使参数能够装入设备,持续增长的 KV Cache 仍可能让长会话失去可部署性。SSM 路径的固定状态对这类环境具有直接价值。
另一方面,小模型的表示容量有限。若完全移除 Attention,任何被状态压缩遗漏的信息都更难由额外参数弥补。保留一部分显式检索能力,可以把有限容量集中在必须精确读取的内容上,而将连续背景状态交给 SSM 维护。这是 Hymba 首先围绕小模型验证的现实动机之一。
但“小模型优先”不等于“大模型不会受益”。大模型也面临 KV Cache、带宽和长序列问题,只是混合架构扩展到数十亿或更大规模时,会增加并行切分、Kernel 调度和训练稳定性挑战。论文在约 1.5B 规模上的结果能够证明路线可行,却不足以直接推出 70B 模型上的成本和质量关系。
端侧评估还不能只看平均基准分数。实际产品需要同时测量首 Token 延迟、逐 Token 延迟、峰值内存、设备功耗、长会话质量衰减和不同 Batch 下的稳定性。某个架构在离线语言建模上更好,不代表它在手机 NPU、集成 GPU 或低功耗 CPU 上拥有可用 Kernel。
混合 Kernel 与运行时状态是落地难点
标准 Transformer Serving 通常围绕 KV Block 生命周期构建:Prefill 创建缓存,Decode 每轮追加新位置,请求结束后释放。纯 Mamba/SSM 服务则维护卷积状态和 SSM State,在每个新 Token 到来时原地更新。Hymba 同时拥有这两套状态。
一次请求可能需要维护:
Attention KV Blocks
+ Sliding Window 边界
+ 跨层共享引用
+ SSM Recurrent State
+ Conv State
+ Meta Token 对应初始状态
调度器不仅要知道还剩多少 KV Block,也要为每个请求保留固定状态张量。请求被抢占、换出或迁移时,两类状态必须一起保存;否则恢复后得到的结果会与连续执行不同。Prefix Caching 也变得更复杂:公共前缀命中后,不仅可能复用 Attention KV,还要确定是否能复用与该前缀对应的 SSM State。
Kernel 侧则面临两种不同的最优形状。Attention 倾向于较大的矩阵和规则批处理,Selective Scan 具有递归状态和不同的内存访问模式。把它们简单串行执行,可能让两条路径都达不到单独优化时的效率;强行融合又会增加实现和维护成本。
公开实现中的批处理或生成限制应被视为软件栈成熟度问题,而不是架构数学上无法批处理。评估时需要区分:模型定义是否支持某种场景、当前仓库是否实现对应路径、目标推理框架是否有高效 Kernel。这三件事经常被混在一起。
生产环境需要观察哪些信号
Hymba 的部署效果不能只用模型参数量或单请求 tokens/s 判断。混合路径可能在不同输入、窗口和 Batch 下表现出完全不同的瓶颈。至少需要分开记录以下指标:
- Attention KV Cache 的实际占用、每请求窗口长度和跨层共享比例。
- SSM/卷积状态占用,以及状态换入换出的字节量。
- Attention、SSM 与融合阶段各自耗时,判断哪条路径形成关键路径。
- Prefill、Decode 的 P50、P95、P99 延迟和吞吐。
- 长序列中的复制、精确检索、状态追踪和主题保持质量。
- Meta Token 的注意力分布,以及它是否在异常输入上形成过度集中。
- 不同 Batch Size 下的 GPU 利用率、Kernel 数量和同步等待时间。
若 KV Cache 明显下降但延迟没有改善,常见原因包括 SSM Kernel 利用率不足、分支同步成本较高、Batch 太小或状态管理增加额外搬运。若短文本指标正常、长文本精确检索下降,则应检查滑动窗口和 KV 共享是否过于激进,而不是只调整 SSM 状态维度。
质量回归也需要按任务拆分。整体平均分可能掩盖复制能力、长距离检索或状态追踪的下降。混合架构的核心目标就是让不同路径互补,因此验证集也必须能够单独检测这些能力,否则无法判断融合是否真正发挥作用。
Hybrid 不等于自动获得两边全部优点
把 Attention 与 SSM 放在同一层,不会自动同时获得完整 Attention 的精确记忆和纯 SSM 的固定缓存。只要 Attention 路径存在,就仍有 KV Cache;只要历史被压进有限 State,就仍有信息损失。Hymba 的价值在于提供可调节的组合空间,而不是消除所有取舍。
架构选择可以按负载判断:
- 短上下文、高并发、成熟 GPU Serving 场景,标准 GQA Transformer 可能更简单。
- 长时间流式输入且只需近期精确检索,SSM 加局部 Attention 更有吸引力。
- 既需要显式复制又受缓存严格限制的小模型,可以评估 Hymba 式 Hybrid-head。
- 缺少高效 SSM Kernel 或需要广泛框架兼容时,混合架构的维护成本可能超过收益。
后续混合状态研究表明,Attention 与递归状态的组合仍在扩大,但每个方案在 Head 划分、层布局、窗口、状态维度和缓存共享上都可能不同。不能把“Hymba 有效”泛化成“任意 Attention + Mamba 拼接都有效”。训练目标、归一化、融合方式和硬件实现都会决定最终结果。
Hymba 最值得保留的结论,是模型的历史信息不必只用一种形式保存。部分信息适合保留为可寻址 KV,部分信息可以持续压缩进递归 State,固定 Meta Token 还可以提供稳定的公共表示位置。未来模型是否采用 Hymba 的具体结构仍待更大规模验证,但“按信息访问方式划分计算路径”已经比单纯争论 Attention 或 SSM 谁取代谁更接近真实系统问题。