DeepSeek-R1-Distill-Qwen-1.5B模型监控:Prometheus+Grafana监控方案
1. 引言
1.1 业务场景描述
随着大语言模型在实际生产环境中的广泛应用,对模型服务的稳定性、性能和资源消耗进行持续监控变得至关重要。DeepSeek-R1-Distill-Qwen-1.5B 是基于 DeepSeek-R1 强化学习数据蒸馏技术优化后的 Qwen 1.5B 推理模型,具备出色的数学推理、代码生成与逻辑推理能力,已部署为 GPU 加速的 Web 服务(通过 Gradio 实现)。然而,在高并发请求或长时间运行下,GPU 利用率、内存占用、响应延迟等关键指标可能出现异常,影响用户体验。
当前仅依赖日志文件和手动检查的方式难以实现精细化运维。因此,亟需一套自动化、可视化、可告警的监控系统来保障服务可靠性。
1.2 现有方案痛点
- 缺乏实时性:无法实时感知模型服务状态变化
- 无历史趋势分析:难以定位性能退化问题
- 多维度指标缺失:缺少 CPU/GPU/内存/请求延迟等综合视图
- 告警机制空白:故障发生后才能被动响应
1.3 解决方案预告
本文将详细介绍如何为 DeepSeek-R1-Distill-Qwen-1.5B 模型服务构建一套完整的 Prometheus + Grafana 监控体系。我们将从环境准备、指标暴露、数据采集到可视化展示全流程实践,最终实现:
- 实时采集模型服务的资源使用情况(GPU、CPU、内存)
- 记录每轮推理的请求延迟与 token 输出速率
- 构建专业级仪表盘,支持多维度分析
- 配置阈值告警,提前发现潜在风险
该方案适用于所有基于 Python + FastAPI/Gradio 构建的大模型推理服务,具有高度可复用性。
2. 技术方案选型
2.1 为什么选择 Prometheus + Grafana?
| 方案 | 优势 | 劣势 | 适用性 |
|---|---|---|---|
| Prometheus + Grafana | 开源免费、生态完善、拉取式架构适合静态服务、天然支持时间序列 | 存储周期有限、写入性能一般 | ✅ 高度契合模型服务监控需求 |
| Zabbix | 传统企业级监控,支持主动探测 | 配置复杂、界面老旧、扩展性差 | ❌ 不适合云原生AI服务 |
| ELK Stack | 日志分析强项,但监控非核心设计 | 资源消耗大、配置繁琐 | ⚠️ 过重,主要用于日志而非指标 |
| Datadog / NewRelic | 商业产品,功能强大 | 成本高昂,不适合自建集群 | ❌ 不符合成本控制要求 |
核心结论:Prometheus 作为 CNCF 毕业项目,已成为云原生监控事实标准;Grafana 提供顶级可视化能力,二者组合是当前最主流的技术选型。
2.2 指标暴露方式对比
为了使 Prometheus 能够抓取指标,需在应用端暴露/metrics接口。常见方式如下:
| 方式 | 描述 | 是否采用 |
|---|---|---|
prometheus_client库直接集成 | 在主进程中注册指标并暴露 HTTP 端点 | ✅ 是(推荐) |
| Sidecar Exporter | 使用独立进程导出系统指标(如 nvidia-smi-exporter) | ✅ 是(补充) |
| Pushgateway | 主动推送指标至中间网关 | ❌ 否(仅适用于批处理任务) |
我们采用“主进程指标 + NVIDIA Exporter”的混合模式,兼顾应用层与硬件层监控。
3. 实现步骤详解
3.1 环境准备
确保以下组件已安装并运行:
# 安装 Docker(用于运行 Prometheus 和 Grafana) sudo apt-get update && sudo apt-get install -y docker.io # 安装 NVIDIA Container Toolkit(支持 GPU 监控) distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \ && curl -s -L https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \ && curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | \ sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \ sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit3.2 修改模型服务代码以暴露指标
在原有app.py基础上集成prometheus_client,记录关键性能指标。
核心代码实现
from prometheus_client import start_http_server, Counter, Histogram, Gauge import time import torch import psutil from functools import wraps # 初始化 Prometheus 指标 REQUEST_COUNT = Counter('model_requests_total', 'Total number of model requests') REQUEST_LATENCY = Histogram('model_request_duration_seconds', 'Request latency in seconds') TOKEN_OUTPUT_RATE = Gauge('model_tokens_per_second', 'Tokens generated per second') GPU_MEMORY_USAGE = Gauge('gpu_memory_used_mb', 'GPU memory used in MB', ['device']) CPU_USAGE = Gauge('cpu_usage_percent', 'CPU usage percentage') MEMORY_USAGE = Gauge('memory_usage_mb', 'RAM usage in MB') # 启动 Prometheus 指标服务器(端口 8000) start_http_server(8000) def monitor_resources(): """定时更新系统资源指标""" while True: # CPU 和内存 CPU_USAGE.set(psutil.cpu_percent()) MEMORY_USAGE.set(psutil.virtual_memory().used / 1024 / 1024) # GPU 资源(假设单卡) if torch.cuda.is_available(): gpu_mem = torch.cuda.memory_allocated() / 1024 / 1024 GPU_MEMORY_USAGE.labels(device='cuda:0').set(gpu_mem) time.sleep(5) import threading threading.Thread(target=monitor_resources, daemon=True).start() # 包装生成函数以记录指标 def metrics_wrapper(func): @wraps(func) def wrapper(*args, **kwargs): start_time = time.time() REQUEST_COUNT.inc() # 执行原始推理 result = func(*args, **kwargs) # 计算延迟 latency = time.time() - start_time REQUEST_LATENCY.observe(latency) # 估算输出 token 数(简化版) output_text = result.get("text", "") if isinstance(result, dict) else str(result) num_tokens = len(output_text.split()) if latency > 0: TOKEN_OUTPUT_RATE.set(num_tokens / latency) return result return wrapper # 示例:包装 generate 函数 @metrics_wrapper def generate(prompt, max_tokens=2048, temperature=0.6): # 此处调用实际模型推理逻辑 # ... return {"text": "Generated response..."}说明:上述代码新增了五个核心指标,并通过装饰器自动记录每次请求的耗时与吞吐量。
3.3 部署 NVIDIA GPU Exporter(可选但推荐)
用于更全面地监控 GPU 温度、功耗、利用率等。
# 拉取并运行 NVIDIA exporter docker run -d --name nvidia-exporter \ --gpus all \ -p 9445:9445 \ nvcr.io/nvidia/k8s/dcgm-exporter:3.3.7-3.6.8-ubuntu20.04修改 Prometheus 配置以抓取该 exporter 的指标(见下一步)。
3.4 配置 Prometheus
创建prometheus.yml配置文件:
global: scrape_interval: 15s scrape_configs: - job_name: 'deepseek-model' static_configs: - targets: ['<your-server-ip>:8000'] # 模型服务指标 metrics_path: '/metrics' - job_name: 'nvidia-gpu' static_configs: - targets: ['<your-server-ip>:9445'] # DCGM Exporter启动 Prometheus 容器:
docker run -d \ -p 9090:9090 \ -v $(pwd)/prometheus.yml:/etc/prometheus/prometheus.yml \ --name prometheus \ prom/prometheus访问http://<your-server-ip>:9090可查看 Prometheus UI。
3.5 部署 Grafana 并配置仪表盘
启动 Grafana:
docker run -d \ -p 3000:3000 \ --name grafana \ -e GF_SECURITY_ADMIN_PASSWORD=yourpassword \ grafana/grafana登录 Grafana(默认账号 admin/admin),添加 Prometheus 数据源:
- URL:
http://<your-server-ip>:9090 - Access: Server (default)
导入或创建仪表盘,推荐使用 ID12239(NVIDIA DCGM Exporter Dashboard)作为基础模板,并自定义添加以下面板:
- 请求总量趋势图:
rate(model_requests_total[5m]) - P95 请求延迟:
histogram_quantile(0.95, rate(model_request_duration_seconds_bucket[5m])) - 平均 Token/s:
avg(model_tokens_per_second) - GPU 显存使用率:
gpu_memory_used_mb{device="cuda:0"} - CPU & RAM 使用率:
cpu_usage_percent,memory_usage_mb
4. 实践问题与优化
4.1 常见问题及解决方案
| 问题 | 原因 | 解决方法 |
|---|---|---|
Prometheus 抓不到/metrics | 防火墙或绑定地址错误 | 检查服务是否监听0.0.0.0:8000 |
| GPU 指标为空 | 未正确安装 DCGM Exporter | 确保容器能访问 GPU 设备 |
| 指标波动剧烈 | 采样频率过高或低 | 调整scrape_interval至 15s~30s |
| 内存泄漏误报 | Python GC 机制导致 | 结合psutil实际内存监控交叉验证 |
4.2 性能优化建议
- 减少指标粒度:避免为每个 prompt 创建 label,防止 cardinality 爆炸
- 异步更新指标:资源监控使用独立线程,不影响主推理流程
- 启用压缩:在
prometheus_client中开启 gzip 支持降低网络开销 - 长期存储对接:可结合 Thanos 或 VictoriaMetrics 实现长期归档
5. 总结
5.1 实践经验总结
通过本次实践,我们成功为 DeepSeek-R1-Distill-Qwen-1.5B 模型服务构建了一套完整、可落地的监控体系。关键收获包括:
- 工程化思维:将监控视为服务不可分割的一部分,而非事后补救
- 轻量级集成:利用
prometheus_client最小侵入式改造现有服务 - 全栈可视:覆盖从应用层(请求延迟)到硬件层(GPU 显存)的全链路指标
- 快速定位问题:当出现响应变慢时,可通过仪表盘迅速判断是 GPU 内存不足还是 CPU 瓶颈
5.2 最佳实践建议
- 统一监控标准:所有大模型服务均应默认集成 Prometheus 指标暴露
- 建立基线阈值:记录正常负载下的 P95 延迟、Token/s 等基准值
- 配置告警规则:例如当 GPU 显存连续 5 分钟 > 90% 时触发告警
- 定期审查仪表盘:根据业务发展动态调整监控重点
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。