用途
vLLM 用于以高吞吐量服务大语言模型(LLM)。它通过 PagedAttention(基于块的 KV 缓存)和连续批处理(混合 prefill/decode 请求)实现性能提升,据资料称吞吐量可达标准 transformers 的 24 倍。适用于部署生产级 LLM API、优化推理性能,以及在 GPU 显存有限的情况下服务大模型。
主要能力
- 高吞吐服务:PagedAttention 与连续批处理提升吞吐。
- OpenAI 兼容服务:可通过 vllm serve 启动兼容 OpenAI 接口的服务端。
- 离线批量推理:无需服务端开销,直接对大量提示词批量生成。
- 量化支持:AWQ、GPTQ、FP8 等量化方式,降低显存占用。
- 张量并行:支持多 GPU 张量并行以服务更大模型。
- 前缀缓存与分块预填充:--enable-prefix-caching、--enable-chunked-prefill 等选项优化首 token 延迟。
- 指标监控:通过 --enable-metrics 暴露 Prometheus 指标(如 vllm:time_to_first_token_seconds、vllm:num_requests_running、vllm:gpu_cache_usage_perc)。
- 推测解码:--speculative-model 可加速生成。
使用方式
安装:
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
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)
生产部署配置示例:
# 7B-13B 单 GPU
vllm serve meta-llama/Llama-3-8B-Instruct \
--gpu-memory-utilization 0.9 \
--max-model-len 8192 \
--port 8000
# 30B-70B 张量并行
vllm serve meta-llama/Llama-2-70b-hf \
--tensor-parallel-size 4 \
--gpu-memory-utilization 0.9 \
--quantization awq \
--port 8000
# 生产环境带缓存与指标
vllm serve meta-llama/Llama-3-8B-Instruct \
--gpu-memory-utilization 0.9 \
--enable-prefix-caching \
--enable-metrics \
--metrics-port 9090 \
--port 8000 \
--host 0.0.0.0
Docker 部署:
docker run --gpus all -p 8000:8000 \
vllm/vllm-openai:latest \
--model meta-llama/Llama-3-8B-Instruct \
--gpu-memory-utilization 0.9 \
--enable-prefix-caching
离线批量推理:
from vllm import LLM, SamplingParams
llm = LLM(
model="meta-llama/Llama-3-8B-Instruct",
tensor_parallel_size=2,
gpu_memory_utilization=0.9,
max_model_len=4096
)
sampling = SamplingParams(
temperature=0.7,
top_p=0.95,
max_tokens=512,
stop=["</s>", "\n\n"]
)
outputs = llm.generate(prompts, sampling)
量化服务:
vllm serve TheBloke/Llama-2-70B-AWQ \
--quantization awq \
--tensor-parallel-size 1 \
--gpu-memory-utilization 0.95
适用场景
- 部署生产级 LLM API(100+ req/sec)。
- 提供 OpenAI 兼容端点。
- GPU 显存有限但需服务大模型。
- 多用户应用(聊天机器人、助手)。
- 需要低延迟与高吞吐。
资料同时给出替代方案建议:llama.cpp 适合 CPU/边缘、单用户;HuggingFace transformers 适合研究、原型、一次性生成;TensorRT-LLM 为 NVIDIA 专用、追求极致性能;Text-Generation-Inference 适合已在 HuggingFace 生态中的场景。
限制与注意事项
- 硬件要求:小模型(7B-13B)需 1x A10 (24GB) 或 A100 (40GB);中模型(30B-40B)需 2x A100 (40GB) 张量并行;大模型(70B+)需 4x A100 (40GB) 或 2x A100 (80GB),并使用 AWQ/GPTQ。支持平台:NVIDIA(主要)、AMD ROCm、Intel GPU、TPU。
- 常见问题:加载时 OOM 可降低 --gpu-memory-utilization 或使用量化;首 token 慢可启用前缀缓存或分块预填充;模型未找到可用 --trust-remote-code;吞吐低可增大 --max-num-seqs 并检查 GPU 利用率(应 >80%);张量并行应使用 2 的幂次 GPU 数量。
- 资料中的版本相关细节可能过时,应以所安装版本的官方文档为准。
- 官方文档:https://docs.vllm.ai ;GitHub:https://github.com/vllm-project/vllm ;论文:"Efficient Memory Management for Large Language Model Serving with PagedAttention" (SOSP 2023);社区:https://discuss.vllm.ai 。
- 资料未提供具体收费或价格信息。