[ PROMPT_NODE_22370 ]
speculative-decoding
[ SKILL_DOCUMENTATION ]
# 投机采样:加速 LLM 推理
## 何时使用此技能
在以下场景使用投机采样:
- **加速推理**:在不损失质量的前提下提升 1.5-3.6 倍速度
- **降低延迟**:适用于实时应用(聊天机器人、代码生成)
- **优化吞吐量**:适用于高并发服务
- **高效部署**:在受限硬件上运行
- **快速生成**:无需更改模型架构
**关键技术**:草稿模型投机采样、Medusa(多头解码)、前瞻解码(Jacobi 迭代)
**论文**:Medusa (arXiv 2401.10774), Lookahead Decoding (ICML 2024), Speculative Decoding Survey (ACL 2024)
## 安装
bash
# 标准投机采样 (transformers)
pip install transformers accelerate
# Medusa (多头解码)
git clone https://github.com/FasterDecoding/Medusa
cd Medusa
pip install -e .
# 前瞻解码
git clone https://github.com/hao-ai-lab/LookaheadDecoding
cd LookaheadDecoding
pip install -e .
# 可选:vLLM 投机采样
pip install vllm
## 快速开始
### 基础投机采样 (草稿模型)
python
from transformers import AutoModelForCausalLM, AutoTokenizer
# 加载目标模型 (大,慢)
target_model = AutoModelForCausalLM.from_pretrained(
"meta-llama/Llama-2-70b-hf",
device_map="auto",
torch_dtype=torch.float16
)
# 加载草稿模型 (小,快)
draft_model = AutoModelForCausalLM.from_pretrained(
"meta-llama/Llama-2-7b-hf",
device_map="auto",
torch_dtype=torch.float16
)
tokenizer = AutoTokenizer.from_pretrained(
"meta-llama/Llama-2-70b-hf"
)
# 使用投机采样生成
prompt = "用简单的语言解释量子计算:"
inputs = tokenizer(prompt, return_tensors="pt").to("cuda")
# Transformers 4.36+ 支持辅助生成
outputs = target_model.generate(
**inputs,
assistant_model=draft_model, # 启用投机采样
max_new_tokens=256,
do_sample=True,
temperature=0.7,
)
response = tokenizer.decode(outputs[0], skip_special_tokens=True)
print(response)
### Medusa (多头解码)
python
from medusa.model.medusa_model import MedusaModel
# 加载 Medusa 增强模型
model = MedusaModel.from_pretrained(
"FasterDecoding/medusa-vicuna-7b-v1.3", # 预训练 Medusa 头
torch_dtype=torch.float16,
device_map="auto"
)
tokenizer = AutoTokenizer.from_pretrained(
"FasterDecoding/medusa-vicuna-7b-v1.3"
)
# 使用 Medusa 生成 (2-3 倍加速)
prompt = "Writ