
大模型推理的Speculative Decoding原理详解
大模型推理的Speculative Decoding原理详解 大模型推理的最大瓶颈是自回归生成——每个token的生成都依赖前面所有token的KV Cache,无法并行。Speculative Decoding(投机解码)是2024-2026年最重要的推理加速技术之一,在质量无损的前提下将推理速度提升2-4倍。 核心思想 自回归生成的瓶颈 标准自回归生成是串行的:生成第N个token需要先完成第1到N-1个token的生成。每一步都涉及一个完整的forward pass,计算量约O(n×d²),其中n是序列长度,d是模型维度。 这种串行性导致GPU利用率低——大部分时间在做矩阵乘法但不能并行化。一个大模型生成500个token需要500次forward pass。 Speculative Decoding的洞察 Speculative Decoding的核心洞察是:大模型的前向计算可以批量处理多个token。 具体方法: 用一个小模型(Draft Model)快速生成N个候选token 用大模型(Target Model)一次性验证这N个token 从验证后的分布中采样,保证输出分布不变 关键在于第2步——大模型一次forward pass可以同时计算N个位置的概率分布,因为这个计算不依赖这N个token本身(只依赖前面的token,而这些已经由小模型"占位"了)。 数学原理 修改的拒绝采样 Speculative Decoding的数学基础是一种修改的拒绝采样,确保输出分布和直接使用大模型完全一致。 设大模型在位置t的条件分布为p(x|context),小模型为q(x|context)。算法步骤: 小模型生成token x₁, x₂, …, xₖ 大模型并行计算p(x_i|context)对所有i 对每个位置i: 如果p(x_i) ≥ q(x_i):接受x_i(以概率min(1, p(x_i)/q(x_i))) 如果p(x_i) < q(x_i):以概率(p(x_i)/q(x_i))接受,否则拒绝并从(p-q)分布中重新采样 一旦拒绝某个token,从该位置开始重新用小模型生成 关键特性:不管小模型质量如何,最终输出分布恒等于大模型的分布。如果小模型生成的token和大模型一致,加速效果好;如果不一致,大模型会拒绝并修正,不损失质量。 加速效果分析 加速比取决于小模型的"命中率"——即生成的token被大模型接受的比例。 设小模型命中率r,每次生成k个候选token。期望接受的token数 = 1 + r + r² + … ≈ 1/(1-r)。 如果r=0.5(命中率50%),加速比约2x 如果r=0.7(命中率70%),加速比约3.3x 如果r=0.8(命中率80%),加速比约5x 命中率主要取决于小模型和大模型的相似度——小模型越接近大模型的分布,命中率越高。 工程实现 Draft Model选择 选择合适的小模型是Speculative Decoding成功的关键: 同系列小模型:最常用的方案。如果Target Model是Llama-70B,Draft Model用Llama-7B。同系列模型共享tokenizer和架构,分布相似度高。 自蒸馏模型:将大模型蒸馏到小模型作为Draft Model。蒸馏使小模型分布更接近大模型,命中率更高。 ...