首页 / 技术博客 / vLLM高性能推理优化指南
最佳实践 2023-12-25

vLLM高性能推理优化指南

如何最大化vLLM的推理性能?本文分享PagedAttention、连续批处理等优化技巧,让你的GPU利用率翻倍。

为什么选择 vLLM?

当你的 AI 应用从"能跑"进入"要服务很多用户"的阶段,推理性能就成了关键瓶颈。vLLM 是目前最快的开源 LLM 推理引擎,核心优势:

  • PagedAttention:显存利用率提升 2-4 倍
  • 连续批处理:吞吐量提升 24 倍
  • OpenAI 兼容 API:无缝替换
  • 支持所有主流模型:Llama、Qwen、Mistral、DeepSeek 等

相比 llama.cpp 适合单用户低延迟场景,vLLM 更适合多并发高吞吐的生产环境。


安装 vLLM

# 推荐使用 pip 安装
pip install vllm

# 需要 CUDA 11.8+ 和 Python 3.9+
# 如果需要 GPTQ/AWQ 量化支持
pip install vllm[quantization]

# 验证安装
python -c "import vllm; print(vllm.__version__)"

环境要求

组件 最低要求 推荐
Python 3.9 3.10+
CUDA 11.8 12.1+
GPU Compute 7.0+ A100/H100
PyTorch 2.0 2.2+

快速启动 OpenAI 兼容 API

vLLM 可以启动一个完全兼容 OpenAI API 格式的服务器:

# 启动 API 服务器
python -m vllm.entrypoints.openai.api_server \
    --model Qwen/Qwen2.5-72B-Instruct \
    --host 0.0.0.0 \
    --port 8000 \
    --tensor-parallel-size 2 \
    --max-model-len 32768 \
    --gpu-memory-utilization 0.9

启动后,用 OpenAI SDK 直接调用:

from openai import OpenAI

client = OpenAI(
    api_key="not-needed",  # vLLM 不需要 key
    base_url="http://localhost:8000/v1"
)

response = client.chat.completions.create(
    model="Qwen/Qwen2.5-72B-Instruct",
    messages=[
        {"role": "user", "content": "解释一下量子计算的基本原理"}
    ],
    max_tokens=1024,
    temperature=0.7
)

print(response.choices[0].message.content)

核心优化技术

1. PagedAttention — 革命性的显存管理

传统推理引擎为每个请求预分配最大长度的显存,导致大量浪费。PagedAttention 借鉴操作系统虚拟内存的思想:

传统方式:
[请求1: 预分配4096 tokens] [空闲显存浪费]
[请求2: 预分配4096 tokens] [空闲显存浪费]

PagedAttention:
[请求1: 实际使用1024] [请求2: 实际使用512] [请求3: ...]
→ 按需分配,没有浪费

效果:相同显存可以同时服务 2-4 倍的并发请求。

2. 连续批处理(Continuous Batching)

传统批处理要等所有请求都完成才处理下一批。连续批处理在有请求完成时立即插入新请求:

传统批处理:
时间 → [Batch1: 3个请求,等最慢的完成] [Batch2: ...]

连续批处理:
时间 → [请求A完成] [新请求D插入] [请求B完成] [新请求E插入] ...
→ GPU 永远不空闲

效果:吞吐量提升 4-24 倍。

3. 量化推理

vLLM 支持多种量化方式,在精度和性能之间取得平衡:

# AWQ 量化(推荐,速度快精度高)
python -m vllm.entrypoints.openai.api_server \
    --model Qwen/Qwen2.5-72B-Instruct-AWQ \
    --quantization awq

# GPTQ 量化
python -m vllm.entrypoints.openai.api_server \
    --model Qwen/Qwen2.5-72B-Instruct-GPTQ-Int4 \
    --quantization gptq
量化方式 精度损失 速度提升 显存节省
FP16 基准 0%
AWQ INT4 极小 1.5-2x 50-60%
GPTQ INT4 1.3-1.8x 50-60%
GPTQ INT8 极小 1.1-1.3x 30-40%

4. 张量并行(Tensor Parallelism)

多 GPU 部署大模型:

# 双卡并行
python -m vllm.entrypoints.openai.api_server \
    --model Qwen/Qwen2.5-72B-Instruct \
    --tensor-parallel-size 2

