
| 文档 | 博客 | 论文 | Twitter/X | 用户论坛 | 开发者Slack |
目录
[■ vLLM是之所以快速的原因](#■ vLLM是之所以快速的原因)
[■ 性能基准测试](#■ 性能基准测试)
[■ vLLM灵活且易于使用](#■ vLLM灵活且易于使用)
[■ vLLM无缝支持HuggingFace上大多数流行的开源模型](#■ vLLM无缝支持HuggingFace上大多数流行的开源模型)
[■ 快速开始](#■ 快速开始)
[OpenAI-Compatible Server](#OpenAI-Compatible Server)
[OpenAI Completions API with vLLM](#OpenAI Completions API with vLLM)
[OpenAI Chat Completions API with vLLM](#OpenAI Chat Completions API with vLLM)
[On Attention Backends](#On Attention Backends)
vLLM 是用于LLM推理和服务 的快速且易于使用的库。
vLLM最初是在加州大学伯克利分校的Sky Computing Lab开发的,现在已经发展成为一个由学术界和工业界共同贡献的社区驱动的项目。
■ vLLM是之所以快速的原因
◎ 最先进的吞吐量。
◎ 通过PagedAttention高效管理注意力键和值内存。
◎ 对连续的请求进行批处理。
****◎****使用CUDA/HIP图进行快速模型执行。
◎ 优化CUDA内核,包括集成FlashAttention和FlashInfer。
◎ 投机解码。
◎ 分块预先填充。
■ 性能基准测试
在博客文章的末尾包含了一个性能基准。它比较了vLLM与其他LLM服务引擎(TensorRT-LLM、SGLang和LMDeploy)的性能。该实现位于nightly-benchmarks文件夹下,可以使用一键可运行脚本重现该基准测试。
■ vLLM灵活且易于使用
****◎****与流行的Hugging Face模型无缝集成。
****◎****支持多种解码算法的高吞吐量服务,包括并行抽样、束搜索等。
****◎****支持分布式推理的张量并行性和管道并行性。
****◎****支持流式输出。
****◎****支持OpenAI兼容的API服务器。
****◎****支持NVIDIA GPU,AMD CPU和GPU,Intel CPU和GPU,PowerPC CPU,TPU和AWS Neuron。
****◎****支持前缀缓存。
****◎****支持多lora。
■ vLLM无缝支持HuggingFace上大多数流行的开源模型
****◎****类Transformer的大语言模型(例如,Llama)。
****◎****混合专家大语言模型(例如,Mixtral,Deepseek-V2和V3)。
****◎****嵌入模型(例如E5-Mistral)。
****◎****多模态大语言模型(例如,LLaVA)。
支持模型的完整列表请查看这里。
■ 快速开始
++++先决条件++++:OS: Linux、Python: 3.9--3.12
****◎****安装
使用pip安装vLLM或++++从源代码++++安装:
pip install vllm
也可以创建conda环境管理python环境:
conda create -n myenv python=3.12 -y
conda activate myenv
pip install vllm
验证安装
import vllm
print(vllm.__version__)
****◎****使用
示例代码如下:
python
from vllm import LLM, SamplingParams
# Sample prompts.
prompts = [
"Hello, my name is",
"The president of the United States is",
"The capital of France is",
"The future of AI is",
]
# Create a sampling params object.
sampling_params = SamplingParams(temperature=0.8, top_p=0.95)
# Create an LLM.
llm = LLM(model="facebook/opt-125m")
# Generate texts from the prompts. The output is a list of RequestOutput objects
# that contain the prompt, generated text, and other information.
outputs = llm.generate(prompts, sampling_params)
# Print the outputs.
print("\nGenerated Outputs:\n" + "-" * 60)
for output in outputs:
prompt = output.prompt
generated_text = output.outputs[0].text
print(f"Prompt: {prompt!r}")
print(f"Output: {generated_text!r}")
print("-" * 60)
OpenAI-Compatible Server
启动vLLM服务器(使用Qwen2.5-1.5B-Instruct模型):
python
vllm serve Qwen/Qwen2.5-1.5B-Instruct
默认情况下,服务器应用generation_config。如果存在的话,从huggingface模型存储库中获取。这意味着某些采样参数的默认值可以被模型创建者推荐的值覆盖。
要禁用此行为,请在启动服务器时传递--generation-config vllm 。
该服务器的查询格式与OpenAI API相同。例如,要列出模型:
python
curl http://localhost:8000/v1/models
可以传入参数--api-key或环境变量VLLM_API_KEY,以使服务器能够检查头中的API key。
OpenAI Completions API with vLLM
一旦服务器启动了,可以用输入提示查询模型:
python
curl http://localhost:8000/v1/completions \
-H "Content-Type: application/json" \
-d '{
"model": "Qwen/Qwen2.5-1.5B-Instruct",
"prompt": "San Francisco is a",
"max_tokens": 7,
"temperature": 0
}'
由于此服务器与OpenAI API兼容,因此可以将其用作使用OpenAI API的任何应用程序的直接替代品。例如,另一种查询服务器的方法是通过openai Python包:
python
from openai import OpenAI
# Modify OpenAI's API key and API base to use vLLM's API server.
openai_api_key = "EMPTY"
openai_api_base = "http://localhost:8000/v1"
client = OpenAI(
api_key=openai_api_key,
base_url=openai_api_base,
)
completion = client.completions.create(model="Qwen/Qwen2.5-1.5B-Instruct", prompt="San Francisco is a")
print("Completion result:", completion)
可以在这里找到更详细的客户端示例:https://github.com/vllm-project/vllm/blob/main/examples/online_serving/openai_completion_client.py
OpenAI Chat Completions API with vLLM
vLLM还支持OpenAI聊天Completions API。聊天界面是一种与模型通信的更动态、更交互式的方式,允许存储在聊天历史记录中的来回交换。这对于需要上下文或更详细解释的任务很有用。
可以使用create chat completion 完成端点与模型交互:
python
curl http://localhost:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "Qwen/Qwen2.5-1.5B-Instruct",
"messages": [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Who won the world series in 2020?"}
]
}'
这段curl命令是用来向本地运行的服务发送HTTP POST请求,目的是获取一个AI模型的文本回复。以下是命令的详细解析:
curl:命令行工具,用于从服务器获取或发送数据。
-H "Content-Type: application/json":这是请求头的一部分,指定请求体的内容类型为JSON。Content-Type是一个HTTP头部字段,用来告诉接收方消息主体的媒体类型。
-d:是curl命令中用来发送数据的标准选项。后面的单引号括起来的内容是POST请求的主体,也就是要发送的JSON数据。
综上所述,这条curl命令的作用是向运行在本地的AI服务发送一个请求,要求使用Qwen2.5-1.5B - Instruct模型来回答一个关于2020年世界大赛冠军的问题,模型将以文本形式返回答案。
可以使用openai python包:
python
from openai import OpenAI
# Set OpenAI's API key and API base to use vLLM's API server.
openai_api_key = "EMPTY"
openai_api_base = "http://localhost:8000/v1"
client = OpenAI(
api_key=openai_api_key,
base_url=openai_api_base,
)
chat_response = client.chat.completions.create(
model="Qwen/Qwen2.5-1.5B-Instruct",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Tell me a joke."},
]
)
print("Chat response:", chat_response)
On Attention Backends
目前,vLLM支持跨不同平台和加速器架构的高效注意力计算的多个后端。它会自动选择与系统和模型规范兼容的性能最好的后端。
如果需要,还可以通过将环境变量VLLM_ATTENTION_BACKEND配置为以下选项之一来手动设置选择的后端:FLASH_ATTN, FLASHINFER或XFORMERS。
没有预先构建的包含Flash Infer的vllm轮子,因此必须首先在环境中安装它。请参阅 Flash Infer official docs 官方文档或查看docker/Dockerfile以获取如何安装它的说明。
至此,本文的内容就结束啦。