混合模型解码的瓶颈换人了:状态不再每步写回,投机解码吞吐最高2.10倍
核心概要
混合模型把状态空间层与少量注意力层交错,状态空间层用固定大小状态替代随上下文增长的键值缓存,但在服务批量下它反而成为延迟瓶颈,并让投机解码与量化难以奏效。ReplaySSM把状态表示为一个检查点加一段近期输入缓冲,输出计算与状态更新因此分开,多数步骤只追加输入、不写回状态。在四个混合模型上,批量256时内核快1.46至1.80倍、解码步快1.20至1.47倍;两个120B级模型在批量512的投机解码吞吐为vLLM的1.85倍和2.10倍。
深度剖析
混合模型的解码瓶颈从注意力层转到了状态空间层,原因是状态空间层每步都要把整个状态读出再写回。 状态空间层本是为快速解码设计的,用固定大小状态替代随上下文长度增长的键值缓存;但在服务批量下,状态空间层而非注意力层成为解码步中占比最大的部分,直到10万token上下文。 在单张NVIDIA Blackwell Ultra B300 GPU、批量256的Nemotron-3-Super-NVFP4上,状态空间层是解码步的最大组成部分;该模型的状态空间层数量是注意力层的五倍,一层FP32状态为每条序列4 MiB,而一个FP8键值条目为每token 0.5 KiB。
把状态改写成检查点加近期输入缓冲后,多数解码步不再写回状态,只追加少量输入记录。 常规解码每步同时完成两件事:更新状态、从状态读出输出,并把状态存给下一步;窗口内状态被读L次也写L次。 ReplaySSM在vLLM中实现并与vLLM自有内核在各自最佳启动配置下比较,窗口取L=16;批量256时内核快1.46至1.80倍,解码步快1.20至1.47倍,批量1时没有加速,因为其他延迟来源占主导。
投机解码的验证不再需要为每个草稿token保存状态快照,接受前缀通过推进缓冲指针提交。 此前vLLM等引擎在每个草稿token后保存一份状态快照,再挑出与接受前缀匹配的那份,这在受内存带宽限制的路径上意味着每步一次读、T次写,快照还限制显存中能容纳的请求数。 在GSM8K提示、T=4、批量512下,两个120B级模型的投机服务吞吐分别为vLLM投机解码的1.85倍和2.10倍,接受长度相当;vLLM内核在T=8时延迟接近其标准解码步的五倍,而ReplaySSM验证八个token约等于一个标准步的时间。
递推用的检查点与输出读取用的副本可以分开精度,低精度副本的舍入误差不再回到递推中。 共享的低精度检查点每步都被写回递推,舍入误差随生成长度累积;键值缓存没有这种回路,所以能容忍更低精度。 在PG-19文本、教师强制、生成到128K token的设定下,Qwen3.5-4B用NVFP4读取配FP32递推把KL从0.136降到0.0038;GPQA-Diamond上共享NVFP4检查点损失3到31个百分点,NVFP4读取配FP16或FP8递推让四个模型中的三个回到距FP32约2个百分点以内。
启示与展望
报道覆盖四个混合模型:Nemotron 3的Mamba-2层与Qwen3.5的GDN层,从单张NVIDIA H100上的4B稠密模型到单张NVIDIA Blackwell Ultra B300上的120B级MoE模型,性能测试保持FP32状态并使用L=16窗口,投机解码测试用各模型的多token预测头生成草稿。批量1时没有观察到加速,因为其他延迟来源占主导;加速随批量增大而增大,因为状态空间层在解码步中的占比上升。适合关注混合模型推理服务的读者。
共享低精度检查点的误差随生成长度累积,分离精度后剩余的读取误差不随长度增长,但作者指出更好的读取副本量化(例如沿状态与通道维度分别取尺度)仍可进一步降低这部分误差。GPQA-Diamond上四个模型中的三个在分离精度配置下距FP32约2个百分点以内,Nemotron-3-Nano-4B仍有6.7和5.6个百分点的差距。FP16递推配随机舍入能贴近FP32,说明半精度递推检查点足够。
