vLLM高性能LLM推理服务Skill serving-llms-vllm

vLLM是一个用于部署和优化大语言模型(LLM)推理的开源框架,支持高吞吐量、低延迟推理,通过PagedAttention和连续批处理技术提升效率,兼容OpenAI API,并适用于量化模型(如AWQ、GPTQ、FP8)和GPU内存受限环境。关键词:vLLM,大语言模型,推理服务,PagedAttention,连续批处理,高吞吐量,量化模型,AI部署,OpenAI兼容,LLM推理

AI应用 0 次安装 0 次浏览 更新于 3/21/2026

名称: serving-llms-vllm 描述: 使用 vLLM 的 PagedAttention 和连续批处理提供高吞吐量的 LLM 服务。用于部署生产级 LLM API、优化推理延迟/吞吐量或在 GPU 内存有限时服务模型。支持 OpenAI 兼容端点、量化(GPTQ/AWQ/FP8)和张量并行。 版本: 1.0.0 作者: Orchestra Research 许可证: MIT 标签: [vLLM, 推理服务, PagedAttention, 连续批处理, 高吞吐量, 生产, OpenAI API, 量化, 张量并行] 依赖项: [vllm, torch, transformers]

vLLM - 高性能 LLM 推理服务

快速开始

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(["解释量子计算"], 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': '你好!'}]
).choices[0].message.content)
"

常见工作流程

工作流程 1: 生产 API 部署

复制此清单并跟踪进度:

部署进度:
- [ ] 步骤 1: 配置服务器设置
- [ ] 步骤 2: 测试有限流量
- [ ] 步骤 3: 启用监控
- [ ] 步骤 4: 部署到生产环境
- [ ] 步骤 5: 验证性能指标

步骤 1: 配置服务器设置

根据模型大小选择配置:

# 对于单 GPU 上的 7B-13B 模型
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

步骤 2: 测试有限流量

部署前运行负载测试:

# 安装负载测试工具
pip install locust

# 创建包含示例请求的 test_load.py
# 运行: locust -f test_load.py --host http://localhost:8000

验证首词时间(TTFT)< 500ms 且吞吐量 > 100 请求/秒。

步骤 3: 启用监控

vLLM 在端口 9090 上暴露 Prometheus 指标:

curl http://localhost:9090/metrics | grep vllm

关键监控指标:

  • vllm:time_to_first_token_seconds - 延迟
  • vllm:num_requests_running - 活动请求数
  • vllm:gpu_cache_usage_perc - KV 缓存利用率

步骤 4: 部署到生产环境

使用 Docker 确保一致部署:

# 在 Docker 中运行 vLLM
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

步骤 5: 验证性能指标

检查部署是否达到目标:

  • 首词时间 < 500ms(针对短提示)
  • 吞吐量 > 目标请求/秒
  • GPU 利用率 > 80%
  • 日志中无 OOM 错误

工作流程 2: 离线批量推理

用于处理大型数据集,无需服务器开销。

复制此清单:

批量处理:
- [ ] 步骤 1: 准备输入数据
- [ ] 步骤 2: 配置 LLM 引擎
- [ ] 步骤 3: 运行批量推理
- [ ] 步骤 4: 处理结果

步骤 1: 准备输入数据

# 从文件加载提示词
prompts = []
with open("prompts.txt") as f:
    prompts = [line.strip() for line in f]

print(f"已加载 {len(prompts)} 个提示词")

步骤 2: 配置 LLM 引擎

from vllm import LLM, SamplingParams

llm = LLM(
    model="meta-llama/Llama-3-8B-Instruct",
    tensor_parallel_size=2,  # 使用 2 个 GPU
    gpu_memory_utilization=0.9,
    max_model_len=4096
)

