AB
AiBoss
Wiki

什么是投机采样(Speculative Sampling)?

投机采样是一种加速 Transformer 解码的算法,它让每次 Transformer 调用生成多个 token,而不是只生成一个。该算法由 arXiv 论文《Accelerating Large Language Model Decoding with Speculative Sampling》提出,借助一个更快但能力较弱的草稿模型并行生成短续写,再用一种改进的拒绝采样方案保证输出分布与目标模型一致。

投机采样(Speculative Sampling)是一种用于加速 Transformer 解码的算法,其核心做法是让每一次 Transformer 调用生成多个 token,而不是像常规自回归解码那样一次只生成一个 token。它要解决的问题是:大语言模型逐 token 解码时,单步延迟受限于模型规模,而硬件算力往往没有被充分利用,导致整体生成速度偏慢。该算法由论文《Accelerating Large Language Model Decoding with Speculative Sampling》提出,作者为 Charlie Chen、Sebastian Borgeaud、Geoffrey Irving、Jean-Baptiste Lespiau、Laurent Sifre 与 John Jumper,于 2023 年 2 月 2 日提交至 arXiv。

为什么重要

Transformer 语言模型的常规解码是自回归的:每一步都要把已有的全部上下文送进模型,前向计算一次,得到下一个 token 的概率分布,采样出一个 token,再把它拼回输入,重复这一过程。这意味着生成长度为 N 的文本,需要 N 次串行的模型调用。每次调用之间无法并行,因为后一个 token 依赖前一个 token 的结果。

问题在于,单次前向计算的开销主要由模型参数量和序列长度决定,而它只换来一个 token。对于参数量很大的模型,单步延迟本身就高,逐 token 串行累加之后,端到端的生成时间会变得相当可观。与此同时,加速器在单次前向中往往还有剩余算力,却因为解码的串行结构而无法被利用。已有的做法要么修改模型本身,要么牺牲输出质量,而论文所描述的投机采样试图在不改动模型、不损害样本质量的前提下缩短解码时间。

论文给出的观察是:并行地对若干短续写进行打分,其延迟与从更大的目标模型中采样单个 token 相当。如果这一观察成立,那么用一次「批量打分」的机会换取多个 token 的产出,就有可能摊薄单 token 的平均延迟。这正是投机采样得以成立的出发点。

工作机制

投机采样的流程可以拆成几个环节。需要说明的是,以下描述依据的是该论文的表述,属于该论文提出的算法设计,而非某一行业统一规范。

  1. 草稿模型生成候选。算法引入一个更快但能力较弱的草稿模型(draft model),由它自回归地生成一段较短的续写,也就是若干个候选 token。因为草稿模型更小、更快,生成这段短续写的代价相对低廉。
  2. 目标模型并行打分。把草稿模型给出的这段候选续写整体送入更大的目标模型(target model),让目标模型并行地对这些位置逐一计算概率分布。论文的关键观察是,这种对短续写的并行打分,其延迟与从目标模型采样单个 token 相当。
  3. 改进的拒绝采样。拿到草稿分布与目标分布之后,算法用一种经过修改的拒绝采样方案(modified rejection sampling scheme)来决定接受哪些候选 token、在何处拒绝。论文称,该方案在硬件数值精度范围内保持了目标模型的分布。
  4. 接受与回退。被接受的候选 token 可以直接作为输出,从而一次调用产出多个 token;一旦某个位置被拒绝,就按该方案从目标分布中重新采样,并从该处继续下一轮。这样,输出序列在分布意义上仍然等价于直接由目标模型采样得到的结果。

这套机制有两个值得注意的性质。其一,它不需要修改目标模型本身,属于推理阶段的加速手段,而不是训练阶段的改动。其二,它不改变采样所服从的分布,因此论文强调其不以牺牲样本质量为代价。这两点也是它与一些近似加速方法的区别所在。

典型例子

论文中给出的基准测试使用了 Chinchilla,一个 700 亿参数的语言模型。在分布式设置下,论文报告投机采样取得了 2 至 2.5 倍的解码加速,同时没有损害样本质量,也没有对模型本身做任何修改。这是该论文给出的具体实验结论,其适用范围限于论文所述的模型、硬件与分布式配置,不应直接外推到其他模型规模或部署环境。

从算法结构上看,投机采样涉及的角色有三个:负责快速产出候选的草稿模型、负责最终判定与纠正的目标模型,以及连接两者的拒绝采样判据。论文对草稿模型的具体选择、拒绝采样的具体判据形式,均以其正文描述为准。

边界与常见误解

第一,投机采样不是一种新的模型结构或训练方法。它作用于解码阶段,目标模型与草稿模型都保持原样,论文明确提到没有对模型本身做修改。因此把它理解为「换一个更强的模型」或「重新训练一个更快的模型」都是不准确的。

第二,「保持分布」不等于「输出逐字相同」。该方案保证的是采样分布与目标模型一致,而不是让投机采样的输出与某一次常规采样的输出完全一致。由于采样本身带有随机性,两次运行的结果本来就可能不同。

第三,加速比不是固定常数。论文报告的是在 Chinchilla 700 亿参数模型、分布式设置下 2 至 2.5 倍的解码加速。实际收益取决于草稿模型与目标模型的相对速度、草稿长度、候选被接受的比例以及硬件与批处理配置等因素,论文的数字不能直接套用到其他场景。

第四,草稿模型的质量会影响收益。如果草稿模型给出的候选经常被拒绝,那么额外的打分开销就难以被摊薄,加速效果会下降。论文把草稿模型描述为「更快但能力较弱」,这一取舍关系是该方法的固有前提。

第五,该论文的结论来自其自身的实验设置。论文称在硬件数值精度范围内保持了目标模型的分布,这一表述的边界是「硬件数值精度」,即浮点运算的有限精度,而不是数学意义上的无限精度。

参考资料