CasRel模型部署教程:Prometheus+Grafana监控GPU显存/延迟/QPS指标

发布时间:2026/5/22 0:33:56

CasRel模型部署教程:Prometheus+Grafana监控GPU显存/延迟/QPS指标 CasRel模型部署教程PrometheusGrafana监控GPU显存/延迟/QPS指标1. 前言为什么需要监控模型服务当你部署了CasRel关系抽取模型后可能会遇到这样的问题服务运行一段时间后变慢了或者突然出现内存不足的错误。这时候如果没有监控系统就像在黑暗中开车——你根本不知道问题出在哪里什么时候会发生。本教程将带你一步步搭建完整的监控系统用Prometheus收集CasRel模型的运行数据用Grafana展示直观的监控仪表盘。学完这篇教程你将能够实时查看GPU显存使用情况避免内存溢出监控模型推理延迟及时发现性能问题统计QPS每秒查询数了解服务负载情况设置告警在问题发生前收到通知2. 环境准备与组件介绍2.1 所需软件组件在开始之前确保你的服务器上已经安装以下组件Docker和Docker Compose用于容器化部署NVIDIA Docker RuntimeGPU支持CasRel模型服务已经部署好的关系抽取服务2.2 监控系统架构我们的监控系统包含三个核心组件Prometheus负责收集和存储监控数据Grafana负责数据可视化和仪表盘展示Node Exporter收集系统级指标CPU、内存、磁盘等自定义指标导出器专门收集CasRel模型的GPU和性能指标3. 部署Prometheus监控系统3.1 创建配置文件目录首先创建监控系统的配置文件目录mkdir -p monitoring/{prometheus,grafana} cd monitoring3.2 配置Prometheus创建Prometheus的配置文件prometheus/prometheus.ymlglobal: scrape_interval: 15s # 每15秒收集一次数据 evaluation_interval: 15s scrape_configs: - job_name: prometheus static_configs: - targets: [localhost:9090] - job_name: node-exporter static_configs: - targets: [node-exporter:9100] - job_name: casrel-model metrics_path: /metrics static_configs: - targets: [casrel-model:8000] # 假设CasRel服务运行在8000端口 scrape_interval: 5s # 模型指标更频繁地收集3.3 创建Docker Compose文件创建docker-compose.yml来一键启动所有服务version: 3.8 services: prometheus: image: prom/prometheus:latest container_name: prometheus ports: - 9090:9090 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/console_templates restart: unless-stopped grafana: image: grafana/grafana:latest container_name: grafana ports: - 3000:3000 volumes: - grafana_data:/var/lib/grafana - ./grafana/provisioning:/etc/grafana/provisioning environment: - GF_SECURITY_ADMIN_PASSWORDadmin123 restart: unless-stopped depends_on: - prometheus node-exporter: image: prom/node-exporter:latest container_name: node-exporter ports: - 9100:9100 volumes: - /proc:/host/proc:ro - /sys:/host/sys:ro - /:/rootfs:ro command: - --path.procfs/host/proc - --path.sysfs/host/sys - --collector.filesystem.ignored-mount-points - ^/(sys|proc|dev|host|etc|rootfs/var/lib/docker/containers|rootfs/var/lib/docker/overlay2|rootfs/run/docker/netns|rootfs/var/lib/docker/aufs)($$|/) restart: unless-stopped volumes: prometheus_data: grafana_data:3.4 启动监控服务运行以下命令启动监控基础设施docker-compose up -d等待几分钟后你可以访问Prometheus: http://localhost:9090Grafana: http://localhost:3000 (用户名: admin, 密码: admin123)4. 为CasRel模型添加指标导出4.1 安装Python监控库首先在CasRel模型环境中安装必要的监控库pip install prometheus-client psutil pynvml4.2 创建指标导出器创建metrics_exporter.py文件from prometheus_client import start_http_server, Gauge, Counter, Histogram import time import psutil import pynvml import threading from datetime import datetime # 初始化GPU监控 try: pynvml.nvmlInit() GPU_AVAILABLE True except: GPU_AVAILABLE False print(GPU monitoring not available) # 定义监控指标 GPU_MEMORY_USAGE Gauge(gpu_memory_usage_bytes, GPU memory usage in bytes, [gpu_id]) GPU_UTILIZATION Gauge(gpu_utilization_percent, GPU utilization percentage, [gpu_id]) MODEL_LATENCY Histogram(model_inference_latency_seconds, Model inference latency in seconds) MODEL_QPS Counter(model_requests_total, Total model requests, [status]) SYSTEM_MEMORY Gauge(system_memory_usage_bytes, System memory usage in bytes) def collect_gpu_metrics(): 收集GPU指标 if not GPU_AVAILABLE: return device_count pynvml.nvmlDeviceGetCount() for i in range(device_count): handle pynvml.nvmlDeviceGetHandleByIndex(i) info pynvml.nvmlDeviceGetMemoryInfo(handle) utilization pynvml.nvmlDeviceGetUtilizationRates(handle) GPU_MEMORY_USAGE.labels(gpu_idstr(i)).set(info.used) GPU_UTILIZATION.labels(gpu_idstr(i)).set(utilization.gpu) def collect_system_metrics(): 收集系统内存指标 memory psutil.virtual_memory() SYSTEM_MEMORY.set(memory.used) def metrics_collector(): 定期收集指标 while True: collect_gpu_metrics() collect_system_metrics() time.sleep(5) def start_metrics_server(port8000): 启动指标服务器 # 启动指标收集线程 collector_thread threading.Thread(targetmetrics_collector, daemonTrue) collector_thread.start() # 启动HTTP服务器 start_http_server(port) print(fMetrics server started on port {port}) # 在模型推理函数中添加监控 def monitor_inference(func): 监控装饰器用于包装模型推理函数 def wrapper(*args, **kwargs): start_time time.time() try: result func(*args, **kwargs) MODEL_QPS.labels(statussuccess).inc() return result except Exception as e: MODEL_QPS.labels(statuserror).inc() raise e finally: latency time.time() - start_time MODEL_LATENCY.observe(latency) return wrapper # 示例如何装饰现有的推理函数 # monitor_inference # def predict(text): # # 原有的推理逻辑 # return result4.3 集成到CasRel服务修改你的CasRel服务代码集成监控功能from flask import Flask, request, jsonify from metrics_exporter import start_metrics_server, monitor_inference import threading app Flask(__name__) # 启动指标服务器 metrics_thread threading.Thread(targetstart_metrics_server, daemonTrue) metrics_thread.start() # 模拟CasRel推理函数 monitor_inference def casrel_predict(text): 这里是原有的CasRel推理逻辑 返回SPO三元组 # 你的模型推理代码在这里 # 例如result model.predict(text) return {triplets: []} app.route(/predict, methods[POST]) def predict(): text request.json.get(text, ) result casrel_predict(text) return jsonify(result) app.route(/metrics) def metrics(): # Prometheus会自动处理这个端点 pass if __name__ __main__: app.run(host0.0.0.0, port5000)5. 配置Grafana监控仪表盘5.1 添加Prometheus数据源登录Grafana (http://localhost:3000)进入Configuration → Data Sources点击Add data source选择PrometheusURL填写: http://prometheus:9090点击Save Test5.2 导入CasRel监控仪表盘创建grafana/provisioning/dashboards/dashboard.ymlapiVersion: 1 providers: - name: CasRel Dashboard orgId: 1 folder: type: file disableDeletion: false updateIntervalSeconds: 10 options: path: /etc/grafana/provisioning/dashboards创建JSON格式的仪表盘定义文件或者使用Grafana的UI创建以下面板5.3 关键监控面板配置GPU显存使用面板Query:gpu_memory_usage_bytes{gpu_id0} / 1024 / 1024 / 1024(转换为GB)Visualization: Stat 或 GaugeTitle: GPU显存使用 (GB)模型延迟面板Query:histogram_quantile(0.95, rate(model_inference_latency_seconds_bucket[5m]))Visualization: GraphTitle: 95%分位延迟 (秒)QPS监控面板Query:rate(model_requests_total[5m])Visualization: GraphTitle: 请求率 (QPS)系统内存面板Query:system_memory_usage_bytes / 1024 / 1024 / 1024(转换为GB)Visualization: GraphTitle: 系统内存使用 (GB)6. 设置告警规则6.1 配置Prometheus告警创建prometheus/alert.rules.ymlgroups: - name: casrel-alerts rules: - alert: HighGPUMemoryUsage expr: gpu_memory_usage_bytes{gpu_id0} / gpu_memory_usage_bytes{gpu_id0} offset 5m 1.2 for: 5m labels: severity: warning annotations: summary: GPU内存使用快速增长 description: GPU 0内存使用在5分钟内增长超过20% - alert: HighModelLatency expr: histogram_quantile(0.95, rate(model_inference_latency_seconds_bucket[5m])) 5 for: 10m labels: severity: critical annotations: summary: 模型延迟过高 description: 95%分位延迟超过5秒 - alert: ServiceDown expr: up{jobcasrel-model} 0 for: 1m labels: severity: critical annotations: summary: CasRel服务下线 description: CasRel模型服务已停止响应在prometheus/prometheus.yml中添加告警配置rule_files: - alert.rules.yml alerting: alertmanagers: - static_configs: - targets: # - alertmanager:9093 # 如果需要更复杂的告警管理6.2 重启服务应用告警规则docker-compose down docker-compose up -d7. 实战测试与验证7.1 测试监控系统运行测试脚本生成一些负载import requests import time import random # 测试文本样本 test_texts [ 马云是阿里巴巴集团的创始人他于1964年出生于浙江省杭州市。, 清华大学位于北京市是中国著名的综合性大学成立于1911年。, 特斯拉公司由埃隆·马斯克创立主要生产电动汽车和清洁能源产品。 ] def stress_test(url, num_requests100): for i in range(num_requests): text random.choice(test_texts) try: start_time time.time() response requests.post(url, json{text: text}, timeout10) latency time.time() - start_time print(fRequest {i1}: {response.status_code}, Latency: {latency:.3f}s) except Exception as e: print(fRequest {i1} failed: {str(e)}) time.sleep(0.1) # 控制请求频率 if __name__ __main__: stress_test(http://localhost:5000/predict, 50)7.2 验证监控数据访问Prometheus (http://localhost:9090)在Graph标签页中输入指标名称如gpu_memory_usage_bytes查看是否有数据产生检查Grafana仪表盘确认数据正确显示8. 总结与最佳实践通过本教程你已经成功搭建了CasRel模型的完整监控系统。现在你可以✅ 实时监控GPU显存使用情况预防内存溢出✅ 跟踪模型推理延迟优化性能问题✅ 统计QPS指标了解服务负载 capacity✅ 设置告警规则及时发现问题8.1 日常维护建议定期检查每天查看一次仪表盘关注趋势变化容量规划根据QPS和内存使用趋势提前规划扩容性能优化利用延迟指标识别性能瓶颈告警优化根据实际运行情况调整告警阈值8.2 故障排查指南当收到告警时可以按照以下步骤排查检查GPU显存是否接近极限考虑批量优化或模型裁剪分析延迟峰值是否同时有高QPS考虑限流或扩容验证服务状态检查服务日志确认是否异常重启资源监控检查CPU、内存、磁盘IO等系统级指标8.3 进一步优化方向添加业务指标监控如抽取准确率、召回率等实现自动化扩缩容 based on监控指标集成日志系统实现全链路追踪添加自定义指标监控特定业务场景现在你的CasRel模型服务已经有了眼睛和耳朵能够实时告诉你它的状态和健康情况。Happy monitoring!获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。

相关新闻