大模型推理的瓶颈是自回归生成——每个token都要等前一个token生成完。投机解码打破了这个限制:用小模型快速生成候选token,大模型一次性验证。
工作流程
小模型快速生成K个候选token。大模型并行计算这K个token的概率。从第一个不一致的token位置开始,用大模型的概率重新采样。如果小模型猜对了,大模型不需要逐个生成,速度直接翻倍。
为什么质量不损失
数学证明:投机解码的输出分布和大模型原始输出完全一致。它只是利用了"小模型和大模型在简单token上通常一致"这个事实来跳过不必要的计算。
实际加速比
取决于任务类型和模型组合。简单文本生成加速2-3倍。代码生成加速1.5-2倍(代码的确定性较低)。复杂推理加速1.2-1.5倍。
使用方式
vLLM原生支持投机解码:
python -m vllm.entrypoints.openai.api_server --model Qwen/Qwen2.5-7B-Instruct --speculative-model Qwen/Qwen2.5-1.5B-Instruct --num-speculative-tokens 5
Ollama也支持,配置speculative_model参数即可。
选配建议
小模型和大模型最好是同系列的(如Qwen-1.5B配Qwen-7B),这样token分布更相似,猜对率更高。num_speculative_tokens从5开始尝试,太大会增加验证开销。