GLM-4v-9b实战手册:Prometheus+Grafana监控vLLM GPU利用率与QPS

1. 引言:为什么需要监控大模型推理服务?

当你部署了GLM-4v-9b这样的多模态大模型后,最关心的问题是什么?是推理速度太慢?GPU资源浪费严重?还是不知道服务能承受多少并发请求?

这些都是实际部署中一定会遇到的问题。通过Prometheus和Grafana搭建监控系统,你可以:

  • 实时查看GPU使用情况,避免资源浪费或瓶颈
  • 监控查询每秒速率(QPS),了解服务处理能力
  • 设置告警阈值,在性能下降时及时收到通知
  • 优化资源配置,基于数据做出明智的扩容决策

本文将手把手带你搭建完整的监控系统,让你对GLM-4v-9b服务的运行状态了如指掌。

2. 环境准备与组件介绍

2.1 需要安装的组件

在开始之前,确保你的环境中已经部署了以下基础服务:

  • vLLM:用于高效推理GLM-4v-9b模型
  • Prometheus:指标收集和存储系统
  • Grafana:数据可视化平台
  • Node Exporter(可选):主机指标收集
  • NVIDIA DCGM Exporter:GPU指标导出

2.2 各组件的作用

简单理解每个组件的职责:

  • vLLM:负责实际运行模型推理,它会暴露性能指标
  • Prometheus:定期从vLLM抓取指标数据并存储起来
  • Grafana:从Prometheus读取数据,用漂亮的图表展示出来
  • DCGM Exporter:专门收集NVIDIA GPU的详细使用数据

3. 安装与配置监控组件

3.1 安装Prometheus

首先下载并安装Prometheus:

# 创建监控专用目录
mkdir -p /opt/monitoring
cd /opt/monitoring

# 下载Prometheus
wget https://github.com/prometheus/prometheus/releases/download/v2.51.0/prometheus-2.51.0.linux-amd64.tar.gz
tar xvfz prometheus-*.tar.gz
cd prometheus-*

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

scrape_configs:
  - job_name: 'vllm'
    static_configs:
      - targets: ['localhost:8000']  # vLLM默认指标端口

  - job_name: 'node'
    static_configs:
      - targets: ['localhost:9100']  # Node Exporter端口

  - job_name: 'dcgm'
    static_configs:
      - targets: ['localhost:9400']  # DCGM Exporter端口
EOF

# 启动Prometheus(后台运行)
nohup ./prometheus --config.file=prometheus.yml > prometheus.log 2>&1 &

3.2 安装Grafana

# 下载并安装Grafana
wget https://dl.grafana.com/oss/release/grafana-10.4.1.linux-amd64.tar.gz
tar xvfz grafana-*.tar.gz
cd grafana-*

# 启动Grafana
nohup ./bin/grafana-server web > grafana.log 2>&1 &

Grafana默认运行在3000端口,打开浏览器访问 http://你的服务器IP:3000,初始账号密码都是admin。

3.3 安装NVIDIA DCGM Exporter

# 使用Docker安装最简单
docker run -d --rm \
  --name dcgm-exporter \
  --runtime=nvidia \
  -p 9400:9400 \
  nvcr.io/nvidia/k8s/dcgm-exporter:3.3.5-3.2.2-ubuntu22.04

4. 配置vLLM暴露监控指标

4.1 启动vLLM时启用指标

关键的一步是确保vLLM启动时暴露监控指标:

# 启动GLM-4v-9b时添加指标参数
python -m vllm.entrypoints.api_server \
  --model THUDM/glm-4v-9b \
  --tensor-parallel-size 1 \
  --gpu-memory-utilization 0.9 \
  --max-num-seqs 256 \
  --metric-interval-ms 1000 \          # 指标收集间隔1秒
  --disable-log-stats \                 # 禁用日志统计,使用指标代替
  --port 8000

4.2 验证指标是否正常

访问指标端点确认数据正常:

curl http://localhost:8000/metrics

你应该能看到类似这样的输出:

# HELP vllm:num_requests_running Number of requests currently running
# TYPE vllm:num_requests_running gauge
vllm:num_requests_running 0

# HELP vllm:num_requests_waiting Number of requests waiting in the queue
# TYPE vllm:num_requests_waiting gauge
vllm:num_requests_waiting 0

5. Grafana仪表板配置

