投机解码 · draft + verify · 推理杠杆
大模型自回归生成是串行的:一个一个出token,每步一次前向。瓶颈不在算力,在串行——GPU每步只算1个token,大量算力闲置。
投机解码的洞见:大模型验证k个token的成本 ≈ 生成1个token的成本(因为attention可以并行算k个位置,KV缓存复用)。所以让小模型先猜k个候选,大模型一次前向验证:第i个和target的分布匹配就接受,不匹配就拒绝并从第i个用target的分布重生成。接受率高的部分等于「白捡」了多个token。
关键变量是接受率a:小模型和大模型越像,a越高。极端情况a→1(小模型≈大模型),加速→k倍;a低(小模型太弱),加速→1(没省还多花小模型成本)。所以draft模型要「小而像」——同家族小号、或专门蒸馏训练的draft(如EAGLE/Medusa)。
选草稿长度k和接受率a,点「跑一轮」,看小模型猜k个、大模型验证、接受几个拒绝几个。最后看加速比。
实战权衡:k别太大(4~8够,太大后面接受率断崖式下降,浪费小模型算力);a低于0.5就别用(小模型太弱,投机不如直接跑target);draft要小(draft成本要远低于target,否则省的token不够补draft开销)。EAGLE在Llama上实测2~3倍加速,几乎无损质量——这是当前最值得上线的推理加速技术之一。
Llama-70B+Llama-1.3B,同架构接受率高,起步首选。
用target hidden state,接受率最高,2~3×加速。
多个draft头并行猜,训练简单,加速中等。
蒸馏draft针对性提升,训练贵但接受率最高。