欢迎回来

登录 EAKE AI,继续您的智能之旅

忘记密码?
还没有账号?立即注册

vLLM 高性能推理

2026-05-22 · Skills中心

vLLM 高性能推理

vLLM:高吞吐 LLM 推理服务、OpenAI API、量化部署

vLLM 高性能 LLM 推理服务

使用场景

需要部署生产级 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:生产 API 部署

按此清单追踪进度:


部署进度:
- [ ] 步骤 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)

工作流 2:高吞吐批量推理


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)

工作流 3:量化部署


# 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

工作流 4:多节点集群


# 在多节点集群启动
vllm serve meta-llama/Llama-3-8B-Instruct \
    --tensor-parallel-size 8 \
    --pipeline-parallel-size 2 \
    --nnodes 2 \
    --node-rank 0

核心概念

PagedAttention

PagedAttention 通过将 KV 缓存划分为固定大小的块(类似操作系统的分页),实现更高效的内存管理和更大的批处理大小。

  • 减少 60-80% 的显存占用
  • 支持更大 batch size
  • 更高的吞吐量

连续批处理

新请求在正在处理的请求完成后立即加入执行,而不是等待当前批完成。

  • GPU 利用率更高
  • 平均延迟更低
  • 吞吐量更高

支持的模型

vLLM 支持主流开源模型:

  • LLaMA / Llama 2 / Llama 3
  • Qwen / Qwen2 / Qwen2.5
  • Mistral / Mixtral
  • Phi-3
  • DeepSeek
  • Yi
  • Command R
  • Gemma
  • Starcoder
  • 以及其他 HuggingFace 格式模型

量化方法对比

方法精度损失速度适用硬件推荐场景
FP8极小最快H100生产部署(高端 GPU)
AWQ任意生产部署(通用)
GPTQ中等任意快速实验

API 端点

聊天补全(Chat Completions)


curl http://localhost:8000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "meta-llama/Llama-3-8B-Instruct",
    "messages": [
      {"role": "system", "content": "你是一个有帮助的助手。"},
      {"role": "user", "content": "解释量子计算。"}
    ]
  }'

补全(Completions)


curl http://localhost:8000/v1/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "meta-llama/Llama-3-8B-Instruct",
    "prompt": "The capital of France is",
    "max_tokens": 50
  }'

嵌入(Embeddings)


from openai import OpenAI

client = OpenAI(base_url="http://localhost:8000/v1", api_key="EMPTY")
response = client.embeddings.create(
    model="BAAI/bge-en-zh",
    input="The food was delicious."
)
print(response.data[0].embedding)

配置参数

推理参数


SamplingParams(
    temperature=0.7,      # 随机性(0=确定,1=高随机)
    top_p=0.9,            # 核采样
    top_k=50,             # Top-K 采样
    max_tokens=512,       # 最大生成长度
    stop=["\n\n"],        # 停止词
    stop_token_ids=[],    # 停止 token ID
    frequency_penalty=0.0,  # 频率惩罚
    presence_penalty=0.0,  # 存在惩罚
    repeat_penalty=1.0,   # 重复惩罚
    length_penalty=1.0,   # 长度惩罚
)

服务器配置


vllm serve MODEL_NAME \
    --host 0.0.0.0 \
    --port 8000 \
    --tensor-parallel-size 2 \
    --max-model-len 8192 \
    --gpu-memory-utilization 0.9 \
    --enforce-eager \
    --enable-chunked-prefill \
    --max-num-batched-tokens 8192

性能监控

Prometheus 指标


curl http://localhost:8000/prometheus_metrics

关键指标:

  • vllm:num_generation_tokens:生成的总 token 数
  • vllm:num_requests:处理的请求总数
  • vllm:cache_hit_rate:KV 缓存命中率
  • vllm:prefill_tokens:预填充 token 数
  • vllm:decode_tokens:解码 token 数

常见问题

INT8任意消费级 GPU
问题解决方案
CUDA OOM减小 max_model_len,增加 tensor-parallel-size
启动慢使用 --enforce-eager 禁用 CUDA graph
低吞吐量使用连续批处理,增加 batch size
量化后质量下降使用 AWQ 或 FP8 替代 GPTQ

资源链接

  • GitHub: https://github.com/vllm-project/vllm
  • 文档: https://docs.vllm.ai
  • 模型列表: https://docs.vllm.ai/en/latest/models/supported_models.html
  • HuggingFace 集成: https://huggingface.co/docs/vllm

评论区

发表评论


长上下文 OOM减小 max-model-len 或使用更好的量化