MogFace-large部署教程:Prometheus+Grafana监控GPU利用率与QPS指标

发布时间:2026/7/17 4:23:46

MogFace-large部署教程:Prometheus+Grafana监控GPU利用率与QPS指标 MogFace-large部署教程PrometheusGrafana监控GPU利用率与QPS指标你是不是也遇到过这种情况部署了一个像MogFace-large这样强大的人脸检测模型用起来效果确实不错但心里总有点不踏实——服务器GPU到底用了多少模型每秒能处理多少请求会不会突然因为资源不足而卡住这些问题如果靠人工盯着不仅效率低下还容易遗漏关键信息。今天我就来分享一套完整的监控方案帮你用PrometheusGrafana搭建一个实时监控系统让你对MogFace-large的运行状态了如指掌。1. 为什么需要监控MogFace-large在开始动手之前我们先聊聊为什么监控如此重要。MogFace-large作为当前SOTA的人脸检测模型在Wider Face榜单上表现优异但它的强大能力也意味着更高的计算需求。在实际部署中你可能会遇到这些问题资源使用不透明GPU利用率时高时低不知道瓶颈在哪里性能波动难追踪QPS每秒查询数忽上忽下影响服务稳定性问题排查困难出现性能下降时缺乏历史数据对比分析容量规划盲目不知道什么时候需要扩容只能凭感觉有了监控系统你就能实时看到GPU的显存使用率、计算利用率模型推理的QPS、响应时间系统内存、CPU的使用情况历史趋势和异常告警这就像给模型装上了“仪表盘”让你从“盲开”变成“可视化管理”。2. 环境准备与组件介绍2.1 监控系统架构我们的监控方案基于经典的PrometheusGrafana组合用户请求 → MogFace-large模型 → NVIDIA DCGM Exporter → Prometheus → Grafana各个组件的作用NVIDIA DCGM Exporter采集GPU指标利用率、显存、温度等Node Exporter采集系统指标CPU、内存、磁盘、网络等Prometheus时序数据库存储所有监控数据Grafana数据可视化平台展示漂亮的监控图表2.2 前置条件在开始部署前请确保你的环境满足以下条件已部署MogFace-large模型通过ModelScope和Gradio加载模型前端推理代码路径/usr/local/bin/webui.py模型能够正常运行系统要求Ubuntu 18.04 或 CentOS 7Docker 和 Docker Compose推荐方式NVIDIA GPU 对应驱动至少2GB可用内存网络要求服务器可访问外网以下载镜像如需外网访问Grafana请确保防火墙开放相应端口3. 分步部署监控系统3.1 安装Docker和Docker Compose如果你还没有安装Docker可以按照以下步骤操作# 更新软件包索引 sudo apt-get update # 安装必要的依赖 sudo apt-get install -y \ apt-transport-https \ ca-certificates \ curl \ gnupg \ lsb-release # 添加Docker官方GPG密钥 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg # 添加Docker仓库 echo \ deb [archamd64 signed-by/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable | sudo tee /etc/apt/sources.list.d/docker.list /dev/null # 安装Docker引擎 sudo apt-get update sudo apt-get install -y docker-ce docker-ce-cli containerd.io # 安装Docker Compose sudo curl -L https://github.com/docker/compose/releases/download/v2.20.0/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose sudo chmod x /usr/local/bin/docker-compose # 验证安装 docker --version docker-compose --version3.2 创建监控配置文件创建一个专门目录来存放所有监控配置# 创建监控目录 mkdir -p ~/mogface-monitoring cd ~/mogface-monitoring # 创建docker-compose配置文件 cat docker-compose.yml EOF version: 3.8 services: # Prometheus时序数据库 prometheus: image: prom/prometheus:latest container_name: prometheus restart: unless-stopped volumes: - ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml - prometheus_data:/prometheus command: - --config.file/etc/prometheus/prometheus.yml - --storage.tsdb.path/prometheus - --web.console.libraries/etc/prometheus/console_libraries - --web.console.templates/etc/prometheus/consoles - --storage.tsdb.retention.time30d - --web.enable-lifecycle ports: - 9090:9090 networks: - monitoring # Grafana可视化平台 grafana: image: grafana/grafana:latest container_name: grafana restart: unless-stopped volumes: - grafana_data:/var/lib/grafana - ./grafana/provisioning:/etc/grafana/provisioning environment: - GF_SECURITY_ADMIN_PASSWORDadmin123 - GF_USERS_ALLOW_SIGN_UPfalse ports: - 3000:3000 networks: - monitoring # NVIDIA GPU指标采集器 dcgm-exporter: image: nvcr.io/nvidia/k8s/dcgm-exporter:3.1.7-3.1.4-ubuntu20.04 container_name: dcgm-exporter restart: unless-stopped privileged: true environment: - NVIDIA_VISIBLE_DEVICESall volumes: - /run/nvidia:/run/nvidia - /sys:/sys command: - -f - /etc/dcgm-exporter/dcp-metrics-included.csv ports: - 9400:9400 networks: - monitoring # 系统指标采集器 node-exporter: image: prom/node-exporter:latest container_name: node-exporter restart: unless-stopped volumes: - /proc:/host/proc:ro - /sys:/host/sys:ro - /:/rootfs:ro command: - --path.procfs/host/proc - --path.rootfs/rootfs - --path.sysfs/host/sys - --collector.filesystem.mount-points-exclude^/(sys|proc|dev|host|etc)($$|/) ports: - 9100:9100 networks: - monitoring networks: monitoring: driver: bridge volumes: prometheus_data: grafana_data: EOF3.3 配置Prometheus创建Prometheus的配置文件告诉它要采集哪些指标# 创建配置目录 mkdir -p prometheus # 创建Prometheus主配置文件 cat prometheus/prometheus.yml EOF global: scrape_interval: 15s evaluation_interval: 15s # 告警规则配置 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: [node-exporter:9100] # 监控GPU指标 - job_name: dcgm-exporter static_configs: - targets: [dcgm-exporter:9400] # 监控MogFace-large应用需要自定义指标 - job_name: mogface-app static_configs: - targets: [host.docker.internal:8000] # 假设MogFace运行在8000端口 metrics_path: /metrics scrape_interval: 10s EOF3.4 配置Grafana数据源和仪表盘创建Grafana的自动配置# 创建Grafana配置目录 mkdir -p grafana/provisioning/datasources mkdir -p grafana/provisioning/dashboards # 创建数据源配置 cat grafana/provisioning/datasources/datasource.yml EOF apiVersion: 1 datasources: - name: Prometheus type: prometheus access: proxy url: http://prometheus:9090 isDefault: true editable: true EOF # 创建仪表盘配置 cat grafana/provisioning/dashboards/dashboard.yml EOF apiVersion: 1 providers: - name: default orgId: 1 folder: type: file disableDeletion: false editable: true options: path: /etc/grafana/provisioning/dashboards EOF3.5 启动监控系统一切准备就绪现在启动所有服务# 进入监控目录 cd ~/mogface-monitoring # 启动所有服务 docker-compose up -d # 查看服务状态 docker-compose ps你应该看到类似下面的输出Name Command State Ports -------------------------------------------------------------------- dcgm-exporter /usr/bin/dcgm-exporter ... Up 0.0.0.0:9400-9400/tcp grafana /run.sh Up 0.0.0.0:3000-3000/tcp node-exporter /bin/node_exporter --pa ... Up 0.0.0.0:9100-9100/tcp prometheus /bin/prometheus --config ... Up 0.0.0.0:9090-9090/tcp3.6 验证服务运行检查各个服务是否正常运行# 检查Prometheus curl http://localhost:9090/-/healthy # 检查Node Exporter curl http://localhost:9100/metrics | head -20 # 检查DCGM Exporter curl http://localhost:9400/metrics | grep DCGM_FI_DEV_GPU_UTIL # 检查Grafana curl http://localhost:3000/api/health4. 为MogFace-large添加自定义指标上面的监控系统已经可以采集GPU和系统指标但我们还需要监控MogFace应用本身的性能指标比如QPS、响应时间等。4.1 安装Python监控库首先在MogFace-large的运行环境中安装必要的Python库# 激活你的Python环境如果是虚拟环境 # source /path/to/your/venv/bin/activate # 安装Prometheus Python客户端 pip install prometheus-client4.2 修改MogFace应用代码我们需要修改MogFace的WebUI代码添加指标采集功能。找到你的webui.py文件通常在/usr/local/bin/webui.py在文件开头添加#!/usr/bin/env python3 # -*- coding: utf-8 -*- import gradio as gr import cv2 import numpy as np from modelscope.pipelines import pipeline from modelscope.utils.constant import Tasks import time from prometheus_client import start_http_server, Counter, Histogram, Gauge import threading # Prometheus指标定义 # 启动Prometheus指标服务器在8000端口 start_http_server(8000) # 定义指标 # QPS计数器总请求数 REQUEST_COUNT Counter( mogface_requests_total, Total number of requests to MogFace ) # 响应时间直方图 REQUEST_LATENCY Histogram( mogface_request_duration_seconds, Request latency in seconds, buckets[0.1, 0.5, 1.0, 2.0, 5.0, 10.0] ) # 活跃请求数 ACTIVE_REQUESTS Gauge( mogface_active_requests, Number of active requests ) # GPU显存使用率通过DCGM Exporter获取这里只是占位 GPU_MEMORY_USAGE Gauge( mogface_gpu_memory_usage_percent, GPU memory usage percentage ) # 当前QPS最近1分钟 CURRENT_QPS Gauge( mogface_qps_current, Current QPS (requests per second) ) # 错误计数器 ERROR_COUNT Counter( mogface_errors_total, Total number of errors ) # 原有的MogFace代码 # 这里是你原有的模型加载和推理代码 # 为了示例我假设原有代码结构如下 # 加载模型 print(正在加载MogFace-large模型...) face_detection pipeline(Tasks.face_detection, damo/cv_resnet101_face-detection_cvpr22papermogface) print(模型加载完成) def detect_faces(image): 人脸检测函数 - 添加了监控指标 # 增加活跃请求数 ACTIVE_REQUESTS.inc() # 记录请求开始时间 start_time time.time() try: # 增加请求计数 REQUEST_COUNT.inc() # 执行人脸检测原有逻辑 result face_detection(image) # 计算处理时间 processing_time time.time() - start_time # 记录响应时间 REQUEST_LATENCY.observe(processing_time) # 这里可以添加绘制检测框的代码 # 为了简化示例直接返回结果 return result except Exception as e: # 记录错误 ERROR_COUNT.inc() print(f检测出错: {e}) raise e finally: # 减少活跃请求数 ACTIVE_REQUESTS.dec() # Gradio界面 # 这里是你原有的Gradio界面代码 # 需要将原有的检测函数替换为上面带监控的detect_faces函数 def process_image(input_image): 处理上传的图片 if input_image is None: return None # 调用带监控的检测函数 result detect_faces(input_image) # 原有的结果处理逻辑 # 这里应该是绘制检测框并返回图片的代码 # 为了示例我们简单返回原图 return input_image # 创建Gradio界面 with gr.Blocks() as demo: gr.Markdown(# MogFace-large 人脸检测) with gr.Row(): with gr.Column(): input_image gr.Image(label上传图片, typenumpy) detect_btn gr.Button(开始检测) with gr.Column(): output_image gr.Image(label检测结果) # 示例图片 gr.Examples( examples[ [example1.jpg], [example2.jpg] ], inputsinput_image ) # 绑定事件 detect_btn.click( fnprocess_image, inputsinput_image, outputsoutput_image ) # QPS计算线程 def calculate_qps(): 后台线程每分钟计算一次QPS last_count 0 while True: # 每分钟计算一次 time.sleep(60) # 获取当前总请求数 current_count REQUEST_COUNT._value.get() # 计算这一分钟的QPS qps (current_count - last_count) / 60.0 last_count current_count # 更新QPS指标 CURRENT_QPS.set(qps) print(f当前QPS: {qps:.2f}) # 启动QPS计算线程 qps_thread threading.Thread(targetcalculate_qps, daemonTrue) qps_thread.start() # 启动应用 if __name__ __main__: print(MogFace-large监控版已启动) print(Prometheus指标地址: http://localhost:8000/metrics) print(Gradio界面地址: http://localhost:7860) # 启动Gradio应用 demo.launch( server_name0.0.0.0, server_port7860, shareFalse )4.3 更新Prometheus配置修改Prometheus配置添加对MogFace应用指标的采集# 编辑Prometheus配置 cat prometheus/prometheus.yml EOF # 监控MogFace应用自定义指标 - job_name: mogface-metrics static_configs: - targets: [host.docker.internal:8000] scrape_interval: 10s metrics_path: /metrics EOF # 重启Prometheus使配置生效 docker-compose restart prometheus5. 配置Grafana监控仪表盘现在监控数据已经采集好了我们需要在Grafana中创建漂亮的监控面板。5.1 登录Grafana打开浏览器访问http://你的服务器IP:3000使用默认账号密码登录用户名admin密码admin123我们在docker-compose中设置的首次登录会要求修改密码你可以修改或跳过5.2 导入预制的监控仪表盘Grafana社区有很多现成的仪表盘模板我们可以直接导入使用导入Node Exporter仪表盘点击左侧菜单栏的 → Import输入仪表盘ID:1860(Node Exporter Full)点击Load选择Prometheus数据源点击Import导入NVIDIA GPU监控仪表盘同样点击Import输入仪表盘ID:12239(NVIDIA DCGM Exporter)点击Load选择数据源点击Import创建MogFace专属监控面板虽然社区没有现成的MogFace面板但我们可以自己创建一个。点击Create → Dashboard → Add new panel面板1QPS监控查询语句rate(mogface_requests_total[1m])面板标题MogFace QPS (Requests Per Second)可视化类型GraphY轴单位req/s面板2响应时间监控查询语句histogram_quantile(0.95, rate(mogface_request_duration_seconds_bucket[5m]))面板标题95%响应时间可视化类型Stat单位seconds面板3活跃请求数查询语句mogface_active_requests面板标题活跃请求数可视化类型Gauge阈值设置绿色(0-5)黄色(5-10)红色(10)面板4错误率监控查询语句rate(mogface_errors_total[5m]) / rate(mogface_requests_total[5m]) * 100面板标题错误率可视化类型Graph单位percent (0-100)面板5GPU利用率查询语句DCGM_FI_DEV_GPU_UTIL{gpu0}面板标题GPU利用率可视化类型Gauge单位percent (0-100)面板6GPU显存使用查询语句DCGM_FI_DEV_FB_USED{gpu0} / DCGM_FI_DEV_FB_TOTAL{gpu0} * 100面板标题GPU显存使用率可视化类型Graph单位percent5.3 设置告警规则当监控指标异常时我们可以设置告警及时通知在Grafana中进入Alerting → Alert rules点击New alert rule告警规则1高错误率规则名称MogFace High Error Rate查询rate(mogface_errors_total[5m]) / rate(mogface_requests_total[5m]) * 100 5条件当错误率超过5%时触发持续时间2分钟告警规则2高响应时间规则名称MogFace High Latency查询histogram_quantile(0.95, rate(mogface_request_duration_seconds_bucket[5m])) 2条件当95%响应时间超过2秒时触发持续时间5分钟告警规则3GPU过载规则名称GPU Overload查询DCGM_FI_DEV_GPU_UTIL{gpu0} 90条件当GPU利用率超过90%时触发持续时间3分钟配置告警通知点击Contact points添加通知渠道支持Email、Slack、Webhook、钉钉、企业微信等配置好后在告警规则中关联通知渠道6. 实际效果展示与使用技巧6.1 监控面板效果部署完成后你的Grafana仪表盘应该包含以下几个关键面板系统资源概览CPU使用率、内存使用率、磁盘IO、网络流量实时显示系统负载情况GPU监控专区GPU利用率实时曲线显存使用情况已用/总量GPU温度监控每个GPU卡的详细指标MogFace应用监控实时QPS曲线图响应时间分布P50、P95、P99活跃请求数仪表错误率趋势图业务指标看板今日总请求量平均响应时间成功率统计峰值QPS记录6.2 实用监控技巧设置监控阈值GPU利用率正常70%警告70-90%危险90%响应时间正常1s警告1-3s危险3s错误率正常1%警告1-5%危险5%创建监控大屏将关键指标放在一个屏幕上使用Stat面板显示当前值使用Graph面板显示趋势使用Gauge面板显示使用率定期检查点每日检查错误率和响应时间每周分析性能趋势预测容量需求每月回顾告警记录优化监控规则性能优化建议如果GPU利用率持续低于30%考虑合并服务如果响应时间P952s需要优化模型或增加资源如果错误率5%需要检查代码或模型问题6.3 故障排查指南当监控系统发出告警时可以按照以下步骤排查问题1GPU利用率过高检查步骤 1. 查看是哪个进程占用GPUnvidia-smi 2. 检查是否有异常请求查看QPS是否突增 3. 检查模型推理时间响应时间是否变长 4. 考虑增加GPU资源或优化批处理大小问题2QPS下降检查步骤 1. 查看系统资源CPU、内存、磁盘是否瓶颈 2. 检查网络连接是否有网络延迟 3. 检查应用日志是否有异常错误 4. 检查模型加载模型是否正常加载问题3响应时间变长检查步骤 1. 查看GPU利用率是否达到瓶颈 2. 检查批处理大小是否过大导致处理慢 3. 检查输入数据图片尺寸是否过大 4. 检查系统负载是否有其他进程影响7. 总结通过这套PrometheusGrafana监控方案你现在可以实时掌握MogFace-large的运行状态GPU利用率、显存使用、QPS、响应时间等关键指标一目了然快速定位性能问题通过历史数据对比快速找到性能瓶颈智能告警及时响应设置合理的告警规则问题发生时第一时间通知数据驱动容量规划基于监控数据科学规划资源扩容这套监控方案不仅适用于MogFace-large也可以轻松扩展到其他AI模型。监控的价值不在于收集数据而在于通过数据做出更好的决策。希望这套方案能帮助你更好地管理和优化MogFace-large的部署。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。

相关新闻