投机采样:什么负载下才值得做
投机采样是一种降低生成延迟的推理加速手段:先用低成本的猜测快速写出若干后续内容,再由主模型批量校验,命中就一次前进多个位置。它的收益高度依赖负载形态与命中率,在低并发、长输出场景下可能有效,在高并发下可能因为额外开销而变慢。本文说明原理、收益条件与反例
投机采样,指的是用成本更低的猜测先写出若干后续内容,再让主模型一次性校验这些猜测,命中时相当于一次前进多个位置。它针对的是生成阶段的串行瓶颈 —— 逐个字生成天然慢,而校验可以并行
收益从哪来
收益的来源可以概括成一句话:用便宜的算力换掉昂贵的串行等待。猜测的命中率越高、每次能前进的位置越多,节省的时间越明显;命中率低时,校验的开销就成了纯支出。
收益条件
- 猜测命中率高:任务的可预测性越强,猜测越准,收益越明显。
- 单次输出较长:生成的内容越长,串行等待越多,可节省的时间越多。
- 设备还有算力余量:如果当前已经被并发占满,新增的猜测计算会直接挤压既有请求。
- 并发不高:低并发下设备算力闲置,正好用猜测把闲置算力换成时间。
反例:高并发时可能反而亏
这是最容易被忽略的一点。高并发场景下设备本身已经接近满载,此时再引入猜测计算,等于在同一块算力上增加工作量
- 算力被抢占:原本服务于并发请求的算力被猜测占用,整体吞吐下降。
- 命中率下降:负载复杂时任务可预测性变差,猜测更容易落空,开销却照付。
- 尾延迟恶化:均值可能看不出差别,但排队时间变长会体现在高分位延迟上。
- 内存压力上升:额外的模型与中间状态会加重显存占用,挤占缓存的可用空间。
怎么判断要不要做
- 先测基线:记录当前负载下的延迟分布与设备利用率,确认瓶颈确实在生成阶段。
- 确认余量:设备利用率已经很高时,优先考虑扩容或批处理,而不是引入新的开销。
- 小流量对照:按真实流量做对照实验,比较延迟分位与吞吐,而不只看单请求速度。
- 保留开关:把该能力做成可切换的配置,负载结构变化时能快速退回。
验收
- 延迟分位有前后对比:至少看中位与高分位两个值。
- 吞吐没有下降:单请求变快但整体吞吐下滑,说明算力只是被搬了个地方。
- 资源占用有记录:显存与设备利用率的变化都要留档。
- 能一键回退:与缓存、批处理等其他手段互不冲突,可以单独关闭。
与其它手段怎么组合
加速手段之间不是叠加关系,而是互相争夺同一份资源。把它放进整体优化里看,才不会出现「单点上更快、整体上更慢」的结果
- 与缓存共用:缓存负责减少重复计算,猜测负责缩短必然要算的那段路径,两者作用点不同,可以共存。
- 与批处理冲突:批处理追求单设备吞吐最大化,猜测追求单请求延迟最小化,高并发下需要择一。
- 与上下文裁剪互补:先把无关资料挡在上下文之外,剩下的生成量变小,猜测的空间也随之变小,未必都值得做。
- 与量化共用:量化腾出的算力余量,正好是猜测所需要的资源,但两者都会增加验证成本,需要一起评测。
组合的判断标准仍然回到业务指标:如果使用者关心的是「问完多久开始出字」,优先做降低首字延迟的事;如果关心的是「一批任务多久跑完」,吞吐才是主指标。
边界:具体收益取决于模型、硬件与推理框架的实现,本文给的是判断条件,不是承诺数字。任何结论都应当在真实负载下实测得出。