基于 nvitop+Prometheus+Grafana 的物理资源与 VLLM 引擎服务监控方案
一、方案背景与目标
在人工智能与高性能计算场景中,对物理资源(尤其是 GPU)的实时监控以及对 VLLM 引擎服务的性能追踪至关重要。本方案通过整合 nvitop、Prometheus 和 Grafana 三大组件,构建一套完整的监控体系,实现对 GPU 状态的实时洞察、VLLM 服务性能指标的可视化展示,以及异常状态的及时告警,为系统稳定性优化和资源合理分配提供数据支撑。
二、整体架构设计
组件 | 核心作用 |
---|---|
nvitop | 实时监控 GPU 各项核心指标(如利用率、显存占用、温度等),支持终端交互式查看,为底层数据采集提供基础能力。 |
nvitop-exporter | 将 GPU 指标转换为 Prometheus 兼容的格式,通过 HTTP 接口暴露数据,实现与 Prometheus 的数据对接。 |
Prometheus | 作为数据采集与存储引擎,按指定频率抓取 nvitop-exporter 和 VLLM 服务的指标数据,并持久化存储以便后续分析。 |
Grafana | 数据可视化平台,通过导入定制化仪表盘,以图表形式直观展示 GPU 和 VLLM 服务的关键指标,支持多维度查询与趋势分析。 |
告警系统(如邮件) | 基于 Prometheus 定义的告警规则,当 GPU 利用率、显存占用或 VLLM 服务响应异常时,自动触发告警通知,及时响应系统风险。 |
三、组件安装与配置详解
(一)nvitop 安装与启动
- 安装最新版本
通过 pip3 一键安装 nvitop 及其导出器组件,确保获取最新功能与兼容性:
pip3 install --upgrade nvitop nvitop-exporter
- 启动 nvitop-exporter 服务
指定服务监听地址为 0.0.0.0(允许所有 IP 访问),端口为 5050(默认端口,可自定义):
nvitop-exporter --bind 0.0.0.0 --port 5050
验证方式:访问 http://<服务器IP>:5050/metrics
,若返回 GPU 指标数据则服务启动成功。
(二)Prometheus 配置与容器化部署
- 配置文件编写(prometheus.yml)
# 全局配置项,适用于所有 job
global:# 设置 Prometheus 抓取目标指标的时间间隔scrape_interval: 15s # 每 15 秒抓取一次数据(默认是 1 分钟)# 设置评估告警规则的时间间隔evaluation_interval: 15s # 每 15 秒检查一次告警规则(默认是 1 分钟)# 设置每次抓取目标的最大超时时间scrape_timeout: 10s # 默认也是 10 秒# 抓取目标配置
scrape_configs:# 第一个 job:监控 vllm 推理服务- job_name: 'vllm' # job 名称,Prometheus 中标签为 job="vllm"static_configs:- targets:- '10.10.75.250:8000' # vllm 服务的地址和端口# 第二个 job:GPU 监控(使用 nvitop-exporter)- job_name: 'gpu-monitoring' # job 名称,用于标识 GPU 指标来源static_configs:- targets:- '10.10.75.250:5050' # nvitop-exporter 默认监听在 5050 端口
- 容器化部署
使用 Bitnami 官方镜像部署 Prometheus,挂载配置文件与数据存储目录,确保服务重启后数据不丢失:
docker run -d --name prometheus \-p 9090:9090 \-v /root/vllm/prometheus/data:/opt/bitnami/prometheus/data \-v /root/vllm/prometheus/prometheus.yml:/opt/bitnami/prometheus/conf/prometheus.yml \bitnami/prometheus
访问地址:http://<服务器IP>:9090
,可在 Status > Targets
中查看指标采集状态。
(三)Grafana 配置与仪表盘导入
- 容器化部署
使用官方镜像快速启动 Grafana 服务,默认端口为 3000,首次登录默认账号密码为admin/admin
docker run -d --name grafana -p 3000:3000 grafana/grafana
-
导入 nvitop 定制仪表盘
可以直接使用上传的 nvitop-dashboard-1747377827040.json 文件。
导入步骤:
登录 Grafana,进入Create > Import
;
粘贴 nvitop-dashboard-1747377827040.json 文件内容;选择 Prometheus 作为数据源,完成仪表盘加载。
同时,对于 VLLM 相关的监控,可使用 vLLM-1747376136162.json 文件,导入方式同上。
另外,还可以根据 grafana.ini 文件对 Grafana 进行更多高级配置,例如:
# 示例配置,可根据实际情况修改
[server]
protocol = http
http_port = 3000
domain = localhost
root_url = %(protocol)s://%(domain)s:%(http_port)s/
四、告警规则配置建议
在 Prometheus 中定义以下告警规则(示例),通过 Grafana 或邮件系统触发通知:
yaml
groups:- name: gpu-alertsrules:- alert: HighGPUUtilizationexpr: gpu_utilization_Percentage > 90for: 5mlabels:severity: criticalannotations:summary: "GPU利用率过高"description: "GPU利用率超过90%持续5分钟"- alert: HighMemoryUsageexpr: gpu_memory_used_MiB / gpu_memory_total_MiB > 0.8for: 10mlabels:severity: warningannotations:summary: "显存占用过高"description: "显存使用率超过80%持续10分钟"
五、方案优势与扩展建议
(一)核心优势
- 全链路监控:覆盖硬件层(GPU)与服务层(VLLM),实现从资源到应用的端到端洞察。
- 高可扩展性:基于 Prometheus 生态,可轻松接入其他服务(如 CPU / 内存监控、自定义业务指标)。
- 可视化能力:Grafana 提供灵活的仪表盘定制功能,支持多租户、数据下钻等高级特性。
(二)扩展方向
- 分布式部署:在多节点集群中,通过 Prometheus 的
scrape_configs
配置多个 nvitop-exporter 实例,实现跨服务器 GPU 监控。 - 持久化存储:将 Prometheus 数据持久化到远程存储(如 InfluxDB、Cortex),支持长期趋势分析。
- 自动化响应:结合 Kubernetes,通过告警触发容器扩缩容或服务重启,提升系统自愈能力。
六、总结
本方案通过 nvitop+Prometheus+Grafana 的组合,构建了一套高效、易用的监控体系,适用于 AI 推理、高性能计算等对 GPU 资源敏感的场景。通过实时数据采集、可视化展示和智能告警,可显著提升系统运维效率,为业务稳定性和资源优化提供有力支撑。建议根据实际环境调整配置参数,并定期更新组件版本以获取最新功能与安全补丁。