mcpField
S
serving-llms-vllm

serving-llms-vllm

github.com/nousresearch云与 DevOps258.5k63 次安装今天更新
代码仓库

关于 serving-llms-vllm

serving-llms-vllm 是使用 vLLM 部署大模型的技能,支持通过 API 服务模型或进行离线批量推理。内容涵盖 OpenAI 兼容端点、量化和张量并行,适用于生产服务及 GPU 资源受限的场景。

主要功能

  1. 01提供 OpenAI 兼容 API
  2. 02执行离线批量推理
  3. 03配置张量并行
  4. 04服务量化模型
  5. 05公开 Prometheus 指标

适用场景

  1. 01部署面向生产流量的大模型 API
  2. 02批量处理大型提示词数据集
  3. 03在 GPU 内存有限时服务大型模型
  4. 04监控推理延迟和资源利用率

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/nousresearch/hermes-agent --skill serving-llms-vllm

安装后在 Claude Code 中输入/serving-llms-vllm确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
optimization.md
quantization.md
server-deployment.md
troubleshooting.md

详细介绍

vLLM - 高性能大模型服务

适用场景

部署生产环境中的大模型 API、优化推理延迟和吞吐量,或在 GPU 内存有限时提供模型服务。支持兼容 OpenAI 的端点、量化(GPTQ/AWQ/FP8)和张量并行。

快速开始

vLLM 通过 PagedAttention(基于块的 KV 缓存)和连续批处理(混合处理预填充和解码请求),实现了比标准 transformers 高 24 倍的吞吐量。

安装:

pip install vllm

基本离线推理:

from vllm import LLM, SamplingParams

llm = LLM(model="meta-llama/Meta-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/Meta-Llama-3-8B-Instruct

# Query with 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/Meta-Llama-3-8B-Instruct',
    messages=[{'role': 'user', 'content': 'Hello!'}]
).choices[0].message.content)
"

常见工作流

工作流 1:部署生产环境 API

复制此检查清单并跟踪进度:

Deployment Progress:
- [ ] Step 1: Configure server settings
- [ ] Step 2: Test with limited traffic
- [ ] Step 3: Enable monitoring
- [ ] Step 4: Deploy to production
- [ ] Step 5: Verify performance metrics

步骤 1:配置服务设置

根据模型大小选择配置:

# For 7B-13B models on single GPU
vllm serve meta-llama/Meta-Llama-3-8B-Instruct \
  --gpu-memory-utilization 0.9 \
  --max-model-len 8192 \
  --port 8000

# For 30B-70B models with tensor parallelism
vllm serve meta-llama/Meta-Llama-3-70B-Instruct \
  --tensor-parallel-size 4 \
  --gpu-memory-utilization 0.9 \
  --quantization awq \
  --port 8000

# For production with caching (Prometheus metrics are exposed
# automatically at /metrics on the API port)
vllm serve meta-llama/Meta-Llama-3-8B-Instruct \
  --gpu-memory-utilization 0.9 \
  --enable-prefix-caching \
  --port 8000 \
  --host 0.0.0.0

步骤 2:使用有限流量进行测试

在投入生产前运行负载测试:

# Install load testing tool
pip install locust

# Create test_load.py with sample requests
# Run: locust -f test_load.py --host http://localhost:8000

确认 TTFT(首个令牌时间)< 500ms,吞吐量 > 100 req/sec。

步骤 3:启用监控

vLLM 会在 API 端口(默认为 8000)的 /metrics 提供 Prometheus 指标:

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

需要监控的关键指标:

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

步骤 4:部署到生产环境

使用 Docker 确保部署一致:

# Run vLLM in Docker
docker run --gpus all -p 8000:8000 \
  vllm/vllm-openai:latest \
  --model meta-llama/Meta-Llama-3-8B-Instruct \
  --gpu-memory-utilization 0.9 \
  --enable-prefix-caching

步骤 5:验证性能指标

检查部署是否达到目标:

  • TTFT < 500ms(适用于较短的提示词)
  • 吞吐量 > 目标 req/sec
  • GPU 利用率 > 80%
  • 日志中没有 OOM 错误
工作流 2:离线批量推理

适用于处理大型数据集,且无需承担服务开销的场景。

复制此检查清单:

Batch Processing:
- [ ] Step 1: Prepare input data
- [ ] Step 2: Configure LLM engine
- [ ] Step 3: Run batch inference
- [ ] Step 4: Process results

步骤 1:准备输入数据

# Load prompts from file
prompts = []
with open("prompts.txt") as f:
    prompts = [line.strip() for line in f]

print(f"Loaded {len(prompts)} prompts")

步骤 2:配置 LLM 引擎

from vllm import LLM, SamplingParams

llm = LLM(
    model="meta-llama/Meta-Llama-3-8B-Instruct",
    tensor_parallel_size=2,  # Use 2 GPUs
    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"]
)

步骤 3:运行批量推理

vLLM 会自动对请求进行批处理以提高效率:

# Process all prompts in one call
outputs = llm.generate(prompts, sampling)

# vLLM handles batching internally
# No need to manually chunk prompts

步骤 4:处理结果

# Extract generated text
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)
    })

# Save to file
import json
with open("results.jsonl", "w") as f:
    for result in results:
        f.write(json.dumps(result) + "\n")

print(f"Processed {len(results)} prompts")
工作流 3:量化模型服务

在有限的 GPU 内存中运行大型模型。

Quantization Setup:
- [ ] Step 1: Choose quantization method
- [ ] Step 2: Find or create quantized model
- [ ] Step 3: Launch with quantization flag
- [ ] Step 4: Verify accuracy

步骤 1:选择量化方法

  • AWQ:最适合 70B 模型,精度损失极小
  • GPTQ:支持多种模型,压缩效果良好
  • FP8:在 H100 GPU 上速度最快

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

使用 HuggingFace 上经过预量化的模型:

# Search for AWQ models
# Example: TheBloke/Llama-2-70B-AWQ

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

# Using pre-quantized model
vllm serve TheBloke/Llama-2-70B-AWQ \
  --quantization awq \
  --tensor-parallel-size 1 \
  --gpu-memory-utilization 0.95

# Results: 70B model in ~40GB VRAM

步骤 4:验证精度

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

# Compare quantized vs non-quantized responses
# Verify task-specific performance unchanged

何时使用 vLLM,何时选择其他方案

适合使用 vLLM 的场景:

  • 部署生产环境中的大模型 API(100+ req/sec)
  • 提供兼容 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

问题:首个令牌生成缓慢(TTFT > 1 秒)

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

vllm serve MODEL --enable-prefix-caching

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

vllm serve MODEL --enable-chunked-prefill

问题:找不到模型错误

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

vllm serve MODEL --trust-remote-code

问题:吞吐量低(<50 req/sec)

增加并发序列数:

vllm serve MODEL --max-num-seqs 512

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

问题:推理速度低于预期

确认张量并行使用的 GPU 数量为 2 的幂:

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

启用推测解码以加快生成速度(将配置作为 JSON 传入; --speculative-model 已移除,改用 --speculative-config):

vllm serve MODEL \
  --speculative-config '{"model": "DRAFT_MODEL", "num_speculative_tokens": 5, "method": "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

资源

评论

支持 Markdown