5.1 添加Prometheus数据源

  1. 登录Grafana(http://localhost:3000)
  2. 左侧菜单 → Configuration → Data sources
  3. 点击"Add data source",选择Prometheus
  4. URL填写:http://localhost:9090
  5. 点击"Save & test",显示绿色成功提示

5.2 导入现成仪表板

你可以使用社区提供的vLLM监控仪表板:

  1. 左侧菜单 → Dashboards → Import
  2. 输入仪表板ID:18674(vLLM监控专用)
  3. 选择Prometheus数据源
  4. 点击Import完成导入

5.3 关键监控指标解读

导入仪表板后,你会看到这些重要指标:

  • GPU利用率:显示每张GPU的使用百分比
  • 显存使用量:当前显存占用情况
  • QPS(查询每秒):每秒处理的请求数量
  • 请求延迟:从接收到响应的平均时间
  • 队列长度:等待处理的请求数量

6. 实战:监控GLM-4v-9b性能

6.1 模拟负载测试

让我们创建一个简单的测试脚本,模拟真实用户请求:

# load_test.py
import requests
import time
import threading

def send_request():
    payload = {
        "model": "THUDM/glm-4v-9b",
        "messages": [
            {"role": "user", "content": "描述这张图片的内容"},
            {"role": "user", "content": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQ..."}
        ],
        "max_tokens": 512
    }
    
    start_time = time.time()
    response = requests.post("http://localhost:8000/v1/chat/completions", json=payload)
    end_time = time.time()
    
    return end_time - start_time

# 启动多个线程模拟并发
def run_load_test(num_requests=10, concurrency=2):
    results = []
    threads = []
    
    for i in range(concurrency):
        t = threading.Thread(target=lambda: results.extend([send_request() for _ in range(num_requests//concurrency)]))
        threads.append(t)
        t.start()
    
    for t in threads:
        t.join()
    
    return results

if __name__ == "__main__":
    latencies = run_load_test(20, 4)
    print(f"平均延迟: {sum(latencies)/len(latencies):.2f}秒")

6.2 观察监控指标变化

运行负载测试的同时,观察Grafana仪表板的变化:

  1. GPU利用率:应该从低水平上升到较高数值
  2. QPS图表:显示每秒处理的请求数量
  3. 延迟图表:随着并发增加,延迟可能会上升
  4. 队列长度:如果处理能力不足,队列会开始堆积

7. 设置告警规则

7.1 配置Prometheus告警

创建告警规则文件:

# alert-rules.yml
groups:
- name: vllm-alerts
  rules:
  - alert: HighGPUUsage
    expr: avg(dcgm_gpu_utilization) > 90
    for: 5m
    labels:
      severity: warning
    annotations:
      summary: "GPU使用率过高"
      description: "GPU使用率持续5分钟超过90%"
  
  - alert: LowQPS
    expr: rate(vllm:num_requests_completed_total[5m]) < 1
    for: 10m
    labels:
      severity: warning
    annotations:
      summary: "QPS过低"
      description: "过去10分钟平均QPS低于1"
  
  - alert: HighQueueLength
    expr: vllm:num_requests_waiting > 10
    for: 2m
    labels:
      severity: critical
    annotations:
      summary: "请求队列堆积"
      description: "等待处理的请求超过10个,持续2分钟"

在prometheus.yml中添加告警配置:

rule_files:
  - "alert-rules.yml"

7.2 配置Grafana告警通知

  1. 在Grafana中配置通知渠道(邮件、Slack、Webhook等)
  2. 在仪表板中针对特定面板设置告警
  3. 设置阈值和通知条件

8. 常见问题与解决方案

8.1 指标无法收集

问题:Prometheus无法连接到vLLM的指标端点

解决

# 检查vLLM是否正在运行
ps aux | grep vllm

# 检查端口是否开放
netstat -tlnp | grep 8000

# 检查防火墙设置
sudo ufw status

8.2 数据显示不正常

问题:Grafana中显示"No data"或数据异常

解决

  1. 检查Prometheus目标状态:http://localhost:9090/targets
  2. 确认所有targets都是"UP"状态
  3. 检查vLLM启动参数是否正确包含--metric-interval-ms

8.3 GPU指标缺失

问题:看不到GPU相关的监控数据

解决

# 检查DCGM Exporter是否正常运行
docker ps | grep dcgm

# 手动访问DCGM指标端点
curl http://localhost:9400/metrics

9. 优化建议与最佳实践

9.1 监控系统优化

  • 调整抓取间隔:根据需求调整Prometheus的scrape_interval
  • 数据保留策略:设置适当的数据保留时间,避免磁盘爆满
  • 分层监控:对开发、测试、生产环境设置不同的监控策略

9.2 vLLM性能调优

基于监控数据,你可以做这些优化:

  • 调整batch大小:根据GPU使用率和延迟找到最佳batch size
  • 优化并发数:基于QPS和延迟曲线确定最佳并发配置
  • 资源分配:根据实际使用情况调整GPU内存分配

9.3 扩展监控范围

除了基础监控,还可以考虑添加:

  • 业务指标监控:成功率、错误类型分布等
  • 成本监控:每次推理的GPU成本估算
  • 用户体验监控:端到端延迟、超时比例等

10. 总结

通过本文的指导,你已经成功搭建了GLM-4v-9b模型的完整监控系统。现在你可以:

  • ✅ 实时查看GPU利用率和显存使用情况
  • ✅ 监控服务的QPS和请求延迟
  • ✅ 设置告警及时发现问题
  • ✅ 基于数据优化模型部署配置

监控不是目的,而是手段。通过持续观察这些指标,你能够更好地理解模型的服务特性,做出更明智的架构决策,最终提供更稳定高效的服务。

记住,好的监控系统就像汽车的仪表盘,它不能让你跑得更快,但能让你知道什么时候该加速、什么时候该检修,确保旅程安全顺畅。


获取更多AI镜像

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

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