固定大小的状态仍要每步搬运
状态空间模型把过去的上下文压缩进一个循环状态,其大小不随序列长度增长。这省掉了注意力机制中随上下文增长的键值缓存流量,但解码并不因此免费。常规 SSM 解码每一步都要加载完整状态,施加一次衰减和一次秩 1 更新,用更新后的状态算出输出,再把它写回。论文把这种做法称为急切状态管理:状态读写量大,算术强度却很低。
代价在服务端批量规模下显现。在 SSM 层与注意力层交替的混合模型中,论文报告 SSM 更新在输出长度达到 100K token 之前都可能成为解码瓶颈,尽管注意力成本会随输出上下文长度增长。所引用的测量是 Nemotron-3-Super-120B-A12B-NVFP4,批大小 256,单张 B300。同一设计还带来两个问题:投机解码没有廉价的回滚手段;量化后的状态会把舍入误差带入后续的循环更新。
ReplaySSM 存检查点加近期输入
ReplaySSM 把循环展开,用检查点加一段近期 SSM 输入缓冲区来表示状态。计算输出时读取检查点和缓冲区中的输入,不需要写出新状态。只有缓冲区填满时才更新检查点,把缓冲区中的记录折叠进去。两次刷新之间,每一步只读一次检查点,不写任何状态。
流量账目解释了收益来源。非刷新步骤只需一次检查点读取(1R)。刷新步骤需要一次读加一次写(1R + 1W),大约每 L/α 步发生一次,其中 L 是缓冲区窗口,α 与投机解码的接受情况有关。论文报告这使主要的状态内存流量约减半。比较对象是常规解码,它每一步都读写完整状态。
投机回滚变成移动缓冲区指针
投机解码先草拟多个 token,再一起验证,当后缀被拒绝时必须把状态恢复到最后一个被接受的 token。在急切更新状态的方案里,这种回滚代价很高。在 ReplaySSM 中,近期输入就放在缓冲区里,回滚只需移动缓冲区指针,验证也可以只基于输出完成,无需物化中间状态。
投机场景下刷新规则随之改变,因为只有部分草拟 token 会被提交。环形缓冲区容量为 L + T,每步草拟 T 条记录,实现上恰好在已提交数 h 加 T 超过 L 时刷新。该判断只依赖 h 和 T,两者在步骤执行前已知,因此不必等待采样结果。论文指出这是一种提前刷新:即使部分接受本会留下空间,也可能触发刷新,所以刷新间隔约为 L/α 步而非固定的 L 步,接受率越高刷新越频繁。
分离精度把舍入挡在循环之外
同样的分离还允许低精度检查点在多数步骤上服务输出计算,而高精度检查点服务循环更新。每次刷新都从高精度检查点出发,写出新的高精度检查点;低精度副本由它派生,从不被读回循环,因此其舍入误差不会累积。非刷新步骤的输出仍依赖这个近似副本,高精度路径中的舍入误差也依然存在。
论文的分析预测误差如何随衰减和窗口大小变化,而不预测误差的绝对大小,并假设误差独立、偏差和方差固定。作者因此直接测量误差,用低精度状态解码与 FP32 状态解码的下一 token 分布之间的 KL 散度来衡量。在报告的结果中,与共享低精度检查点相比,分离精度降低了输出 KL 散度和下游准确率损失;讨论部分指出,在测得的最长生成长度上,分离精度把 NVFP4 检查点的输出 KL 降低 13–36×。
提速出现在大批量而非批大小 1
该实现在 vLLM 中针对 Mamba-2 和 Gated DeltaNet 运行。在服务端批大小 256 时,ReplaySSM 在四个混合模型上把标准解码相对调优后的 vLLM 基线加速 1.20–1.47×,这四个模型是 Nemotron-3-Nano-4B、Nemotron-3-Super-120B-A12B、Qwen3.5-4B 和 Qwen3.5-122B-A10B。基线是经扫描找到最佳启动配置的 vLLM 内核,而非其出厂默认配置。
对批大小的依赖是关键边界。批大小为 1 时,解码步骤的加速低于持平,为 0.96–0.99×,因为常规内核在 H100 上只达到峰值 DRAM 带宽的 21.6%,在 B300 上只有 9.3%,削减其内存流量并不能省下什么。从批大小约 128 起,基线达到峰值的 84–86% 并饱和,内核加速稳定在 1.4–1.8×,而端到端加速继续增长,因为 SSM 层在解码步骤中占比更大。端到端收益在短和中等序列长度上也最大;长序列时注意力主导该步骤,因为其 KV 缓存流量线性增长。
120B 模型上投机解码约提速 1.8×
在两个 120B 级模型上,ReplaySSM 的吞吐约为 vLLM 投机解码的 1.8×。这些实验用各模型的多 token 预测头作为草拟器。这与 1.20–1.47× 的标准解码数字是不同的比较:一个衡量相对 vLLM 投机解码的吞吐,另一个衡量批大小 256 时相对调优常规标准解码的每步加速。
准确率结果有自己的条件。低精度实验使用模拟量化,FP32 仅指 SSM 状态;权重保持其发布精度,激活为 BF16。准确率按 FP32 运行所定义的区间报告,由于 FP32 准确率本身在 MMLU-Pro 和 GPQA-Diamond 上跨区间下降 21 到 50 分,应读的是同一区间内某配置与 FP32 的差距,而非绝对准确率。凡是共享 NVFP4 检查点损失准确率的地方,它与 FP32 的差距都随长度增大;在三个较大模型上,它在短区间与 FP32 持平,在最高区间落后,在 Nemotron-3-Super-120B-A12B 的 GPQA-Diamond 上最多落后 28.2 分。采用 FP8+SR 循环读取的 NVFP4 在 48 个区间中的 41 个保持在 FP32 区间内。
检查点读取是下一个瓶颈
ReplaySSM 去掉了非刷新步骤的状态写入,但每一步仍要读取检查点,因为输出计算需要它。论文把这次读取列为下一个目标。检查点进入每一步时都按每个头的累积衰减缩放,因此衰减已变得可忽略的头可以在非刷新步骤跳过读取,并把刷新变成纯写入。论文只是勾勒了这个方向,并未测量。
对判断结果是否适用的读者来说,论文自身的划分最有用:收益是服务端批量现象,在短和中等序列长度上最大,并且依赖常规内核处于内存受限状态。在批大小 1,或在注意力主导的长序列上,同一机制并不能带来所报告的加速。分离精度是另一项独立主张,以 KL 散度和下游准确率而非延迟衡量,应放在每个长度区间内与 FP32 的差距中解读。
本文引用的文献
ReplaySSM: Cache SSM Inputs, Not State
ReplaySSM 用检查点加一段近期输入缓冲区来表示 SSM 状态,使主要的状态内存流量约减半,并在批大小 256 时于四个混合模型上把标准解码相对调优后的 vLLM 基线加速 1.20–1.47×。
