【大语言模型推理框架】VLLM

发布于:2025-04-07 ⋅ 阅读:(26) ⋅ 点赞:(0)

 

| 文档 | 博客 | 论文 | Twitter/X | 用户论坛 | 开发者Slack |

官网GitCode - 全球开发者的开源社区,开源代码托管平台

目录

■ vLLM是之所以快速的原因

■ 性能基准测试

■ vLLM灵活且易于使用

■ vLLM无缝支持HuggingFace上大多数流行的开源模型

■ 快速开始

◎安装

◎使用

OpenAI-Compatible Server

OpenAI Completions API with vLLM

OpenAI Chat Completions API with vLLM

On Attention Backends



vLLM用于LLM推理和服务的快速且易于使用的库。

vLLM最初是在加州大学伯克利分校的Sky Computing Lab开发的,现在已经发展成为一个由学术界和工业界共同贡献的社区驱动的项目。

 vLLM是之所以快速的原因

最先进的吞吐量

通过PagedAttention高效管理注意力键和值内存。

对连续的请求进行批处理

使用CUDA/HIP图进行快速模型执行。

量化:GPTQAWQ、INT4、INT8和FP8。

优化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__)

使用

示例代码如下:

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模型):

vllm serve Qwen/Qwen2.5-1.5B-Instruct

默认情况下,服务器应用generation_config。如果存在的话,从huggingface模型存储库中获取。这意味着某些采样参数的默认值可以被模型创建者推荐的值覆盖。

要禁用此行为,请在启动服务器时传递--generation-config vllm

该服务器的查询格式与OpenAI API相同。例如,要列出模型:

curl http://localhost:8000/v1/models

可以传入参数--api-key或环境变量VLLM_API_KEY,以使服务器能够检查头中的API key。

OpenAI Completions API with vLLM

一旦服务器启动了,可以用输入提示查询模型:

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包:

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 完成端点与模型交互:

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:命令行工具,用于从服务器获取或发送数据。

http://localhost:8000/v1/chat/completions:这是请求的目标URL。localhost意味着请求发送给运行在同一台计算机上的服务,8000是服务监听的端口号,/v1/chat/completions是API的路径,用于触发聊天完成请求,即让AI模型生成文本回复。

-H "Content-Type: application/json":这是请求头的一部分,指定请求体的内容类型为JSON。Content-Type是一个HTTP头部字段,用来告诉接收方消息主体的媒体类型。

-d:是curl命令中用来发送数据的标准选项。后面的单引号括起来的内容是POST请求的主体,也就是要发送的JSON数据。

综上所述,这条curl命令的作用是向运行在本地的AI服务发送一个请求,要求使用Qwen2.5-1.5B-Instruct模型来回答一个关于2020年世界大赛冠军的问题,模型将以文本形式返回答案。

可以使用openai 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以获取如何安装它的说明。

至此,本文的内容就结束啦。


网站公告

今日签到

点亮在社区的每一天
去签到