news 2026/2/7 17:56:51

Qwen1.5-0.5B-Chat监控告警:Prometheus集成部署教程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Qwen1.5-0.5B-Chat监控告警:Prometheus集成部署教程

Qwen1.5-0.5B-Chat监控告警:Prometheus集成部署教程

1. 引言

1.1 学习目标

本文旨在指导开发者如何为基于 ModelScope 部署的Qwen1.5-0.5B-Chat轻量级对话服务构建完整的监控与告警体系。通过集成 Prometheus 和 Grafana,实现对模型推理服务的关键指标(如请求延迟、CPU 使用率、内存占用等)进行可视化监控,并结合 Alertmanager 实现异常告警。

读者在完成本教程后将能够: - 理解轻量级 AI 服务监控的核心需求 - 在 Flask 应用中暴露 Prometheus 可采集的 metrics 接口 - 部署并配置 Prometheus、Grafana 和 Alertmanager - 构建针对 AI 模型服务的告警规则 - 实现从指标采集到告警通知的完整链路

1.2 前置知识

建议读者具备以下基础: - Python 基础编程能力 - Flask 或 Web 框架使用经验 - Docker 和容器化部署基本概念 - 对 Prometheus 监控系统有初步了解

1.3 教程价值

随着 AI 模型越来越多地被部署到生产环境,传统的“能跑就行”模式已无法满足稳定性要求。尤其对于资源受限的轻量级模型服务(如 Qwen1.5-0.5B-Chat),更需要精细化的运行时监控来保障服务质量。

本教程提供了一套可复用、低侵入、易扩展的监控方案,特别适用于: - 无 GPU 环境下的 CPU 推理服务 - 边缘设备或低配服务器部署场景 - 快速验证类项目的运维支持


2. 环境准备与服务增强

2.1 扩展技术栈以支持监控

为了实现全面监控,我们需要在原有技术栈基础上引入以下组件:

组件用途
prometheus-client在 Flask 中暴露 /metrics 接口
Prometheus Server指标拉取与存储
Grafana指标可视化展示
Alertmanager告警通知管理
Node Exporter主机级系统指标采集

2.2 增强 Qwen1.5-0.5B-Chat 服务

我们需对原始 Flask 服务进行改造,使其支持指标暴露功能。

安装依赖
conda activate qwen_env pip install prometheus-client flask-monitoringdashboard
修改 app.py 添加监控中间件
from flask import Flask, request, jsonify, render_template from modelscope import AutoModelForCausalLM, AutoTokenizer import torch import time from prometheus_client import Counter, Histogram, generate_latest, CONTENT_TYPE_LATEST app = Flask(__name__) # 定义 Prometheus 指标 REQUEST_COUNT = Counter( 'flask_request_count', 'Total number of HTTP requests', ['method', 'endpoint', 'status'] ) REQUEST_LATENCY = Histogram( 'flask_request_latency_seconds', 'Request latency in seconds', ['endpoint'] ) # 初始化模型(保持原逻辑) model_id = "qwen/Qwen1.5-0.5B-Chat" tokenizer = AutoTokenizer.from_pretrained(model_id) model = AutoModelForCausalLM.from_pretrained(model_id, torch_dtype=torch.float32) @app.before_request def start_timer(): request.start_time = time.time() @app.after_request def record_metrics(response): # 计算请求耗时 latency = time.time() - request.start_time REQUEST_LATENCY.labels(endpoint=request.endpoint).observe(latency) # 增加请求计数 REQUEST_COUNT.labels( method=request.method, endpoint=request.endpoint, status=response.status_code ).inc() return response @app.route('/metrics') def metrics(): return generate_latest(), 200, {'Content-Type': CONTENT_TYPE_LATEST} @app.route("/chat", methods=["POST"]) def chat(): data = request.json input_text = data.get("text", "") inputs = tokenizer(input_text, return_tensors="pt") start_time = time.time() with torch.no_grad(): outputs = model.generate( inputs.input_ids, max_new_tokens=128, do_sample=True, temperature=0.7, ) response_text = tokenizer.decode(outputs[0], skip_special_tokens=True) inference_time = time.time() - start_time return jsonify({ "response": response_text, "inference_time": f"{inference_time:.2f}s" }) @app.route("/") def index(): return render_template("index.html") if __name__ == "__main__": app.run(host="0.0.0.0", port=8080)

