vLLM 生产部署实践
将 vLLM 从开发环境迁移到生产环境需要考虑高可用、监控、弹性伸缩和安全性等多个维度。本文介绍 vLLM 生产部署的关键实践。
部署架构
典型的 vLLM 生产部署架构包含:
- API 前端:OpenAI 兼容 API Server,处理请求路由
- 推理引擎:vLLM Engine,执行模型推理
- 负载均衡:多实例间的请求分发
- 监控系统:Prometheus + Grafana 指标采集
- 存储后端:模型权重存储与加载
python
# 启动 OpenAI 兼容 API Server
# 命令行方式
# python -m vllm.entrypoints.openai.api_server \
# --model meta-llama/Llama-2-7b-hf \
# --tensor-parallel-size 2 \
# --host 0.0.0.0 \
# --port 8000 \
# --gpu-memory-utilization 0.9
# Python SDK 调用
from openai import OpenAI
client = OpenAI(
base_url="http://localhost:8000/v1",
api_key="not-needed",
)
response = client.chat.completions.create(
model="meta-llama/Llama-2-7b-hf",
messages=[{"role": "user", "content": "解释量子计算的基本原理"}],
max_tokens=512,
)
print(response.choices[0].message.content)多实例部署
使用 Docker Compose 部署多实例 vLLM:
yaml
# docker-compose.yml
version: "3.8"
services:
vllm-1:
image: vllm/vllm-openai:latest
command: >
--model meta-llama/Llama-2-7b-hf
--tensor-parallel-size 2
--port 8000
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 2
capabilities: [gpu]
ports:
- "8001:8000"
vllm-2:
image: vllm/vllm-openai:latest
command: >
--model meta-llama/Llama-2-7b-hf
--tensor-parallel-size 2
--port 8000
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 2
capabilities: [gpu]
ports:
- "8002:8000"
nginx:
image: nginx:latest
ports:
- "8000:80"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf监控指标
vLLM 暴露的关键 Prometheus 指标:
| 指标 | 说明 | 告警阈值 |
|---|---|---|
vllm:num_requests_running | 运行中请求数 | > max_seqs * 0.9 |
vllm:num_requests_waiting | 等待中请求数 | > 100 |
vllm:gpu_cache_usage_perc | GPU Cache 使用率 | > 0.95 |
vllm:avg_generation_throughput | 平均生成吞吐 | < 预期值 50% |
vllm:e2e_request_latency_seconds | 端到端延迟 P99 | > SLA |
监控最佳实践
建议同时监控 GPU 温度、功耗和显存使用率。当 gpu_cache_usage_perc 持续高于 90% 时,应考虑扩容或降低并发度。
弹性伸缩
基于 Kubernetes HPA 的弹性伸缩配置:
yaml
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: vllm-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: vllm-deployment
minReplicas: 2
maxReplicas: 8
metrics:
- type: Pods
pods:
metric:
name: vllm_num_requests_waiting
target:
type: AverageValue
averageValue: "50"冷启动问题
vLLM 实例启动需要加载模型权重,冷启动时间可达数分钟。建议使用预热策略保持最低实例数,避免因扩容延迟导致请求超时。
安全配置
生产环境安全要点:
- 启用 API Key 认证
- 配置 Rate Limiting 防止滥用
- 使用 TLS 加密通信
- 限制最大输入/输出长度
- 审计日志记录