vLLM监控体系:GLM-4-9B-Chat-1M服务健康检查方案

1. 引言

当你把GLM-4-9B-Chat-1M这样的大模型部署到生产环境后,最让人头疼的问题就是:我怎么知道它现在运行得好不好?GPU利用率是不是正常?请求响应速度有没有变慢?错误率有没有突然升高?

这些问题如果靠人工盯着,不仅效率低下,还容易遗漏关键问题。今天我就来分享一套完整的vLLM服务监控方案,帮你实时掌握模型服务的健康状况。这套方案基于Prometheus和Grafana,配置简单,效果直观,让你对模型服务的运行状态了如指掌。

2. 监控体系设计思路

2.1 核心监控指标

一个好的监控体系需要覆盖以下几个关键维度:

  • 资源利用率:GPU内存使用率、GPU计算利用率、系统内存和CPU使用情况
  • 服务性能:请求延迟(P50、P95、P99)、吞吐量(QPS)、并发请求数
  • 服务质量:错误率、请求成功率、超时率
  • 业务指标:token生成速度、请求内容分布

2.2 技术选型

我们选择Prometheus + Grafana的组合,原因很简单:

  • Prometheus擅长时序数据采集和存储,支持灵活的查询语言
  • Grafana提供强大的数据可视化能力,配置简单效果美观
  • 两者都是开源工具,社区活跃,文档丰富

3. 环境准备与部署

3.1 安装Prometheus

首先下载并安装Prometheus:

# 下载最新版Prometheus
wget https://github.com/prometheus/prometheus/releases/download/v2.47.0/prometheus-2.47.0.linux-amd64.tar.gz
tar xvfz prometheus-*.tar.gz
cd prometheus-*

# 创建配置文件
cat <<EOF > prometheus.yml
global:
  scrape_interval: 15s

scrape_configs:
  - job_name: 'vllm'
    static_configs:
      - targets: ['localhost:8000']  # vLLM metrics端口
  - job_name: 'node'
    static_configs:
      - targets: ['localhost:9100']  # node-exporter端口
EOF

# 启动Prometheus
./prometheus --config.file=prometheus.yml

3.2 安装Grafana

# Ubuntu/Debian系统
wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -
echo "deb https://packages.grafana.com/oss/deb stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list
sudo apt-get update
sudo apt-get install -y grafana

# 启动Grafana
sudo systemctl start grafana-server
sudo systemctl enable grafana-server

3.3 安装节点监控组件

# 安装node-exporter监控系统资源
wget https://github.com/prometheus/node_exporter/releases/download/v1.6.1/node_exporter-1.6.1.linux-amd64.tar.gz
tar xvfz node_exporter-*.tar.gz
cd node_exporter-*
./node_exporter &

# 安装NVIDIA GPU监控
wget https://github.com/utkuozdemir/nvidia_gpu_exporter/releases/download/v1.2.0/nvidia_gpu_exporter_1.2.0_linux_x86_64.tar.gz
tar xvfz nvidia_gpu_exporter_*.tar.gz
./nvidia_gpu_exporter &

4. vLLM监控配置

4.1 启用vLLM指标导出

启动vLLM服务时,需要开启metrics功能:

python -m vllm.entrypoints.openai.api_server \
  --model THUDM/glm-4-9b-chat-1m \
  --tensor-parallel-size 2 \
  --served-model-name glm4 \
  --port 8000 \
  --metric-interval-ms 5000 \  # 每5秒收集一次指标
  --disable-log-requests

4.2 关键监控指标说明

vLLM会自动暴露以下重要指标:

  • vllm_num_requests_running:当前正在处理的请求数
  • vllm_num_requests_waiting:等待处理的请求数
  • vllm_request_latency_seconds:请求延迟分布
  • vllm_gpu_utilization:GPU利用率
  • vllm_gpu_memory_utilization:GPU内存使用率