sampling = SamplingParams(
    temperature=0.7,
    top_p=0.95,
    max_tokens=512,
    stop=["</s>", "

"]
)

步骤 3: 运行批量推理

vLLM 自动批处理请求以提高效率:

# 在一次调用中处理所有提示词
outputs = llm.generate(prompts, sampling)

# vLLM 内部处理批处理
# 无需手动分块提示词

步骤 4: 处理结果

# 提取生成的文本
results = []
for output in outputs:
    prompt = output.prompt
    generated = output.outputs[0].text
    results.append({
        "prompt": prompt,
        "generated": generated,
        "tokens": len(output.outputs[0].token_ids)
    })

# 保存到文件
import json
with open("results.jsonl", "w") as f:
    for result in results:
        f.write(json.dumps(result) + "
")

print(f"已处理 {len(results)} 个提示词")

工作流程 3: 量化模型服务

在有限 GPU 内存中适应大模型。

量化设置:
- [ ] 步骤 1: 选择量化方法
- [ ] 步骤 2: 查找或创建量化模型
- [ ] 步骤 3: 使用量化标志启动
- [ ] 步骤 4: 验证准确性

步骤 1: 选择量化方法

  • AWQ: 最适合 70B 模型,准确性损失最小
  • GPTQ: 广泛模型支持,良好压缩率
  • FP8: 在 H100 GPU 上最快

步骤 2: 查找或创建量化模型

使用 HuggingFace 中的预量化模型:

# 搜索 AWQ 模型
# 示例: TheBloke/Llama-2-70B-AWQ

步骤 3: 使用量化标志启动

# 使用预量化模型
vllm serve TheBloke/Llama-2-70B-AWQ \
  --quantization awq \
  --tensor-parallel-size 1 \
  --gpu-memory-utilization 0.95

# 结果: 70B 模型使用约 40GB VRAM

步骤 4: 验证准确性

测试输出是否符合预期质量:

# 比较量化与非量化响应
# 验证特定任务性能未变化

何时使用与替代方案

使用 vLLM 时:

  • 部署生产级 LLM API(100+ 请求/秒)
  • 服务 OpenAI 兼容端点
  • GPU 内存有限但需要大模型
  • 多用户应用(聊天机器人、助手)
  • 需要低延迟和高吞吐量

改用替代方案:

  • llama.cpp: CPU/边缘推理,单用户
  • HuggingFace transformers: 研究、原型设计、一次性生成
  • TensorRT-LLM: 仅 NVIDIA,需要绝对最大性能
  • Text-Generation-Inference: 已在 HuggingFace 生态系统内

常见问题

问题: 模型加载期间内存不足

减少内存使用:

vllm serve MODEL \
  --gpu-memory-utilization 0.7 \
  --max-model-len 4096

或使用量化:

vllm serve MODEL --quantization awq

问题: 首词慢(首词时间 > 1 秒)

对重复提示词启用前缀缓存:

vllm serve MODEL --enable-prefix-caching

对于长提示词,启用分块预填充:

vllm serve MODEL --enable-chunked-prefill

问题: 模型未找到错误

对自定义模型使用 --trust-remote-code:

vllm serve MODEL --trust-remote-code

问题: 低吞吐量(<50 请求/秒)

增加并发序列:

vllm serve MODEL --max-num-seqs 512

使用 nvidia-smi 检查 GPU 利用率 - 应 >80%。

问题: 推理比预期慢

验证张量并行使用 2 的幂 GPU:

vllm serve MODEL --tensor-parallel-size 4  # 非 3

启用推测解码以加速生成:

vllm serve MODEL --speculative-model DRAFT_MODEL

高级主题

服务器部署模式: 见 references/server-deployment.md 了解 Docker、Kubernetes 和负载均衡配置。

性能优化: 见 references/optimization.md 了解 PagedAttention 调整、连续批处理细节和基准测试结果。

量化指南: 见 references/quantization.md 了解 AWQ/GPTQ/FP8 设置、模型准备和准确性比较。

故障排除: 见 references/troubleshooting.md 了解详细错误消息、调试步骤和性能诊断。

硬件要求

  • 小模型(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

资源