GLM-4v-9b实战手册:Prometheus+Grafana监控vLLM GPU利用率与QPS
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数据源
- 登录Grafana(http://localhost:3000)
- 左侧菜单 → Configuration → Data sources
- 点击"Add data source",选择Prometheus
- URL填写:http://localhost:9090
- 点击"Save & test",显示绿色成功提示
5.2 导入现成仪表板
你可以使用社区提供的vLLM监控仪表板:
- 左侧菜单 → Dashboards → Import
- 输入仪表板ID:18674(vLLM监控专用)
- 选择Prometheus数据源
- 点击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仪表板的变化:
- GPU利用率:应该从低水平上升到较高数值
- QPS图表:显示每秒处理的请求数量
- 延迟图表:随着并发增加,延迟可能会上升
- 队列长度:如果处理能力不足,队列会开始堆积
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告警通知
- 在Grafana中配置通知渠道(邮件、Slack、Webhook等)
- 在仪表板中针对特定面板设置告警
- 设置阈值和通知条件
8. 常见问题与解决方案
8.1 指标无法收集
问题:Prometheus无法连接到vLLM的指标端点
解决:
# 检查vLLM是否正在运行
ps aux | grep vllm
# 检查端口是否开放
netstat -tlnp | grep 8000
# 检查防火墙设置
sudo ufw status
8.2 数据显示不正常
问题:Grafana中显示"No data"或数据异常
解决:
- 检查Prometheus目标状态:http://localhost:9090/targets
- 确认所有targets都是"UP"状态
- 检查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星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。
更多推荐




所有评论(0)