核心改动说明

  • 引入CounterHistogram分别记录请求数和延迟
  • 使用 Flask 的before_requestafter_request钩子自动采集指标
  • 新增/metrics路由供 Prometheus 抓取数据
  • 在推理过程中增加时间测量点
验证指标接口

启动服务后访问http://<your-host>:8080/metrics,应看到类似以下输出:

# HELP flask_request_count Total number of HTTP requests # TYPE flask_request_count counter flask_request_count{method="POST",endpoint="chat",status="200"} 3 # HELP flask_request_latency_seconds Request latency in seconds # TYPE flask_request_latency_seconds histogram flask_request_latency_seconds_sum{endpoint="chat"} 2.15 flask_request_latency_seconds_count{endpoint="chat"} 3

这表明指标已成功暴露。


3. Prometheus 监控系统部署

3.1 编写 docker-compose.yml

创建docker-compose.yml文件统一管理所有监控组件:

version: '3.8' services: qwen-chat: build: context: . dockerfile: Dockerfile.qwen ports: - "8080:8080" environment: - PYTHONUNBUFFERED=1 volumes: - ./logs:/app/logs node-exporter: image: prom/node-exporter:v1.6.1 container_name: node-exporter ports: - "9100:9100" command: - '--path.rootfs=/host' volumes: - '/:/host:ro,rslave' prometheus: image: prom/prometheus:v2.47.0 container_name: prometheus ports: - "9090:9090" command: - '--config.file=/etc/prometheus/prometheus.yml' - '--web.enable-lifecycle' volumes: - ./prometheus.yml:/etc/prometheus/prometheus.yml - prometheus_data:/prometheus grafana: image: grafana/grafana:10.1.0 container_name: grafana ports: - "3000:3000" environment: - GF_SECURITY_ADMIN_PASSWORD=admin volumes: - grafana_storage:/var/lib/grafana alertmanager: image: prom/alertmanager:v0.26.0 container_name: alertmanager ports: - "9093:9093" volumes: - ./alertmanager.yml:/etc/alertmanager/alertmanager.yml volumes: prometheus_data: grafana_storage:

3.2 配置 Prometheus 抓取任务

创建prometheus.yml配置文件:

global: scrape_interval: 15s evaluation_interval: 15s scrape_configs: - job_name: 'qwen-chat-service' static_configs: - targets: ['qwen-chat:8080'] - job_name: 'node-exporter' static_configs: - targets: ['node-exporter:9100'] rule_files: - 'alerts.yml' alerting: alertmanagers: - static_configs: - targets: ['alertmanager:9093']

3.3 创建告警规则文件 alerts.yml

groups: - name: qwen-chat-alerts rules: - alert: HighInferenceLatency expr: histogram_quantile(0.95, sum(rate(flask_request_latency_seconds_bucket{endpoint="chat"}[5m])) by (le)) > 10 for: 2m labels: severity: warning annotations: summary: "高推理延迟" description: "Qwen1.5-0.5B-Chat 服务的 95% 请求延迟超过 10 秒" - alert: HighErrorRate expr: sum(rate(flask_request_count{status!="200"}[5m])) by (endpoint) / sum(rate(flask_request_count[5m])) by (endpoint) > 0.1 for: 5m labels: severity: critical annotations: summary: "高错误率" description: "Qwen 服务在过去 5 分钟内错误率超过 10%"

4. Grafana 可视化与告警配置

4.1 登录并添加数据源

  1. 浏览器访问http://localhost:3000
  2. 使用默认账号密码登录:admin/admin
  3. 进入Configuration > Data Sources添加 Prometheus 数据源
  4. URL:http://prometheus:9090
  5. 点击Save & Test

4.2 导入预设仪表板

推荐导入官方 ID 为1860"Flask App Dashboard"

  1. 点击+ Create > Import
  2. 输入 Dashboard ID:1860
  3. 选择 Prometheus 数据源
  4. 完成导入

该仪表板将展示: - HTTP 请求速率与状态码分布 - 请求延迟 P50/P95/P99 - Python GC 次数与内存使用趋势

4.3 自定义 Qwen 专用看板

新建仪表板,添加以下关键面板:

面板名称查询语句类型
推理请求总数sum(flask_request_count{endpoint="chat"})Stat
平均延迟 (P95)histogram_quantile(0.95, sum(rate(flask_request_latency_seconds_bucket{endpoint="chat"}[5m])) by (le))Time series
内存使用率1 - node_memory_free_bytes{instance="node-exporter:9100"} / node_memory_memtotal_bytes{instance="node-exporter:9100"}Gauge
CPU 使用率100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)Graph