5. Grafana仪表板配置

5.1 数据源配置

在Grafana界面中添加Prometheus数据源:

  • 访问 http://localhost:3000
  • 用户名/密码:admin/admin
  • 配置 → Data Sources → Add data source
  • 选择Prometheus,URL填写 http://localhost:9090

5.2 创建监控仪表板

新建一个名为"vLLM GLM-4监控"的仪表板,添加以下面板:

GPU监控面板

# GPU利用率
avg(rate(nvidia_gpu_duty_cycle[1m])) by (gpu) * 100

# GPU内存使用率
avg(rate(nvidia_gpu_memory_used_bytes[1m])) by (gpu) / avg(rate(nvidia_gpu_memory_total_bytes[1m])) by (gpu) * 100

服务性能面板

# 请求QPS
rate(vllm_num_requests_started[1m])

# 平均延迟
histogram_quantile(0.5, rate(vllm_request_latency_seconds_bucket[1m]))

资源使用面板

# 系统内存使用
100 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes * 100)

# CPU使用率
100 - (avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[1m])) * 100)

6. 告警规则配置

6.1 Prometheus告警规则

创建告警规则文件 alerts.yml

groups:
- name: vllm_alerts
  rules:
  - alert: HighGPUUsage
    expr: avg(rate(nvidia_gpu_duty_cycle[5m])) by (gpu) * 100 > 90
    for: 5m
    labels:
      severity: warning
    annotations:
      summary: "GPU利用率过高"
      description: "GPU {{ $labels.gpu }} 利用率持续超过90%"

  - alert: HighRequestLatency
    expr: histogram_quantile(0.95, rate(vllm_request_latency_seconds_bucket[5m])) > 5
    for: 2m
    labels:
      severity: critical
    annotations:
      summary: "请求延迟过高"
      description: "95%分位请求延迟超过5秒"

  - alert: HighErrorRate
    expr: rate(vllm_num_requests_failed[5m]) / rate(vllm_num_requests_started[5m]) > 0.05
    for: 2m
    labels:
      severity: critical
    annotations:
      summary: "错误率过高"
      description: "请求错误率超过5%"

6.2 告警通知配置

配置告警通知到常用的渠道:

# 配置alertmanager.yml
route:
  receiver: 'slack-notifications'
  routes:
  - match:
      severity: critical
    receiver: 'slack-critical'

receivers:
- name: 'slack-notifications'
  slack_configs:
  - api_url: 'https://hooks.slack.com/services/your/webhook/url'
    channel: '#alerts'
    
- name: 'slack-critical'
  slack_configs:
  - api_url: 'https://hooks.slack.com/services/your/webhook/url'
    channel: '#critical-alerts'

7. 实际效果展示

部署完成后,你可以在Grafana中看到完整的监控仪表板。我这边实际运行的效果是:

GPU利用率面板实时显示各显卡的使用情况,当模型处理请求时能看到明显的利用率峰值。请求延迟面板帮助我发现某个时间段的性能下降,经过排查发现是同时有其他任务在占用GPU资源。

错误率监控在一次模型更新后发挥了重要作用,及时发现了兼容性问题,避免了影响扩大。内存使用监控则帮助我合理调整了vLLM的配置参数,避免了OOM错误。

8. 总结

搭建这套监控体系后,我对GLM-4-9B-Chat-1M服务的运行状态有了全面的掌握。不再需要手动检查日志,所有关键指标都能实时可视化,出现问题时也能第一时间收到告警。

实际使用中,建议根据你的具体需求调整监控指标和告警阈值。比如对于在线服务,可能需要更关注P99延迟;对于批处理任务,可能更关注吞吐量和资源利用率。这套方案提供了基础框架,你可以在此基础上不断完善和优化。

监控不是一劳永逸的事情,需要根据业务发展和技术演进持续调整。但有了这个基础,你就能更好地保证模型服务的稳定性和性能。


获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