vLLM:高吞吐 LLM 推理服务、OpenAI API、量化部署
需要部署生产级 LLM API、优化推理延迟/吞吐量,或在有限 GPU 内存下服务模型时使用。支持 OpenAI 兼容端点、量化(GPTQ/AWQ/FP8)和张量并行。
vLLM 通过 PagedAttention(基于块的 KV 缓存)和连续批处理(混合预填充/解码请求)实现比标准 transformers 高 24 倍的吞吐量。
安装:
pip install vllm
基础离线推理:
from vllm import LLM, SamplingParams
llm = LLM(model="meta-llama/Llama-3-8B-Instruct")
sampling = SamplingParams(temperature=0.7, max_tokens=256)
outputs = llm.generate(["Explain quantum computing"], sampling)
print(outputs[0].outputs[0].text)
OpenAI 兼容服务器:
vllm serve meta-llama/Llama-3-8B-Instruct
# 用 OpenAI SDK 查询
python -c "
from openai import OpenAI
client = OpenAI(base_url='http://localhost:8000/v1', api_key='EMPTY')
print(client.chat.completions.create(
model='meta-llama/Llama-3-8B-Instruct',
messages=[{'role': 'user', 'content': 'Hello!'}]
).choices[0].message.content)
"
按此清单追踪进度:
部署进度:
- [ ] 步骤 1: 配置服务器设置
- [ ] 步骤 2: 测试有限流量
- [ ] 步骤 3: 启用监控
- [ ] 步骤 4: 部署到生产环境
- [ ] 步骤 5: 验证性能指标
步骤 1:配置服务器设置
# 基本启动
vllm serve Qwen/Qwen2-7B-Instruct
# 自定义端口和名称
vllm serve Qwen/Qwen2-7B-Instruct \
--host 0.0.0.0 \
--port 8000 \
--task completion
步骤 2:测试
from openai import OpenAI
client = OpenAI(base_url="http://localhost:8000/v1", api_key="EMPTY")
response = client.chat.completions.create(
model="Qwen2-7B-Instruct",
messages=[{"role": "user", "content": "Hello!"}]
)
print(response.choices[0].message.content)
from vllm import LLM, SamplingParams
llm = LLM(
model="meta-llama/Llama-3-8B-Instruct",
tensor_parallel_size=2, # 两块 GPU
max_model_len=4096
)
sampling = SamplingParams(
temperature=0.8,
max_tokens=512,
stop=["\n\n", "User:"]
)
# 批量输入
prompts = [
f"Explain concept {i} in one sentence."
for i in range(100)
]
outputs = llm.generate(prompts, sampling)
for output in outputs:
print(output.outputs[0].text)
# FP8 量化(需要 H100)
vllm serve meta-llama/Llama-3-70B-Instruct \
--quantization fp8
# AWQ 量化
vllm serve meta-llama/Llama-3-70B-Instruct \
--quantization awq \
--awq-algorithm module
# GPTQ 量化
vllm serve meta-llama/Llama-3-70B-Instruct \
--quantization gptq
# 在多节点集群启动
vllm serve meta-llama/Llama-3-8B-Instruct \
--tensor-parallel-size 8 \
--pipeline-parallel-size 2 \
--nnodes 2 \
--node-rank 0
PagedAttention 通过将 KV 缓存划分为固定大小的块(类似操作系统的分页),实现更高效的内存管理和更大的批处理大小。
新请求在正在处理的请求完成后立即加入执行,而不是等待当前批完成。
vLLM 支持主流开源模型:
| 方法 | 精度损失 | 速度 | 适用硬件 | 推荐场景 |
| FP8 | 极小 | 最快 | H100 | 生产部署(高端 GPU) |
| AWQ | 小 | 快 | 任意 | 生产部署(通用) |
| GPTQ | 中 | 中等 | 任意 | 快速实验 |
| INT8 | 小 | 快 | 任意 | 消费级 GPU |
| 问题 | 解决方案 |
| CUDA OOM | 减小 max_model_len,增加 tensor-parallel-size |
| 启动慢 | 使用 --enforce-eager 禁用 CUDA graph |
| 低吞吐量 | 使用连续批处理,增加 batch size |
| 量化后质量下降 | 使用 AWQ 或 FP8 替代 GPTQ |
| 长上下文 OOM | 减小 max-model-len 或使用更好的量化 |
评论区