AI 部署评测

vLLM · Replicate · Modal · RunPod · 云厂商

Prometheus

Prometheus Exporter Configuration for vLLM: Which Metrics to Expose and How to Set Up Alerts

部署 vLLM 推理服务后,如果没有有效的监控体系,模型性能下降、GPU 资源浪费甚至服务中断往往在几分钟内发生。根据 **CNCF 2024 年度调查**,73% 的 Kubernetes 用户将 Prometheus 作为首选监控工具,而 vLLM 从 0.4.0 版本起原生暴露 Prometheus 指标端…

部署 vLLM 推理服务后,如果没有有效的监控体系,模型性能下降、GPU 资源浪费甚至服务中断往往在几分钟内发生。根据 CNCF 2024 年度调查,73% 的 Kubernetes 用户将 Prometheus 作为首选监控工具,而 vLLM 从 0.4.0 版本起原生暴露 Prometheus 指标端点,这使得工程师能够以低于 5 微秒的额外开销捕获关键运行时数据。中国信通院《2024 年 AI 模型推理服务白皮书》指出,未配置监控的推理服务平均故障恢复时间(MTTR)长达 47 分钟,而有指标驱动的告警体系可将 MTTR 压缩至 8 分钟以下。本文从延迟、吞吐、显存三个维度拆解 vLLM Prometheus Exporter 的指标配置策略,并给出可直接部署的告警规则模板。

核心指标分类与采集优先级

vLLM 暴露的 Prometheus 指标超过 40 个,但并非所有都需要纳入告警。根据 vLLM 官方文档 v0.6.3 的建议,应将指标分为三个优先级层级。

P0 级指标直接关联服务可用性。vllm:num_requests_waiting 反映排队请求数,当该值持续超过 max_num_seqs 的 80% 时,表明吞吐瓶颈已形成。vllm:gpu_cache_usage_perc 显示 KV cache 利用率,超过 90% 会触发显存不足导致的请求拒绝。

P1 级指标用于容量规划。vllm:avg_prompt_throughput_toks_per_svllm:avg_generation_throughput_toks_per_s 分别测量 prefill 和 decode 阶段的 token 吞吐量。关键区分:prefill 吞吐受输入长度影响大,而 decode 吞吐主要受 batch size 和 GPU 算力限制。

P2 级指标用于根因分析。vllm:request_success 计数器配合 vllm:request_params 标签可定位特定 model 或 best_of 参数下的失败率。vllm:time_to_first_token_seconds 的 P99 值超过 2000ms 时,通常意味着调度器出现饥饿。

指标暴露配置实战

vLLM 默认在 /metrics 端点暴露所有指标,但生产环境建议通过 --enable-prometheus-metrics 显式启用,并配合 Prometheus 的 scrape_config 限制采集频率。

scrape_interval 选择:对于延迟类指标(如 vllm:time_per_output_token_seconds),建议 15 秒;对于显存类指标(如 vllm:gpu_cache_usage_perc),30 秒即可。过短的采集间隔(<5 秒)会引入约 2% 的额外 GPU 开销,这在 NVIDIA 2024 年 GPU 监控最佳实践 中有明确警告。

标签化设计:在 Prometheus 的 relabel_configs 中,为每个 vLLM 实例添加 model_namegpu_typeregion 标签。例如:

- source_labels: [__address__]
  target_label: gpu_type
  replacement: 'A100-80G'

这允许在 Grafana 面板中按 GPU 型号聚合对比,快速识别不同硬件上的性能差异。

延迟告警规则模板

延迟是用户感知最直接的指标。以下告警规则基于 Google SRE 手册 2023 版 的黄金信号原则,适配 vLLM 特性。

规则 1:TTFT 高延迟告警

- alert: HighTTFT
  expr: histogram_quantile(0.99, rate(vllm:time_to_first_token_seconds_bucket[5m])) > 2.0
  for: 2m
  labels:
    severity: critical
  annotations:
    summary: "P99 TTFT 超过 2 秒"

该规则使用 5 分钟滑动窗口的 P99 值,避免偶发抖动触发误报。实际阈值需根据模型复杂度调整——对于 LLaMA-70B,2 秒阈值合理;对于 Qwen-0.5B,应降至 0.5 秒。

规则 2:TPOT 异常增长

- alert: HighTPOT
  expr: rate(vllm:time_per_output_token_seconds_sum[5m]) / rate(vllm:time_per_output_token_seconds_count[5m]) > 0.1
  for: 3m

平均每个 output token 超过 100ms 意味着生成速度低于 10 tokens/s,这通常由显存带宽争用或调度器效率下降导致。vLLM GitHub Issue #4567 报告显示,当并发请求数超过 max_num_seqs 的 120% 时,TPOT 会线性恶化。

吞吐与资源利用率告警

吞吐告警需结合业务场景。对于在线推理服务,关注点在于并发容量;对于批处理任务,关注点在于 GPU 利用率。

并发饱和度告警

- alert: QueueBacklog
  expr: vllm:num_requests_waiting > vllm:max_num_seqs * 0.8
  for: 1m

当等待队列超过 max_num_seqs 的 80% 并持续 1 分钟,说明需要扩容或调整调度策略。AWS 2024 年推理优化报告 建议,此时应立即触发 auto-scaling,而非等待请求完全拒绝。

GPU 利用率告警(需配合 nvidia_exporter):

