主题
vLLM 推理加速
vLLM 是一个快速、易于使用的 LLM 推理和服务库,显著提升推理吞吐量和延迟。
为什么需要 vLLM
直接用 Transformers 部署模型的问题:
问题 1:显存占用高(KV Cache 重复分配)
问题 2:吞吐量低(Batch 处理效率低)
问题 3:请求排队(无法连续 Batch)vLLM 的解决方案:PagedAttention
原理类似操作系统的虚拟内存:
- KV Cache 按需分配(不浪费显存)
- 连续 Batch(请求完成一个就补一个新的)
- 吞吐量提升 2-4 倍安装
bash
pip install vllm
# 需要 CUDA 12.1+
# GPU 必须是 NVIDIA,且计算能力 >= 7.0(V100 及以上)快速启动服务
bash
# 启动 API 服务(兼容 OpenAI API)
python -m vllm.entrypoints.openai.api_server \
--model meta-llama/Llama-3.1-8B-Instruct \
--port 8000
# 访问(和 OpenAI API 完全一样)
curl http://localhost:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "meta-llama/Llama-3.1-8B-Instruct",
"messages": [{"role": "user", "content": "你好"}]
}'Python 代码中使用
python
from vllm import LLM, SamplingParams
# 加载模型
llm = LLM(
model="meta-llama/Llama-3.1-8B-Instruct",
tensor_parallel_size=1, # GPU 数量
gpu_memory_utilization=0.9
)
# 设置采样参数
sampling_params = SamplingParams(
temperature=0.7,
top_p=0.95,
max_tokens=512
)
# 批量推理
prompts = [
"解释什么是 RAG",
"写一个快速排序",
"Spring Boot 怎么集成 JPA"
]
outputs = llm.generate(prompts, sampling_params)
for output in outputs:
print(output.prompt)
print(output.outputs[0].text)关键参数
python
LLM(
model="...",
tensor_parallel_size=2, # 多 GPU 并行(模型并行)
pipeline_parallel_size=1, # 流水线并行
gpu_memory_utilization=0.9, # GPU 显存利用率
max_num_seqs=256, # 最大并发序列数
max_num_batched_tokens=8192 # 最大 Batch Token 数
)与 OpenAI API 兼容
vLLM 的 API 服务和 OpenAI 完全兼容,可以直接替换:
python
from openai import OpenAI
# 原来用 OpenAI
# client = OpenAI(api_key="sk-...")
# 现在用本地 vLLM
client = OpenAI(
base_url="http://localhost:8000/v1",
api_key="vllm"
)
response = client.chat.completions.create(
model="meta-llama/Llama-3.1-8B-Instruct",
messages=[{"role": "user", "content": "你好"}]
)性能对比
部署方式:Llama 3.1 8B,1 张 A100
Transformers(直接部署):
- 吞吐量:~2000 tokens/s
- 最大并发:~32
vLLM:
- 吞吐量:~8000 tokens/s(4x)
- 最大并发:~256量化(进一步降低显存)
bash
# 使用 4-bit 量化(需要 bitsandbytes)
python -m vllm.entrypoints.openai.api_server \
--model meta-llama/Llama-3.1-8B-Instruct \
--quantization awq \
--dtype half