大模型预填、小模型解码:BridgeKV 把提示缓存翻译过去,单张 A40 上请求快 3.0 倍
核心概要
BridgeKV 让同一模型家族里的大模型只做一次预填,再由一个轻量 KV 拼接模块把大模型的提示缓存翻译成小模型的原生缓存布局,之后每个输出 token 只由小模型生成。在六个模型对、五个数据集共 30 个设置上,它的得分都高于可训练参数量匹配的微调小模型基线,最多补上与大模型两阶段推理之间 80% 的质量差距。单张 A40 上,Llama-3.1-Instruct-8B→Llama-3.2-Instruct-1B 处理 1K 提示、256 输出 token 用时 2.96 秒,接近小模型单独运行的 2.80 秒,比大模型单独运行的 8.83 秒快 3.0 倍。
深度剖析
一次请求里,预填交给大模型,逐 token 解码交给同家族的小模型,解码阶段不再运行任何大模型模块。 此前的预填-解码分离系统在传输两端跑同一个模型,跨模型缓存复用也只覆盖层数和 KV 布局相同的微调变体。 在单张 A40、1K 提示与 256 输出 token 下,Llama-3.1-Instruct-8B→Llama-3.2-Instruct-1B 用时 2.96 秒,小模型单独运行为 2.80 秒,大模型单独运行为 8.83 秒。
拼接模块为小模型的每一层从大模型相邻几层里学一个加权组合,再分别用带残差的非线性映射处理键和值。 键在存储前已乘上旋转位置编码,直接映射会依赖 token 位置,因此先在源键上去掉大模型的位置旋转,映射后再施加小模型的位置旋转。 该模块在 Llama-3.1-Instruct-8B→Llama-3.2-Instruct-1B 上有 1.18 亿参数,占小模型非嵌入参数的 12%,且每次请求只在交接时运行一次。
训练时两个模型都冻结,只训练拼接模块,让读到拼接缓存的小模型去匹配大模型的下一个 token 分布,同时保持拼接缓存接近小模型自己的原生缓存。 此前的跨模型缓存翻译以接收模型自身的缓存或输出为拟合目标,并不显式传递大模型的预测行为。 在 30 个设置中,有 12 个只用了第一阶段,此时小模型解码权重与其微调基线完全相同,BridgeKV 在这 12 个设置上仍然得分更高。
启示与展望
实测范围是单张 A40、批大小为 1、提示长度 512 到 8K token,覆盖四个解码端为 1B 或 0.5B 的模型对;30 个设置的质量结果来自 Llama 与 Qwen 两个指令微调家族、五个数据集。33.86 倍与 27.5 倍来自模拟器对请求到达、排队与缓存传输的建模,不是硬件实测。
拼接模块每个模型对与数据集各训练一个,且两个模型必须共享分词器;更丰富的、在生成过程中调整交接的策略被列为后续方向。质量提升幅度随任务与模型对变化,最差情形是 SAMSum 上 Llama-3.1-Instruct-8B→Llama-3.2-Instruct-3B 的相对提升 0.2%。
