SuperAPI AI 工具集

serving-llms-vllm

部署与运维

查看项目

更新于 10-21 16:19

技能介绍

用途

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 。
  • 资料未提供具体收费或价格信息。