5. 告警通知渠道配置

5.1 配置 Alertmanager 发送邮件告警

编辑alertmanager.yml

route: receiver: email-notifications group_by: [alertname] group_wait: 30s group_interval: 5m repeat_interval: 1h receivers: - name: email-notifications email_configs: - to: your-email@example.com from: alertmanager@yourdomain.com smarthost: smtp.gmail.com:587 auth_username: "your-email@gmail.com" auth_identity: "your-email@gmail.com" auth_password: "your-app-password"

注意:若使用 Gmail,请提前开启两步验证并生成应用专用密码。

5.2 测试告警流程

可通过临时修改告警阈值触发测试告警,例如将延迟阈值改为 1 秒:

expr: histogram_quantile(0.95, ...) > 1 # 原为 10

观察 Alertmanager UI (http://localhost:9093) 是否出现激活告警,并检查邮箱是否收到通知。


6. 总结

6.1 实践经验总结

本文完成了从 Qwen1.5-0.5B-Chat 服务增强到完整监控告警体系搭建的全过程。核心收获包括:

  • 低侵入式指标注入:通过 Flask 钩子函数实现自动化指标采集,无需修改业务逻辑。
  • 轻量级部署友好:整套监控系统可在单台 2GB 内存机器上稳定运行,适合边缘部署。
  • 端到端可观测性:覆盖了应用层(推理延迟)、服务层(HTTP 状态)、系统层(CPU/内存)三大维度。

6.2 最佳实践建议

  1. 定期审查告警规则:避免“告警疲劳”,确保每条告警都有明确处理流程。
  2. 设置合理的采样间隔:对于 CPU 推理服务,15s 的 scrape_interval 已足够平衡精度与开销。
  3. 保留历史日志:建议将/metrics访问日志持久化,便于事后分析性能退化问题。

获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/2 13:28:59

FST ITN-ZH保姆级教程:生产环境部署指南

FST ITN-ZH保姆级教程&#xff1a;生产环境部署指南 1. 简介与背景 中文逆文本标准化&#xff08;Inverse Text Normalization, ITN&#xff09;是语音识别、自然语言处理和智能对话系统中的关键预处理环节。其核心任务是将口语化或非标准表达的中文文本转换为规范化的书面格…

作者头像 李华
网站建设 2026/2/7 9:37:31

Manim数学动画引擎终极指南:从零开始掌握专业级可视化技能

Manim数学动画引擎终极指南&#xff1a;从零开始掌握专业级可视化技能 【免费下载链接】manim Animation engine for explanatory math videos 项目地址: https://gitcode.com/GitHub_Trending/ma/manim 想要将枯燥的数学公式转化为生动的动画演示吗&#xff1f;Manim数…

作者头像 李华
网站建设 2026/2/5 4:07:47

戴森球计划光子生产终极指南:如何快速搭建高效锅盖接收站

戴森球计划光子生产终极指南&#xff1a;如何快速搭建高效锅盖接收站 【免费下载链接】FactoryBluePrints 游戏戴森球计划的**工厂**蓝图仓库 项目地址: https://gitcode.com/GitHub_Trending/fa/FactoryBluePrints 戴森球计划光子生产是游戏后期的重要环节&#xff0c;…

作者头像 李华
网站建设 2026/2/4 0:33:58

终极i茅台抢购神器:3分钟搞定自动预约系统

终极i茅台抢购神器&#xff1a;3分钟搞定自动预约系统 【免费下载链接】campus-imaotai i茅台app自动预约&#xff0c;每日自动预约&#xff0c;支持docker一键部署 项目地址: https://gitcode.com/GitHub_Trending/ca/campus-imaotai 还在为抢不到茅台而烦恼吗&#xf…

作者头像 李华
网站建设 2026/2/4 8:26:47

UI-TARS桌面版完整教程:快速掌握智能GUI自动化核心技能

UI-TARS桌面版完整教程&#xff1a;快速掌握智能GUI自动化核心技能 【免费下载链接】UI-TARS-desktop A GUI Agent application based on UI-TARS(Vision-Lanuage Model) that allows you to control your computer using natural language. 项目地址: https://gitcode.com/G…

作者头像 李华