关于 serving-llms-vllm
serving-llms-vllm 是使用 vLLM 部署大模型的技能,支持通过 API 服务模型或进行离线批量推理。内容涵盖 OpenAI 兼容端点、量化和张量并行,适用于生产服务及 GPU 资源受限的场景。
主要功能
- 01提供 OpenAI 兼容 API
- 02执行离线批量推理
- 03配置张量并行
- 04服务量化模型
- 05公开 Prometheus 指标
适用场景
- 01部署面向生产流量的大模型 API
- 02批量处理大型提示词数据集
- 03在 GPU 内存有限时服务大型模型
- 04监控推理延迟和资源利用率
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ nousresearch/ hermes-agent --skill serving-llms-vllm安装后在 Claude Code 中输入/serving-llms-vllm确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/optimization.mdquantization.mdserver-deployment.mdtroubleshooting.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
资源
- 官方文档:https://docs.vllm.ai
- GitHub:https://github.com/vllm-project/vllm
- 论文:《使用 PagedAttention 高效管理大语言模型服务的内存》(SOSP 2023)
- 社区:https://discuss.vllm.ai