跳到主要内容
技术WHITEHOLE

投机采样:什么负载下才值得做

投机采样是一种降低生成延迟的推理加速手段:先用低成本的猜测快速写出若干后续内容,再由主模型批量校验,命中就一次前进多个位置。它的收益高度依赖负载形态与命中率,在低并发、长输出场景下可能有效,在高并发下可能因为额外开销而变慢。本文说明原理、收益条件与反例

技术推理优化模型压缩

投机采样,指的是用成本更低的猜测先写出若干后续内容,再让主模型一次性校验这些猜测,命中时相当于一次前进多个位置。它针对的是生成阶段的串行瓶颈 —— 逐个字生成天然慢,而校验可以并行

收益从哪来

收益的来源可以概括成一句话:用便宜的算力换掉昂贵的串行等待。猜测的命中率越高、每次能前进的位置越多,节省的时间越明显;命中率低时,校验的开销就成了纯支出。

收益条件

  • 猜测命中率高:任务的可预测性越强,猜测越准,收益越明显。
  • 单次输出较长:生成的内容越长,串行等待越多,可节省的时间越多。
  • 设备还有算力余量:如果当前已经被并发占满,新增的猜测计算会直接挤压既有请求。
  • 并发不高:低并发下设备算力闲置,正好用猜测把闲置算力换成时间。

反例:高并发时可能反而亏

这是最容易被忽略的一点。高并发场景下设备本身已经接近满载,此时再引入猜测计算,等于在同一块算力上增加工作量

  • 算力被抢占:原本服务于并发请求的算力被猜测占用,整体吞吐下降。
  • 命中率下降:负载复杂时任务可预测性变差,猜测更容易落空,开销却照付。
  • 尾延迟恶化:均值可能看不出差别,但排队时间变长会体现在高分位延迟上。
  • 内存压力上升:额外的模型与中间状态会加重显存占用,挤占缓存的可用空间。

怎么判断要不要做

  • 先测基线:记录当前负载下的延迟分布与设备利用率,确认瓶颈确实在生成阶段。
  • 确认余量:设备利用率已经很高时,优先考虑扩容或批处理,而不是引入新的开销。
  • 小流量对照:按真实流量做对照实验,比较延迟分位与吞吐,而不只看单请求速度。
  • 保留开关:把该能力做成可切换的配置,负载结构变化时能快速退回。

验收

  • 延迟分位有前后对比:至少看中位与高分位两个值。
  • 吞吐没有下降:单请求变快但整体吞吐下滑,说明算力只是被搬了个地方。
  • 资源占用有记录:显存与设备利用率的变化都要留档。
  • 能一键回退:与缓存、批处理等其他手段互不冲突,可以单独关闭。

与其它手段怎么组合

加速手段之间不是叠加关系,而是互相争夺同一份资源。把它放进整体优化里看,才不会出现「单点上更快、整体上更慢」的结果

  • 与缓存共用:缓存负责减少重复计算,猜测负责缩短必然要算的那段路径,两者作用点不同,可以共存。
  • 与批处理冲突:批处理追求单设备吞吐最大化,猜测追求单请求延迟最小化,高并发下需要择一。
  • 与上下文裁剪互补:先把无关资料挡在上下文之外,剩下的生成量变小,猜测的空间也随之变小,未必都值得做。
  • 与量化共用:量化腾出的算力余量,正好是猜测所需要的资源,但两者都会增加验证成本,需要一起评测。

组合的判断标准仍然回到业务指标:如果使用者关心的是「问完多久开始出字」,优先做降低首字延迟的事;如果关心的是「一批任务多久跑完」,吞吐才是主指标。

边界:具体收益取决于模型、硬件与推理框架的实现,本文给的是判断条件,不是承诺数字。任何结论都应当在真实负载下实测得出。

FAQ

常见问题

与这篇相关、并且被问得最多的几个问题

投机采样能让延迟降低多少
没有通用答案,收益取决于猜测命中率、输出长度与设备余量。正确做法是在自己的负载下做对照实验,看分位延迟的变化
它和批处理是同一类优化吗
不是。批处理通过合并请求提升吞吐,投机采样通过减少串行步数降低单请求延迟,两者在高并发下可能互相挤压
什么时候应该先扩容而不是做优化
设备利用率已经接近上限、排队时间持续增长时,扩容通常是更直接的解法,优化的收益不足以抵消复杂度