# 四卡并行(适合 70B+ 模型)
python -m vllm.entrypoints.openai.api_server \
    --model meta-llama/Llama-3.1-405B-Instruct \
    --tensor-parallel-size 4

5. 关键参数调优

python -m vllm.entrypoints.openai.api_server \
    --model your-model \
    --gpu-memory-utilization 0.92 \  # GPU显存使用率(默认0.9)
    --max-model-len 8192 \           # 最大上下文长度
    --max-num-seqs 64 \              # 最大并发请求数
    --max-num-batched-tokens 32768 \ # 每批最大token数
    --swap-space 4 \                 # CPU交换空间(GB)
    --enforce-eager                  # 禁用CUDA Graph(调试用)

性能基准测试

测试环境

  • GPU: 2x NVIDIA A100 80GB
  • 模型: Qwen2.5-72B-Instruct-AWQ
  • 输入: 512 tokens,输出: 256 tokens

测试结果

并发数 延迟 (TTFT) 吞吐量 (tokens/s) GPU利用率
1 0.15s 42 25%
8 0.28s 285 68%
32 0.65s 890 92%
64 1.2s 1,250 96%
128 2.8s 1,480 98%

结论:并发数 32-64 时性价比最高,GPU 利用率接近满载。


vLLM vs 其他推理框架

特性 vLLM llama.cpp TGI Ollama
定位 高吞吐服务 轻量推理 生产推理 个人使用
PagedAttention
连续批处理
OpenAI API
量化支持 AWQ/GPTQ GGUF GPTQ GGUF
多GPU
易用性 ⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐ ⭐⭐⭐⭐⭐
吞吐量 ⭐⭐⭐⭐⭐ ⭐⭐ ⭐⭐⭐⭐ ⭐⭐

选择建议: - 高并发生产环境 → vLLM - 个人本地使用 → Ollama - 边缘设备/低资源 → llama.cpp - HuggingFace 生态 → TGI


生产部署最佳实践

Docker 部署

FROM vllm/vllm-openai:latest

COPY models/ /models/

CMD ["--model", "/models/Qwen2.5-72B-Instruct-AWQ", \
     "--host", "0.0.0.0", \
     "--port", "8000", \
     "--tensor-parallel-size", "2", \
     "--gpu-memory-utilization", "0.92", \
     "--max-model-len", "32768"]

Nginx 反向代理

upstream vllm {
    server 127.0.0.1:8000;
}

server {
    listen 443 ssl;
    server_name api.your-domain.com;

    location /v1/ {
        proxy_pass http://vllm;
        proxy_read_timeout 300s;
        proxy_buffering off;  # 流式输出需要关闭缓冲
    }
}

监控指标

# vLLM 内置 Prometheus 指标
curl http://localhost:8000/metrics

# 关键指标:
# - vllm:num_requests_running: 正在处理的请求数
# - vllm:num_requests_waiting: 等待中的请求数
# - vllm:gpu_cache_usage_perc: GPU缓存使用率
# - vllm:avg_prompt_throughput_toks_per_s: 平均吞吐量

常见问题

Q: 显存不足怎么办?

  1. 使用量化模型(AWQ/GPTQ)
  2. 减小 --max-model-len
  3. 降低 --gpu-memory-utilization
  4. 使用张量并行多卡部署

Q: 延迟太高怎么办?

  1. 减少并发数或增加 GPU
  2. 使用更快的量化方式
  3. 减小 max_tokens
  4. 启用 CUDA Graph(默认开启)

Q: 如何监控 GPU 使用?

# 实时监控
watch -n 1 nvidia-smi

# 更详细的监控
pip install gpustat
gpustat -i 1

总结

vLLM 是当前最强大的开源 LLM 推理引擎,核心优势在于:

  1. PagedAttention:显存利用率最大化
  2. 连续批处理:GPU 永远不空闲
  3. OpenAI 兼容:零改动迁移
  4. 量化支持:精度与性能兼得

对于需要服务多用户的 AI 应用,vLLM 是不二之选。

需要帮你搭建高性能推理服务?联系我们 获取专业部署方案。

订阅更新

获取最新的AI本地化技术文章和教程