Skip to content

vLLM 生产部署实践

将 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_percGPU 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 加密通信
  • 限制最大输入/输出长度
  • 审计日志记录

相关资源

最近更新