推测解码#
本指南介绍了如何在 vLLM Ascend 中使用猜测式解码(Speculative Decoding)。猜测式解码是一种能够改善受内存带宽限制的 LLM 推理场景中 token 间延迟的技术。
通过匹配 Prompt 中的 n-gram 进行猜测#
以下代码配置 vLLM Ascend 使用猜测式解码,其候选 token(proposals)是通过匹配 Prompt 中的 n-gram 生成的。
离线推理
from vllm import LLM, SamplingParams prompts = [ "The future of AI is", ] sampling_params = SamplingParams(temperature=0.8, top_p=0.95) llm = LLM( model="meta-llama/Meta-Llama-3.1-8B-Instruct", tensor_parallel_size=1, speculative_config={ "method": "ngram", "num_speculative_tokens": 5, "prompt_lookup_max": 4, }, ) outputs = llm.generate(prompts, sampling_params) for output in outputs: prompt = output.prompt generated_text = output.outputs[0].text print(f"Prompt: {prompt!r}, Generated text: {generated_text!r}")
使用基于 EAGLE 的草图模型进行猜测#
以下代码配置 vLLM Ascend 使用猜测式解码,其候选 token 由基于 EAGLE (Extrapolation Algorithm for Greater Language-model Efficiency) 的草图模型(draft model)生成。
在 vLLM Ascend v0.12.0rc1 中,异步调度器(async scheduler)更加稳定且已准备好启用。我们已对其进行了适配以支持 EAGLE,您可以通过如下设置 async_scheduling=True 来使用它。如果您遇到任何问题,请随时在 GitHub 上提交 issue。作为临时解决方案,您可以在初始化模型时取消设置 async_scheduling=True 来禁用此功能。
离线推理
from vllm import LLM, SamplingParams prompts = [ "The future of AI is", ] sampling_params = SamplingParams(temperature=0.8, top_p=0.95) llm = LLM( model="meta-llama/Meta-Llama-3.1-8B-Instruct", tensor_parallel_size=4, distributed_executor_backend="mp", enforce_eager=True, async_scheduling=True, speculative_config={ "method": "eagle", "model": "yuhuili/EAGLE-LLaMA3.1-Instruct-8B", "draft_tensor_parallel_size": 1, "num_speculative_tokens": 2, }, ) outputs = llm.generate(prompts, sampling_params) for output in outputs: prompt = output.prompt generated_text = output.outputs[0].text print(f"Prompt: {prompt!r}, Generated text: {generated_text!r}")
使用基于 EAGLE 的草图模型时需要注意的几点重要事项:
EAGLE 模型 HF 仓库 中的 EAGLE 草图模型应由 vLLM 直接加载和使用。此功能已在 PR #4893 中添加。如果您使用的 vLLM 版本早于该 PR 合并的时间,请更新到最新版本。
基于 EAGLE 的草图模型需要在不使用张量并行(Tensor Parallelism)的情况下运行(即
speculative_config中的draft_tensor_parallel_size设置为 1),尽管主模型可以使用张量并行运行(见上方示例)。当使用基于 EAGLE-3 的草图模型时,选项 "method" 必须设置为 "eagle3"。即在
speculative_config中指定"method": "eagle3"。
使用 MTP 预测器进行猜测#
以下代码配置 vLLM Ascend 使用猜测式解码,其候选 token 由 MTP (Multi Token Prediction) 生成。通过并行化多个 token 的预测,MTP 可以提升推理性能。有关 MTP 的更多信息,请参阅 Multi_Token_Prediction
在线推理
vllm serve /deepseek-ai/DeepSeek-V3.2-Exp-W8A8 \ --port 20004 \ --data-parallel-size 1 \ --tensor-parallel-size 16 \ --enable-expert-parallel \ --seed 1024 \ --served-model-name dsv3 \ --max-model-len 36768 \ --max-num-batched-tokens 5000 \ --max-num-seqs 10 \ --quantization ascend \ --trust-remote-code \ --gpu-memory-utilization 0.9 \ --compilation-config '{"cudagraph_mode": "FULL_DECODE_ONLY"}' \ --speculative-config '{"num_speculative_tokens": 2, "method":"deepseek_mtp", "disable_padded_drafter_batch": "False"}'
使用 Suffix Decoding 进行猜测#
以下代码配置 vLLM 使用猜测式解码,其候选 token 使用 Suffix Decoding 生成 (SuffixDecoding: Extreme Speculative Decoding for Emerging AI Applications)。
与 n-gram 类似,Suffix Decoding 可以通过匹配最后 n 个生成的 token 进行模式匹配来生成草图 token。与 n-gram 不同的是,Suffix Decoding:(1) 可以同时针对 Prompt 和之前的生成内容进行模式匹配;(2) 使用频率计数来提议最可能的后续内容;(3) 为每个请求在每次迭代中猜测自适应数量的 token,以获得更好的接受率。
Suffix Decoding 在高重复性任务中可以获得更好的性能,例如代码编辑、智能体循环(如自我反思、自洽性)以及强化学习(RL)的 rollout 过程。
[!注意] Suffix Decoding 需要使用 Arctic Inference。您可以通过
pip install arctic-inference进行安装。
离线推理
from vllm import LLM, SamplingParams prompts = [ "The future of AI is", ] sampling_params = SamplingParams(temperature=0.8, top_p=0.95) llm = LLM( model="meta-llama/Meta-Llama-3.1-8B-Instruct", tensor_parallel_size=1, enforce_eager=True, speculative_config={ "method": "suffix", "num_speculative_tokens": 15, }, ) outputs = llm.generate(prompts, sampling_params) for output in outputs: prompt = output.prompt generated_text = output.outputs[0].text print(f"Prompt: {prompt!r}, Generated text: {generated_text!r}")