在如今这个人工智能飞速发展的时代,语言模型的应用已经深入到我们生活的方方面面,从智能聊天机器人到文本生成工具,都离不开强大的语言模型技术支持。而vLLM作为一个专注于高效推理和部署的开源项目,正在为研究人员和开发人员提供一种全新的解决方案,让语言模型的使用变得更加便捷、高效。
初识vLLM:背景与意义
vLLM(Very Large Language Model Inference)是一个专注于大型语言模型推理的开源项目,旨在帮助用户以高效、灵活的方式进行离线批量推理和在线服务部署。其核心目标是通过优化推理过程,降低硬件资源消耗,提高模型的响应速度和吞吐量,从而使得语言模型在各种应用场景下的表现更加出色。

对于科研人员来说,vLLM提供了一个理想的实验平台,可以方便地测试和验证新的语言模型架构和算法。而对于开发者而言,vLLM则是一个强大的工具,能够快速将语言模型集成到实际产品和服务中,加速产品迭代和创新。
环境搭建:开启vLLM之旅的第一步
在开始使用vLLM之前,需要先确保系统环境符合要求。vLLM支持Linux操作系统,并且需要Python版本在3.9到3.12之间。对于使用NVIDIA GPU的用户,可以通过pip直接安装vLLM。
推荐使用uv,一个快速的Python环境管理工具,来创建和管理Python环境。安装uv后,可以通过以下命令创建新的Python环境并安装vLLM:
uv venv --python 3.12 --seed
source .venv/bin/activate
uv pip install vllm --torch-backend=auto
这里,--torch-backend=auto
选项会自动检测系统中安装的CUDA驱动版本,并选择合适的PyTorch索引。如果需要指定特定的后端,例如cu126
,可以使用--torch-backend=cu126
或者设置环境变量UV_TORCH_BACKEND=cu126
。
对于不使用CUDA平台的用户,可以参考官方文档获取详细的安装指导。此外,也可以选择使用conda来创建和管理Python环境,然后通过pip安装uv和vLLM:
conda create -n myenv python=3.12 -y
conda activate myenv
pip install --upgrade uv
uv pip install vllm --torch-backend=auto
通过这种方式,用户可以根据自己的需求和系统配置灵活地搭建vLLM环境,为后续的推理和部署工作做好准备。
离线批量推理:高效处理文本生成任务
安装完成后,vLLM就可以开始进行离线批量推理了。离线批量推理是一种在无网络连接的情况下,对大量输入提示进行文本生成的方法,适用于需要批量处理文本数据的场景,如文档摘要、内容创作等。
以下是一个简单的离线推理示例:
from vllm import LLM, SamplingParams
prompts = [
"Hello, my name is",
"The president of the United States is",
"The capital of France is",
"The future of AI is",
]
sampling_params = SamplingParams(temperature=0.8, top_p=0.95)
llm = LLM(model="facebook/opt-125m")
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}")
在这个示例中,首先导入了LLM
和SamplingParams
两个关键类。LLM
类是vLLM引擎的核心,用于运行离线推理,而SamplingParams
类则用于指定采样过程中的参数,如温度(temperature)和核采样概率(top_p)。
然后,定义了一个包含多个输入提示的列表prompts
,并设置了相应的采样参数。接着,初始化了LLM
实例,指定了要使用的模型为facebook/opt-125m
。最后,通过调用llm.generate
方法,将输入提示添加到vLLM引擎的等待队列中,并执行引擎以生成输出结果。输出结果以RequestOutput
对象的形式返回,包含了所有输出标记。
需要注意的是,vLLM默认会使用模型创建者推荐的采样参数,这些参数存储在Hugging Face模型仓库中的generation_config.json
文件中。如果希望使用vLLM的默认采样参数,可以在创建LLM
实例时设置generation_config="vllm"
。
此外,vLLM支持从Hugging Face和ModelScope两种平台下载模型。如果需要使用ModelScope上的模型,只需在初始化引擎前设置环境变量VLLM_USE_MODELSCOPE=True
即可。
通过离线批量推理,用户可以在本地高效地处理大量文本生成任务,无需依赖外部网络连接,大大提高了数据处理的安全性和隐私性。
在线服务部署:实现模型的快速应用
除了离线推理,vLLM还可以部署为一个与OpenAI API协议兼容的服务器。这意味着vLLM可以作为OpenAI API的替代方案,直接用于那些已经基于OpenAI API构建的应用程序中,实现无缝集成和快速切换。
启动vLLM服务器的命令如下:
vllm serve Qwen/Qwen2.5-1.5B-Instruct
默认情况下,服务器会在http://localhost:8000
地址启动。用户可以通过--host
和--port
参数自定义服务器的地址和端口。目前,vLLM服务器一次只能托管一个模型,并实现了列出模型、创建聊天完成和创建完成等接口。
在服务器运行过程中,会自动应用Hugging Face模型仓库中的generation_config.json
文件中的采样参数。如果希望禁用此行为,可以在启动服务器时添加--generation-config vllm
参数。
此外,服务器还支持通过--api-key
参数或环境变量VLLM_API_KEY
启用API密钥验证功能,以增强安全性。
以下是一些与vLLM服务器交互的示例:
OpenAI Completions API 示例
通过命令行工具curl查询模型:
curl http://localhost:8000/v1/models
使用curl发送文本生成请求:
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
}'
也可以通过Python中的openai
包与服务器交互:
from openai import OpenAI
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)
OpenAI Chat Completions API 示例
使用curl发送聊天请求:
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?"}
]
}'
使用Python中的openai
包发送聊天请求:
from openai import OpenAI
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)
通过在线服务部署,vLLM使得模型的共享和协作变得更加容易,团队成员可以在不同的项目中复用同一个模型服务,提高资源利用率,同时也便于对模型进行统一管理和维护。
注意力后端:优化计算性能的关键
vLLM支持多种注意力后端,以适应不同的平台和加速器架构,从而实现高效的注意力计算。它会自动选择与系统和模型规格兼容的最优后端。如果需要手动指定后端,可以通过设置环境变量VLLM_ATTENTION_BACKEND
来实现,可选值包括FLASH_ATTN
、FLASHINFER
和XFORMERS
。
需要注意的是,目前没有预构建的包含Flash Infer的vllm轮子,因此需要先在环境中安装Flash Infer。可以参考Flash Infer的官方文档或查看Dockerfile中的安装说明。
通过合理选择和配置注意力后端,用户可以根据自己的硬件环境和任务需求,进一步优化vLLM的计算性能,提高模型的推理速度和效率。
总结
vLLM以其简便的安装流程、高效的离线批量推理能力和强大的在线服务部署功能,为语言模型的推理和应用提供了一个全面而灵活的解决方案。无论是科研人员还是开发者,都可以借助vLLM快速开展实验、构建原型,并将语言模型集成到实际产品和服务中。
随着vLLM的不断发展和完善,我们有理由相信,它将在语言模型领域发挥越来越重要的作用,推动人工智能技术的创新和普及。未来,期待vLLM在更多场景下大放异彩,为各行各业带来更多的便利和可能性。