SinkState 把循环状态存成自适应低秩:混合模型解码峰值内存最多降到基线的 1/2.6
核心概要
混合语言模型把历史压进固定大小的循环状态,但现有服务系统仍把状态当稠密矩阵,每一步解码都整块读写,显存与带宽开销随批大小增长。SinkState 利用线性注意力中查询、键、值集中于稳定低维子空间这一现象,在解码全程把每个状态保存为自适应低秩分解,用局部 SVD 合并新 token,并在 CPU 上异步整理冻结部分。在四个 Mamba-2 与 GDN 混合模型(4B 到 120B)上,循环状态峰值内存降到基线的 0.38–0.63,解码最多加速 1.58 倍,准确率保持不变。
深度剖析
混合模型的循环状态在解码时不再以稠密矩阵形式整块读写,而是按每个状态自身的有效秩保存为低秩分解,秩随状态不同、并随解码过程变化。 此前的服务系统通过状态复用或延迟写回来减少开销,但都保留稠密表示;状态剪枝与校准投影则依赖静态压缩选择。 在 Nemotron-3-Nano-4B、Nemotron-3-Super-120B-A12B、Qwen3.5-9B 和 Qwen3-Next-80B-A3B-Instruct 四个混合模型上,循环状态峰值内存降到基线的 0.38–0.63,即最多缩小 2.6 倍、平均 1.9 倍。
新到的键和值主要由状态的前几个分量吸收,因此每次更新只需对顶部子空间做一次小规模 SVD,其余分量保持冻结。 若每一步都对整个状态重算精确 SVD,在批大小 128 下处理 Nemotron-3-Nano-4B 的全部状态约需 4000 毫秒,远长于 20–30 毫秒的典型解码步。 SinkState 缓存新 token 的键值、攒满一批再合并,并把各层的合并错开到不同解码步;在 Nemo-4B 上,错开使 P99 步时降低 40.9 毫秒。
冻结部分会积累方向相近的冗余分量,SinkState 在 GPU 解码的同时用 CPU 上的精确 SVD 定期整理它。 只做局部 SVD 时,冻结部分存储的分量数会明显多于精确 SVD 所需,抵消低秩带来的节省。 加入 CPU 整理后,状态内存再乘上 0.86 和 0.89(两个 Nemotron 模型)以及 0.62 和 0.65(两个 Qwen 模型)。
启示与展望
评测覆盖四个混合模型:Nemotron-3-Nano-4B 与 Nemotron-3-Super-120B-A12B 使用 Mamba-2 循环层,Qwen3.5-9B 与 Qwen3-Next-80B-A3B-Instruct 使用 GDN 层;全部实验在单张 96 GB 的 NVIDIA RTX PRO 6000 Blackwell GPU 上完成,循环状态统一以 FP32 保存。
加速幅度随模型与基准变化:Nemo-4B 上为 1.30–1.58 倍,Nemo-120B 上只有 1.04–1.16 倍,因为其 MoE 层占据更大步时份额、较大权重又压缩了可用批大小;在 GPQA Diamond 与 LiveBench 这类长输出、批大小偏小的基准上,Qwen 模型的加速也更低。准确率变化方向不一致,24 个模型-基准组合中有 12 个提升;Nemo-4B 在 GPQA Diamond 上 4.1 分的提升来自基线更多次触及生成长度上限。
