CLIP-GmP-ViT-L-14部署教程:Prometheus+Grafana监控GPU利用率与QPS

CLIP-GmP-ViT-L-14部署教程:Prometheus+Grafana监控GPU利用率与QPS CLIP-GmP-ViT-L-14部署教程PrometheusGrafana监控GPU利用率与QPS今天咱们来聊聊一个挺有意思的话题——怎么给一个AI模型服务装上“仪表盘”。想象一下你刚部署好一个强大的CLIP模型它能看懂图片、理解文字还能告诉你它们有多匹配。但问题来了你怎么知道它跑得怎么样GPU是不是在偷懒每秒能处理多少请求会不会突然卡住这就是监控的价值。没有监控的AI服务就像开车不看仪表盘——你不知道速度、油量、水温只能凭感觉出问题了才发现。今天我要分享的就是给CLIP-GmP-ViT-L-14模型服务装上专业的监控系统让你对服务的运行状态了如指掌。1. 项目快速了解CLIP-GmP-ViT-L-14是个经过特殊优化的视觉-语言模型。简单说它原本就能理解图片和文字之间的关系经过几何参数化微调后在ImageNet和ObjectNet这类标准测试集上准确率能达到90%左右。这个数字在同类模型里算是相当不错的成绩。项目本身提供了一个基于Gradio的Web界面用起来挺方便单图单文匹配上传一张图片输入一段文字它就能告诉你这俩有多配批量检索一张图片可以同时匹配多个文字描述按相似度从高到低排序部署也很简单进到项目目录运行个启动脚本就行。但今天咱们的重点不是怎么启动服务而是怎么“看清”这个服务。2. 为什么需要监控你可能觉得“服务能跑起来不就行了监控有那么重要吗”让我给你几个实实在在的理由2.1 资源使用情况一目了然GPU很贵无论是自己买的还是租的云服务器都得知道钱花得值不值。监控能告诉你GPU利用率是多少是一直满负荷还是经常空闲显存用了多少会不会因为显存不足而崩溃CPU和内存的使用情况怎么样2.2 服务性能实时掌握用户可不会等你慢慢排查问题。监控能让你知道当前的QPS每秒查询数是多少看到请求的响应时间分布及时发现性能下降的趋势2.3 问题预警和快速定位服务不可能永远不出问题关键是出问题前能不能提前预警出问题后能不能快速找到原因有没有历史数据可以分析2.4 容量规划和成本优化基于监控数据你可以判断当前配置是否够用预测什么时候需要扩容找到优化资源使用的方法说白了监控就是给你的AI服务装上“眼睛”和“耳朵”让你不再是“盲人摸象”。3. 监控方案选型市面上监控工具不少为什么选PrometheusGrafana这个组合咱们简单对比一下3.1 方案对比监控需求PrometheusGrafana其他方案如Zabbix为什么选前者容器化支持原生支持Kubernetes对Docker友好需要额外配置AI服务常部署在容器环境时间序列数据专门为时间序列数据设计通用型监控时间序列是功能之一监控指标基本都是时间序列查询语言PromQL功能强大且灵活相对固定可以灵活地分析数据可视化Grafana图表丰富社区模板多自带界面相对简单做出来的仪表盘好看又实用社区生态CNCF毕业项目生态完善传统企业级方案有问题容易找到解决方案学习成本中等但资料丰富相对较高上手不算太难3.2 我们的监控架构整个监控系统分三层用户请求 → CLIP服务 → 指标暴露 → Prometheus采集 → Grafana展示具体组件Prometheus负责采集和存储监控数据Grafana负责数据可视化和告警Node Exporter采集服务器基础指标CPU、内存、磁盘等NVIDIA DCGM Exporter采集GPU相关指标自定义指标CLIP服务自身的业务指标这个架构的好处是模块化每个部分各司其职出了问题也好排查。4. 一步步搭建监控系统好了理论讲得差不多了咱们动手实操。我会尽量把每一步都讲清楚确保你能跟着做出来。4.1 环境准备首先确认你的环境已经部署了CLIP-GmP-ViT-L-14服务服务器有GPU不然监控GPU就没意义了有root或sudo权限网络可以访问外网下载安装包用检查CLIP服务是否正常运行cd /root/CLIP-GmP-ViT-L-14 ./start.sh # 访问 http://localhost:7860 确认服务正常4.2 安装PrometheusPrometheus是监控系统的核心负责采集和存储数据。4.2.1 下载和安装# 创建Prometheus用户和目录 sudo useradd --no-create-home --shell /bin/false prometheus sudo mkdir /etc/prometheus sudo mkdir /var/lib/prometheus sudo chown prometheus:prometheus /var/lib/prometheus # 下载最新版Prometheus cd /tmp wget https://github.com/prometheus/prometheus/releases/download/v2.45.0/prometheus-2.45.0.linux-amd64.tar.gz tar xvf prometheus-2.45.0.linux-amd64.tar.gz cd prometheus-2.45.0.linux-amd64 # 复制二进制文件 sudo cp prometheus /usr/local/bin/ sudo cp promtool /usr/local/bin/ sudo chown prometheus:prometheus /usr/local/bin/prometheus sudo chown prometheus:prometheus /usr/local/bin/promtool # 复制配置文件 sudo cp -r consoles /etc/prometheus/ sudo cp -r console_libraries /etc/prometheus/ sudo cp prometheus.yml /etc/prometheus/ sudo chown -R prometheus:prometheus /etc/prometheus4.2.2 配置Prometheus编辑配置文件/etc/prometheus/prometheus.ymlglobal: scrape_interval: 15s # 每15秒采集一次 evaluation_interval: 15s # 每15秒评估一次规则 rule_files: # - first_rules.yml # - second_rules.yml scrape_configs: # 监控Prometheus自身 - job_name: prometheus static_configs: - targets: [localhost:9090] # 监控服务器基础指标 - job_name: node static_configs: - targets: [localhost:9100] # 监控GPU指标 - job_name: gpu static_configs: - targets: [localhost:9400] # 监控CLIP服务业务指标 - job_name: clip-service static_configs: - targets: [localhost:8000] # 假设CLIP服务暴露指标在8000端口 metrics_path: /metrics scrape_interval: 10s # 业务指标采集可以频繁一些4.2.3 创建系统服务创建服务文件/etc/systemd/system/prometheus.service[Unit] DescriptionPrometheus Wantsnetwork-online.target Afternetwork-online.target [Service] Userprometheus Groupprometheus Typesimple ExecStart/usr/local/bin/prometheus \ --config.file /etc/prometheus/prometheus.yml \ --storage.tsdb.path /var/lib/prometheus/ \ --web.console.templates/etc/prometheus/consoles \ --web.console.libraries/etc/prometheus/console_libraries \ --web.listen-address0.0.0.0:9090 [Install] WantedBymulti-user.target4.2.4 启动Prometheussudo systemctl daemon-reload sudo systemctl start prometheus sudo systemctl enable prometheus sudo systemctl status prometheus检查是否正常运行# 查看服务状态 sudo systemctl status prometheus # 检查端口 ss -tulpn | grep 9090 # 访问Web界面 # 浏览器打开 http://服务器IP:90904.3 安装Node ExporterNode Exporter负责采集服务器的基础指标比如CPU、内存、磁盘、网络等。4.3.1 下载和安装# 下载Node Exporter cd /tmp wget https://github.com/prometheus/node_exporter/releases/download/v1.6.0/node_exporter-1.6.0.linux-amd64.tar.gz tar xvf node_exporter-1.6.0.linux-amd64.tar.gz cd node_exporter-1.6.0.linux-amd64 # 复制二进制文件 sudo cp node_exporter /usr/local/bin/ sudo chown prometheus:prometheus /usr/local/bin/node_exporter # 创建系统用户如果还没创建 sudo useradd -rs /bin/false node_exporter4.3.2 创建系统服务创建服务文件/etc/systemd/system/node_exporter.service[Unit] DescriptionNode Exporter Afternetwork.target [Service] Usernode_exporter Groupnode_exporter Typesimple ExecStart/usr/local/bin/node_exporter [Install] WantedBymulti-user.target4.3.3 启动Node Exportersudo systemctl daemon-reload sudo systemctl start node_exporter sudo systemctl enable node_exporter sudo systemctl status node_exporter验证安装# 检查指标端点 curl http://localhost:9100/metrics | head -204.4 安装NVIDIA DCGM Exporter这是监控GPU的关键组件能采集GPU利用率、显存使用、温度等指标。4.4.1 前提条件确保已经安装了NVIDIA驱动和DockerDCGM Exporter通常用Docker运行# 检查NVIDIA驱动 nvidia-smi # 检查Docker docker --version4.4.2 使用Docker运行# 拉取镜像 docker pull nvcr.io/nvidia/k8s/dcgm-exporter:3.1.7-3.1.4-ubuntu20.04 # 运行容器 docker run -d \ --restart unless-stopped \ --name dcgm-exporter \ --runtimenvidia \ -p 9400:9400 \ nvcr.io/nvidia/k8s/dcgm-exporter:3.1.7-3.1.4-ubuntu20.04 \ -f /etc/dcgm-exporter/dcp-metrics-included.csv4.4.3 验证安装# 检查容器状态 docker ps | grep dcgm-exporter # 查看GPU指标 curl http://localhost:9400/metrics | grep -i gpu | head -104.5 为CLIP服务添加业务指标光有系统指标还不够我们还需要CLIP服务自身的业务指标比如QPS、请求延迟、错误率等。4.5.1 安装Python监控库首先在CLIP服务环境中安装Prometheus的Python客户端cd /root/CLIP-GmP-ViT-L-14 # 如果有requirements.txt添加以下行 # prometheus-client0.17.1 # 或者直接安装 pip install prometheus-client0.17.14.5.2 修改CLIP服务代码我们需要修改app.py添加指标暴露功能。这里给个示例修改# 在文件开头添加 from prometheus_client import start_http_server, Counter, Histogram, Gauge import time # 定义指标 REQUEST_COUNT Counter(clip_request_total, Total number of requests) REQUEST_LATENCY Histogram(clip_request_latency_seconds, Request latency in seconds) GPU_UTILIZATION Gauge(clip_gpu_utilization, GPU utilization percentage) GPU_MEMORY_USED Gauge(clip_gpu_memory_used, GPU memory used in MB) GPU_MEMORY_TOTAL Gauge(clip_gpu_memory_total, Total GPU memory in MB) ACTIVE_REQUESTS Gauge(clip_active_requests, Number of active requests) # 启动指标服务器在8000端口 start_http_server(8000) # 在预测函数中添加指标记录 def predict(image, text): REQUEST_COUNT.inc() # 请求计数1 ACTIVE_REQUESTS.inc() # 活跃请求1 start_time time.time() try: # 原有的预测逻辑 # ... # 记录GPU信息需要安装pynvml try: import pynvml pynvml.nvmlInit() handle pynvml.nvmlDeviceGetHandleByIndex(0) util pynvml.nvmlDeviceGetUtilizationRates(handle) memory_info pynvml.nvmlDeviceGetMemoryInfo(handle) GPU_UTILIZATION.set(util.gpu) GPU_MEMORY_USED.set(memory_info.used / 1024 / 1024) # 转换为MB GPU_MEMORY_TOTAL.set(memory_info.total / 1024 / 1024) except: pass # 如果获取GPU信息失败忽略 finally: ACTIVE_REQUESTS.dec() # 活跃请求-1 REQUEST_LATENCY.observe(time.time() - start_time) # 记录延迟 return result4.5.3 重启CLIP服务cd /root/CLIP-GmP-ViT-L-14 ./stop.sh ./start.sh4.5.4 验证业务指标# 检查指标端点 curl http://localhost:8000/metrics | head -304.6 安装和配置GrafanaGrafana是我们的仪表盘用来可视化所有监控数据。4.6.1 安装Grafana# 添加Grafana仓库 sudo apt-get install -y software-properties-common wget 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 # 安装Grafana sudo apt-get update sudo apt-get install -y grafana # 启动服务 sudo systemctl start grafana-server sudo systemctl enable grafana-server sudo systemctl status grafana-server4.6.2 配置Grafana访问http://服务器IP:3000初始用户名/密码admin/admin首次登录会要求修改添加数据源点击左侧齿轮图标 → Data sources → Add data source选择 PrometheusURL填写http://localhost:9090点击 Save Test应该显示Data source is working4.7 导入监控仪表盘Grafana社区有很多现成的仪表盘模板我们可以直接导入使用。4.7.1 导入Node Exporter仪表盘在Grafana中点击左侧号 → Import输入仪表盘ID1860Node Exporter Full选择Prometheus数据源点击 Import4.7.2 导入GPU监控仪表盘同样点击 Import输入仪表盘ID12239NVIDIA DCGM Exporter选择Prometheus数据源点击 Import4.7.3 创建CLIP业务监控仪表盘社区可能没有现成的CLIP监控模板我们需要自己创建。点击左侧号 → Dashboard → Add new panel。这里我建议创建几个关键面板面板1请求QPS每秒查询数查询语句rate(clip_request_total[1m])可视化Stat 或 Graph标题CLIP服务 QPS面板2请求延迟分布查询语句clip_request_latency_seconds_bucket可视化Heatmap 或 Histogram标题请求延迟分布面板3GPU利用率查询语句DCGM_FI_DEV_GPU_UTIL或clip_gpu_utilization可视化Gauge 或 Graph标题GPU利用率面板4显存使用情况查询语句DCGM_FI_DEV_FB_USED和DCGM_FI_DEV_FB_FREE可视化Graph标题GPU显存使用面板5活跃请求数查询语句clip_active_requests可视化Stat标题当前活跃请求面板6错误率如果有错误指标查询语句rate(clip_errors_total[5m]) / rate(clip_request_total[5m]) * 100可视化Gauge标题错误率%5. 监控指标详解现在监控系统搭好了但你知道看哪些指标吗每个指标代表什么意义我来给你详细解释一下。5.1 GPU相关指标5.1.1 GPU利用率GPU Utilization是什么GPU计算单元的使用百分比正常范围对于推理服务30%-70%比较理想太高怎么办接近100%可能成为瓶颈考虑优化模型或增加GPU太低怎么办GPU闲置可能请求量不足或批处理大小不合适5.1.2 显存使用GPU Memory Usage是什么GPU显存的使用量需要关注已用显存 vs 总显存危险信号使用率超过90%可能触发OOM内存不足优化建议如果显存不足可以减小批处理大小或使用更小的模型5.1.3 GPU温度GPU Temperature是什么GPU的工作温度安全范围通常低于85°C温度过高可能影响性能和使用寿命检查散热5.2 业务指标5.2.1 QPSQueries Per Second是什么每秒处理的请求数怎么看观察曲线是否平稳有无突增或突降瓶颈分析QPS上不去可能是GPU瓶颈、CPU瓶颈或代码瓶颈5.2.2 请求延迟Request Latency是什么从收到请求到返回响应的时间关键分位点P50中位数、P95、P99用户体验P95延迟直接影响用户体验异常排查延迟突然增加可能因为资源竞争或代码问题5.2.3 错误率Error Rate是什么失败请求占总请求的比例可接受范围通常要求低于1%错误类型区分业务错误如输入不合法和系统错误如OOM5.3 系统指标5.3.1 CPU使用率是什么CPU的繁忙程度AI服务特点推理服务通常CPU使用率不高但预处理可能消耗CPU5.3.2 内存使用是什么系统内存的使用情况关注点是否有内存泄漏Swap使用情况5.3.3 网络I/O是什么网络流入流出数据量对于CLIP服务图片上传可能消耗较大带宽6. 实战监控数据分析与优化有了监控数据关键是怎么用。我来分享几个实际场景6.1 场景一GPU利用率低怎么办现象GPU利用率只有20%但QPS也不高。可能原因请求量确实少批处理batching没做好数据传输成为瓶颈预处理耗时太长排查步骤# 1. 查看请求分布 # 在Grafana中观察QPS曲线看是否均匀 # 2. 检查预处理时间 # 可以在代码中添加预处理耗时指标 # 3. 尝试调整批处理 # 修改代码收集更多请求后一起推理优化建议实现请求批处理多个请求一起推理优化图片预处理流程使用更高效的数据加载方式6.2 场景二响应时间变长怎么办现象P95延迟从100ms增加到了500ms。可能原因请求量突增GPU显存不足触发交换系统有其他进程竞争资源模型缓存失效排查步骤# 1. 查看同时段的QPS # 确认是否请求量增加 # 2. 检查GPU显存 # 观察显存使用曲线 # 3. 查看系统负载 # 使用top或htop命令 # 4. 检查日志 # 查看服务日志有无异常优化建议如果请求量增加考虑水平扩展如果显存不足优化模型或增加显存设置请求队列避免过载6.3 场景三如何做容量规划监控数据用途了解当前负载平均QPS、峰值QPS计算资源需求根据QPS和延迟要求计算需要多少GPU预测未来需求基于增长趋势预测何时需要扩容简单计算公式所需GPU数量 峰值QPS × 平均延迟(秒) / 目标GPU利用率示例峰值QPS100平均延迟0.1秒目标GPU利用率60%所需GPU100 × 0.1 / 0.6 ≈ 16.7个请求在队列中这意味着一个GPU可能不够需要考虑使用更强大的GPU部署多个实例优化模型减少延迟7. 高级监控技巧基础监控搭建好了再来几个进阶技巧让你的监控更强大。7.1 设置告警规则监控不能只靠人盯着看得设置自动告警。在Prometheus中添加告警规则创建文件/etc/prometheus/alerts.ymlgroups: - name: clip_alerts rules: # GPU利用率过高告警 - alert: HighGPUUsage expr: DCGM_FI_DEV_GPU_UTIL 90 for: 5m labels: severity: warning annotations: summary: GPU利用率过高 description: GPU利用率持续5分钟超过90% # GPU显存不足告警 - alert: HighGPUMemoryUsage expr: DCGM_FI_DEV_FB_USED / DCGM_FI_DEV_FB_TOTAL 0.9 for: 2m labels: severity: critical annotations: summary: GPU显存不足 description: GPU显存使用率超过90% # 服务错误率过高告警 - alert: HighErrorRate expr: rate(clip_errors_total[5m]) / rate(clip_request_total[5m]) 0.05 for: 2m labels: severity: warning annotations: summary: 服务错误率过高 description: 错误率超过5% # 请求延迟过高告警 - alert: HighRequestLatency expr: histogram_quantile(0.95, rate(clip_request_latency_seconds_bucket[5m])) 1 for: 5m labels: severity: warning annotations: summary: 请求延迟过高 description: P95延迟超过1秒在Prometheus配置中引用这个文件rule_files: - alerts.yml7.2 配置Grafana告警除了Prometheus告警Grafana也支持告警功能在Grafana面板中点击图表标题 → Edit选择 Alert 标签页创建告警规则比如当QPS低于10持续5分钟时告警当活跃请求数超过100时告警配置通知渠道邮件、Slack、钉钉等7.3 监控数据长期存储Prometheus默认只保存15天数据如果需要更长时间的数据方案一增加Prometheus存储时间# 在Prometheus启动参数中添加 --storage.tsdb.retention.time90d方案二使用远程存储# 在prometheus.yml中添加 remote_write: - url: http://remote-storage:8086/api/v1/prom/write remote_read: - url: http://remote-storage:8086/api/v1/prom/read方案三使用Thanos或Cortex这些是Prometheus的长期存储方案适合生产环境。7.4 监控仪表盘优化技巧按角色定制仪表盘开发人员关注错误率、延迟、代码性能运维人员关注资源使用、系统负载、服务状态业务人员关注QPS、可用性、用户体验使用变量提高灵活性// 在Grafana中定义变量 { current: { text: GPU 0, value: 0 }, options: [ { text: GPU 0, value: 0 }, { text: GPU 1, value: 1 } ] }设置自动刷新实时监控5秒刷新日常查看30秒刷新历史分析不自动刷新8. 常见问题排查即使监控系统搭好了使用过程中也可能遇到问题。这里整理了一些常见问题和解决方法。8.1 Prometheus相关问题问题1Prometheus启动失败# 查看日志 sudo journalctl -u prometheus -f # 常见原因和解决 # 1. 端口被占用修改配置中的端口 # 2. 权限问题检查文件权限确保prometheus用户有权限 # 3. 配置错误检查prometheus.yml语法问题2无法采集指标# 测试指标端点 curl http://localhost:9100/metrics # Node Exporter curl http://localhost:9400/metrics # GPU Exporter curl http://localhost:8000/metrics # CLIP服务 # 在Prometheus Web界面检查Targets状态 # 访问 http://服务器IP:9090/targets8.2 GPU监控相关问题问题1DCGM Exporter看不到GPU指标# 检查NVIDIA驱动 nvidia-smi # 检查Docker运行状态 docker logs dcgm-exporter # 检查是否传递了GPU设备 docker inspect dcgm-exporter | grep -i gpu问题2GPU指标不准确确保使用最新版本的DCGM Exporter检查NVIDIA驱动版本是否兼容考虑直接使用nvidia-smi定期采集8.3 CLIP服务监控问题问题1业务指标不更新# 检查指标暴露代码 # 确保在请求处理中正确调用了指标方法 print(请求计数:, REQUEST_COUNT._value.get()) # 调试用 # 检查指标服务器端口 netstat -tulpn | grep 8000问题2指标影响性能如果担心监控代码影响性能# 使用线程或异步方式更新指标 import threading from prometheus_client import Gauge class AsyncGauge: def __init__(self, name, description): self.gauge Gauge(name, description) self.value 0 def set_async(self, value): # 在实际应用中可以使用队列或线程池 self.value value threading.Thread(targetself._update).start() def _update(self): self.gauge.set(self.value)8.4 Grafana相关问题问题1无法连接数据源检查Prometheus是否运行sudo systemctl status prometheus检查防火墙sudo ufw status在Grafana中测试数据源连接查看Grafana日志sudo journalctl -u grafana-server -f问题2仪表盘显示No Data检查查询语句是否正确检查时间范围是否合适检查指标名称是否正确区分大小写在Prometheus中直接查询验证9. 总结监控系统搭建是个循序渐进的过程不要指望一步到位。我的建议是第一步基础监控今天就能做部署Prometheus Node Exporter部署Grafana导入基础仪表盘为CLIP服务添加基础业务指标第二步完善监控一周内完成添加GPU监控设置关键告警优化仪表盘按需定制第三步高级监控持续优化实现长期数据存储建立监控规范和流程与CI/CD流程集成建立容量规划机制监控的价值不是收集数据而是从数据中获取洞察。好的监控能帮你提前发现问题而不是事后救火优化资源使用节省成本提升用户体验减少投诉支持业务决策数据驱动最后记住监控系统本身也需要监控。定期检查监控系统的健康状态确保它正常工作。毕竟一个坏掉的监控系统比没有监控更危险——它会给你一种虚假的安全感。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。