在大语言模型(LLM)的实际应用中,通常需要在给模型具体任务信息之前,先介绍任务背景或上下文,以提升模型在特定任务上的表现。这部分内容通常被称为 System Prompt,它在每次推理过程中都会被重复计算,导致计算资源的浪费。为了解决这一问题,vLLM 提出了 Prefix 特性,通过缓存重复的前缀计算结果,减少自注意力阶段的冗余计算,从而提高吞吐量并降低延迟。
vLLM-Prefix 的核心在于利用 Prefix 的共享特性来优化推理过程。具体来说:
vLLM-Prefix 的实现基于 vLLM 的核心特性,包括 PagedAttention 和 Triton 优化:
在 Prefix 的具体实现中:
vLLM-Prefix 的使用需要通过指定 prefix_pos 参数来标记前缀的长度。以下是一个简单的使用示例:
from vllm import LLM, SamplingParams
# 初始化模型
model_path = "/models/Llama-2-70b-chat-hf"
llm = LLM(model=model_path, tensor_parallel_size=1)
# 设置采样参数
sampling_params = SamplingParams(temperature=0, max_tokens=100)
# 定义 Prompt 和 Prefix 长度
prompts = ["这是一个带有前缀的 Prompt 示例。", "这是另一个带有相同前缀的 Prompt。"]
prefix_len = [16, 16] # 前缀长度
# 生成文本
outputs = llm.generate(prompts, sampling_params=sampling_params, prefix_pos=prefix_len)
for output in outputs:
print(output)
根据实验数据,vLLM-Prefix 在推理加速方面表现显著: