无论是多卡并行计算还是批处理技术,都无法改变decoding阶段访存bond的问题,而speculative decoding则完全改变了这种范式;
投机采样是一种可以从根本上解码计算访存比的方法,保证和使用原始模型的采样分布完全相同。它使用两个模型:一个是原始目标模型,另一个是比原始模型小得多的近似模型。近似模型用于进行自回归串行采样,而大型模型则用于评估采样结果。解码过程中,某些token的解码相对容易,某些token的解码则很困难。因此,简单的token生成可以交给小型模型处理,而困难的token则交给大型模型处理。这里的小型模型可以采用与原始模型相同的结构,但参数更少,或者干脆使用n-gram模型。小型模型不仅计算量较小,更重要的是减少了内存访问的需求。
下面一张图展示一个简单例子

例如,在第一行中,近似模型生成了5个token,目标模型使用这5个token和前缀拼接后的句子”[START] japan’s bechmark bond”作为输入,通过一次推理执行来验证小模型的生成效果。这里,最后一个token ”bond“被目标模型拒绝,重新采样生成”n“。这样中间的四个tokens,”japan” “’s” “benchmark”都是小模型生成的。以此类推,由于用大模型对输入序列并行地执行,大模型只forward了9次,就生成了37个tokens。尽管总的大模型的计算量不变,但是大模型推理一个1个token和5个token延迟类似,这还是比大模型一个一个蹦词的速度要快很多。
,我们在看性能分析结果,下图是一个encoder-decoder结构网络的时间分解图。顶部一行显示了 γ\gamma=7的投机采样,中间一行显示= 3的投机解码, 是小模型一次生成token数目。Mp大模型,Mq的小模型。可见,使用投机采样,解码时间大幅缩减。