- alert: LowGPUUtilization
  expr: avg by (instance) (DCGM_FI_DEV_GPU_UTIL) < 30 and rate(vllm:num_requests_running[5m]) > 0
  for: 5m

该规则排除空闲实例,仅在有请求运行时检测利用率低于 30% 的情况。常见根因包括:batch 太小、prefill 与 decode 阶段资源分配不均、或 CPU 数据预处理成为瓶颈。

显存泄漏与 OOM 防护

显存管理是 vLLM 部署中最容易出问题的环节。vLLM 官方故障排查文档 v0.6.3 指出,超过 60% 的 OOM 事故源于 KV cache 碎片化而非实际显存不足。

显存泄漏检测

- alert: MemoryLeak
  expr: delta(vllm:gpu_cache_usage_perc[10m]) > 5 and vllm:gpu_cache_usage_perc > 85
  for: 15m

当 10 分钟内 cache 利用率增长超过 5% 且绝对值超过 85%,可能存在泄漏。正常行为下,cache 利用率应在请求完成后回落;若持续上升,说明显存回收机制异常。

OOM 预测告警

- alert: ImminentOOM
  expr: vllm:gpu_cache_usage_perc > 95
  for: 30s

预留 5% 的缓冲空间,在 OOM 实际发生前 30 秒触发告警。此时应执行降级策略:降低 max_num_seqs、减小 max_model_len,或切换至更小 batch size。在跨境访问海外云 GPU 实例时,部分团队会通过 NordVPN 跨境访问 稳定连接 AWS/GCP 的监控端点,避免公网丢包导致告警延迟。

多实例聚合与全局视图

当部署多个 vLLM 实例时,单实例告警不足以反映整体健康度。需要构建聚合指标。

全局错误率

expr: sum(rate(vllm:request_success_total{status!="200"}[5m])) / sum(rate(vllm:request_success_total[5m])) > 0.01

错误率超过 1% 时触发,通常由模型权重加载失败、API 参数非法或后端服务依赖中断引起。

实例间延迟偏差

expr: stddev by (model_name) (histogram_quantile(0.95, rate(vllm:time_to_first_token_seconds_bucket[5m]))) > 0.5

当同一模型在不同实例上的 P95 TTFT 标准差超过 0.5 秒,表明负载均衡策略失效或实例间硬件异构。Alibaba Cloud 2024 年 GPU 集群运维报告 显示,这种偏差在混合部署 A100 和 H100 的集群中尤为常见,偏差值可达 1.2 秒。

Grafana 面板设计要点

告警只是第一步,可视化面板帮助快速定位根因。以下为关键面板设计原则:

时间序列对比:将 vllm:num_requests_runningvllm:gpu_cache_usage_perc 叠加在同一图表,观察请求数增加时显存消耗的响应曲线。正常曲线应呈阶梯式上升和下降;若显存消耗持续不回落,优先检查 --gpu-memory-utilization 参数是否设置过低。

分位数热力图:使用 heatmap 可视化 vllm:time_per_output_token_seconds 的分布。当热力图出现长尾向高延迟区域扩散时,通常表明调度器在混合 prefill 和 decode 请求时出现饥饿。Meta 2024 年 LLM 推理优化论文 建议,此时应启用 --enable-chunked-prefill 参数。

成本效率面板:计算 (vllm:avg_generation_throughput_toks_per_s * 86400) / GPU 小时成本,得到每美元生成的 token 数。该指标在对比不同云服务商时至关重要——例如 RunPod 的 A100-80G 实例成本约为 AWS p4d.24xlarge 的 55%,但吞吐量通常只有后者的 70%。

FAQ

Q1:vLLM 的 Prometheus 指标端点默认端口是什么?

默认端口为 8000,路径为 /metrics。可通过 --api-server-port 参数修改,例如 --api-server-port 8080。如果使用 Docker 部署,需在 docker run 命令中添加 -p 8000:8000 映射,否则 Prometheus 无法从宿主机采集。

Q2:如何区分 prefill 和 decode 阶段的延迟指标?

vLLM 从 0.5.0 版本开始,通过 vllm:time_to_first_token_seconds 测量 prefill 阶段延迟,通过 vllm:time_per_output_token_seconds 测量 decode 阶段每个 token 的平均生成时间。前者受输入长度影响,后者受 batch size 影响。在告警规则中,建议对这两个指标设置不同的阈值:TTFT 的 P99 告警阈值建议为 2 秒,TPOT 的均值告警阈值建议为 0.1 秒。

Q3:显存使用率指标 vllm:gpu_cache_usage_perc 的数值范围是多少?

该指标返回 0 到 100 的浮点数,表示 KV cache 占 --gpu-memory-utilization 配置比例。例如设置 --gpu-memory-utilization 0.9,则指标值 90 表示占用了总显存的 81%(0.9 * 0.9)。当该值超过 95 时,vLLM 内部会开始拒绝新请求,因此告警阈值建议设在 90 到 95 之间。

参考资料

  • CNCF 2024 年度调查,Cloud Native Computing Foundation
  • 中国信通院 2024 年 AI 模型推理服务白皮书
  • NVIDIA 2024 年 GPU 监控最佳实践,NVIDIA Developer Documentation
  • Google 2023 年 SRE 手册:监控与告警黄金信号
  • vLLM 官方文档 v0.6.3:Metrics and Monitoring 章节
  • Meta 2024 年 LLM 推理优化论文:Efficient Large Language Model Serving