vLLM 的“投机取巧”:Speculative Decoding 如何加速大语言模型推理

什么是 Speculative Decoding?

简单来说,Speculative Decoding 就是让"小模型先猜,大模型来验证"

传统语言模型是一个 token 一个 token 地生成,这种逐步采样方式在大模型上非常慢。而投机采样的流程如下:

  1. 草稿模型(Draft Model):使用一个小模型快速生成一批"候选 token"。

  2. 主模型(Target Model):用大模型并行验证这些 token,检查是否匹配其预测。

  3. 对齐则接受,错了则回退:如果草稿部分预测正确,就省去大模型逐个生成的时间。

这一策略显著减少了大模型的推理步骤,大幅提升了吞吐量和响应速度。

为什么能加速?

因为大语言模型最耗时的部分就是每一步 token 的推理和上下文缓存管理。而投机采样允许多个 token 批量处理,减少了 GPU kernel 启动、KV Cache 写入等重复操作。

根据 OpenAI 和其他团队的测试,Speculative Decoding 可带来 1.5x ~ 2.5x 的加速效果,在某些配置下甚至更多。

vLLM 中的 Speculative Decoding 是如何实现的?

vLLM 从 v0.3 开始支持 Speculative Decoding,并且通过一个简单的命令行参数就可以启用它。

启动示例

假设你希望用一个 13B 的大模型推理,同时用 7B 的小模型作为草稿模型,命令如下:

复制代码
python3 -m vllm.entrypoints.openai.api_server \
  --model meta-llama/Llama-2-13b-chat-hf \
  --speculative_model mistralai/Mistral-7B-Instruct-v0.2

只需加一个参数 --speculative_model,vLLM 就会自动启用投机采样机制。

请求示例:OpenAI 兼容 API

vLLM 提供 OpenAI API 接口,我们可以用标准的 openai 库直接请求:

python 复制代码
import openai

openai.api_key = "EMPTY"
openai.api_base = "http://localhost:8000/v1"

response = openai.ChatCompletion.create(
    model="meta-llama/Llama-2-13b-chat-hf",
    messages=[{"role": "user", "content": "用通俗语言解释 speculative decoding 是什么?"}]
)

print(response.choices[0].message["content"])

你无需在请求中设置任何特殊参数,vLLM 会自动使用 Speculative Decoding,只要你在服务端配置了草稿模型。

注意事项

项目 要求
草稿模型和主模型需 tokenizer 兼容 最好是相似架构(如 LLaMA 系列)
草稿模型必须小于主模型 否则没有加速效果,可能更慢
FlashAttention + Speculative 一起使用更快 vLLM 默认启用 FlashAttention
当前仅支持推理,不适用于训练 Speculative decoding 是一种推理时优化策略

总结

Speculative Decoding 是 vLLM 中的一项"投机取巧"的优化技术,让小模型打前站,大模型精准确认,从而实现大幅推理提速。

如果你正在部署 LLM 推理服务,尤其是在 GPU 资源紧张或延迟要求高的场景中,Speculative Decoding 将是你值得尝试的一项加速利器。

延伸阅读

相关推荐
小鸡吃米…14 小时前
机器学习 - K - 中心聚类
人工智能·机器学习·聚类
好奇龙猫15 小时前
【AI学习-comfyUI学习-第三十节-第三十一节-FLUX-SD放大工作流+FLUX图生图工作流-各个部分学习】
人工智能·学习
沈浩(种子思维作者)15 小时前
真的能精准医疗吗?癌症能提前发现吗?
人工智能·python·网络安全·健康医疗·量子计算
minhuan15 小时前
大模型应用:大模型越大越好?模型参数量与效果的边际效益分析.51
人工智能·大模型参数评估·边际效益分析·大模型参数选择
Cherry的跨界思维15 小时前
28、AI测试环境搭建与全栈工具实战:从本地到云平台的完整指南
java·人工智能·vue3·ai测试·ai全栈·测试全栈·ai测试全栈
MM_MS15 小时前
Halcon变量控制类型、数据类型转换、字符串格式化、元组操作
开发语言·人工智能·深度学习·算法·目标检测·计算机视觉·视觉检测
ASF1231415sd15 小时前
【基于YOLOv10n-CSP-PTB的大豆花朵检测与识别系统详解】
人工智能·yolo·目标跟踪
水如烟16 小时前
孤能子视角:“意识“的阶段性回顾,“感质“假说
人工智能
Carl_奕然16 小时前
【数据挖掘】数据挖掘必会技能之:A/B测试
人工智能·python·数据挖掘·数据分析
旅途中的宽~16 小时前
《European Radiology》:2024血管瘤分割—基于MRI T1序列的分割算法
人工智能·计算机视觉·mri·sci一区top·血管瘤·t1