Llama-3.2V-11B-cot部署教程:Prometheus+Grafana监控推理服务指标
Llama-3.2V-11B-cot部署教程:Prometheus+Grafana监控推理服务指标
1. 引言:为什么需要监控你的AI服务?
想象一下,你刚刚部署了一个强大的视觉推理模型,它能看懂图片、分析内容,还能像人一样一步步推理。但问题来了:你怎么知道它现在运行得怎么样?它处理一张图片要多久?内存占用高不高?有没有出错?
这就是监控的意义。没有监控的AI服务,就像在黑暗中开车——你不知道前方是坦途还是悬崖。今天,我们就来手把手教你,如何为Llama-3.2V-11B-cot推理服务搭建一套完整的监控系统,让你随时掌握服务的“健康状况”。
Llama-3.2V-11B-cot 是一个很特别的模型。它不仅能理解图片内容,还能进行系统性推理。简单来说,你给它一张图,它不会只告诉你“这是一只猫”,而是会像侦探一样,一步步分析:“图片里有只猫,它躺在沙发上,旁边有个毛线球,所以这只猫可能刚玩过毛线球。”
这种复杂的推理能力,对计算资源的要求也更高。所以,监控就显得尤为重要。通过Prometheus+Grafana这套组合,你可以:
- 实时查看推理延迟(处理一张图要多久)
- 监控GPU/CPU使用率(硬件资源够不够用)
- 统计请求成功率(服务稳不稳定)
- 设置告警(出问题第一时间知道)
接下来,我会带你从零开始,一步步搭建这套监控系统。即使你之前没接触过Prometheus或Grafana,也能跟着做下来。
2. 环境准备与快速部署
2.1 检查基础环境
在开始之前,我们先确认一下你的环境是否准备好了。Llama-3.2V-11B-cot需要一些基础依赖,我们来快速检查一下。
打开终端,运行以下命令:
# 检查Python版本(需要3.8以上)
python3 --version
# 检查pip是否可用
pip3 --version
# 检查CUDA是否可用(如果你用GPU)
nvidia-smi
如果你看到Python版本是3.8+,pip能正常使用,GPU也识别到了(如果要用GPU),那么环境就基本没问题了。
2.2 快速启动推理服务
我们先按照最简单的方式启动服务,确保模型能正常运行。这是后续监控的基础。
# 进入项目目录
cd /root/Llama-3.2V-11B-cot
# 启动推理服务
python app.py
启动后,你应该能看到类似这样的输出:
INFO: Started server process [12345]
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: Uvicorn running on http://0.0.0.0:7860 (Press CTRL+C to quit)
现在,打开浏览器访问 http://你的服务器IP:7860,应该能看到一个Web界面。你可以上传一张图片试试看,模型应该能正常进行推理。
重要提示:先让服务保持运行,我们接下来要给它“装上监控眼睛”。
3. 为推理服务添加监控指标
3.1 理解监控指标:我们要监控什么?
在开始写代码之前,我们先搞清楚要监控哪些东西。对于AI推理服务来说,最重要的指标有这几类:
- 性能指标:处理请求要花多长时间(延迟)、每秒能处理多少请求(吞吐量)
- 资源指标:GPU用了多少、内存用了多少、CPU用了多少
- 业务指标:总共处理了多少请求、成功了多少、失败了多少
- 质量指标:推理结果的准确率(如果有标注数据的话)
今天我们先关注前三种,因为它们最容易实现,也最能反映服务的运行状态。
3.2 安装必要的Python库
我们需要安装几个Python库来帮助收集和暴露监控指标:
# 安装Prometheus客户端库
pip install prometheus-client
# 安装ASGI中间件(如果你的服务基于FastAPI或类似框架)
pip install prometheus-fastapi-instrumentator
如果你用的是其他Web框架,比如Flask,可以安装对应的库:
# 如果是Flask
pip install prometheus-flask-exporter
3.3 修改服务代码,添加监控
现在我们来修改 app.py,让服务能够暴露监控指标。别担心,改动不大,主要是添加一些“计数器”和“计时器”。
首先,在文件开头添加导入:
from prometheus_client import Counter, Histogram, Gauge, generate_latest, REGISTRY
from prometheus_client.exposition import MetricsHandler
import time
然后,在合适的位置定义监控指标:
# 定义监控指标
REQUEST_COUNT = Counter(
'llama_vision_requests_total',
'Total number of requests to the vision model'
)
REQUEST_LATENCY = Histogram(
'llama_vision_request_duration_seconds',
'Request latency in seconds',
buckets=[0.1, 0.5, 1.0, 2.0, 5.0, 10.0, 30.0]
)
REQUEST_ERRORS = Counter(
'llama_vision_request_errors_total',
'Total number of failed requests'
)
GPU_MEMORY_USAGE = Gauge(
'llama_vision_gpu_memory_usage_bytes',
'GPU memory usage in bytes'
)
ACTIVE_REQUESTS = Gauge(
'llama_vision_active_requests',
'Number of requests currently being processed'
)
接下来,我们需要在请求处理的地方“埋点”。找到处理图片推理的函数,添加监控代码:
async def process_image_request(image_data, question):
"""处理图片推理请求,并记录监控指标"""
# 记录活跃请求数增加
ACTIVE_REQUESTS.inc()
start_time = time.time()
try:
# 记录请求总数
REQUEST_COUNT.inc()
# 这里是原来的推理代码
# result = model.process(image_data, question)
# 模拟推理过程
result = {
"summary": "图片内容摘要",
"caption": "图片描述",
"reasoning": "推理过程",
"conclusion": "最终结论"
}
# 记录请求延迟
latency = time.time() - start_time
REQUEST_LATENCY.observe(latency)
return result
except Exception as e:
# 记录错误
REQUEST_ERRORS.inc()
raise e
finally:
# 记录活跃请求数减少
ACTIVE_REQUESTS.dec()
最后,添加一个专门用于暴露监控指标的端点:
from fastapi import Response
from fastapi.responses import PlainTextResponse
@app.get("/metrics")
async def get_metrics():
"""暴露Prometheus格式的监控指标"""
# 如果有GPU,可以在这里更新GPU使用率
try:
import torch
if torch.cuda.is_available():
gpu_memory = torch.cuda.memory_allocated()
GPU_MEMORY_USAGE.set(gpu_memory)
except:
pass
metrics_data = generate_latest(REGISTRY)
return Response(content=metrics_data, media_type="text/plain")
3.4 测试监控端点
修改完成后,重启服务:
# 如果服务在运行,先按Ctrl+C停止
python app.py
等服务启动后,访问 http://你的服务器IP:7860/metrics,你应该能看到类似这样的输出:
# HELP llama_vision_requests_total Total number of requests to the vision model
# TYPE llama_vision_requests_total counter
llama_vision_requests_total 0
# HELP llama_vision_request_duration_seconds Request latency in seconds
# TYPE llama_vision_request_duration_seconds histogram
llama_vision_request_duration_seconds_bucket{le="0.1"} 0
llama_vision_request_duration_seconds_bucket{le="0.5"} 0
# ... 更多数据
这就说明监控指标已经成功暴露了!现在每次有请求过来,这些指标都会自动更新。
4. 部署Prometheus收集指标
4.1 什么是Prometheus?
简单来说,Prometheus就是一个“数据收集器”。它会定期访问你的服务(比如每15秒一次),从 /metrics 端点拉取监控数据,然后存储起来。
你可以把它想象成一个不断问“你现在怎么样?”的助手,然后把你的回答记录下来。
4.2 安装和配置Prometheus
首先,下载Prometheus:
# 创建Prometheus目录
mkdir -p /opt/prometheus
cd /opt/prometheus
# 下载最新版Prometheus
wget https://github.com/prometheus/prometheus/releases/download/v2.45.0/prometheus-2.45.0.linux-amd64.tar.gz
# 解压
tar xvfz prometheus-2.45.0.linux-amd64.tar.gz
cd prometheus-2.45.0.linux-amd64
接下来,创建配置文件。新建一个文件 prometheus.yml:
global:
scrape_interval: 15s # 每15秒收集一次数据
evaluation_interval: 15s # 每15秒评估一次告警规则
# 告警规则配置(可以先留空)
rule_files:
# - "alert.rules"
# 要监控的目标列表
scrape_configs:
# 监控Prometheus自己
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
labels:
service: 'prometheus'
# 监控我们的Llama视觉推理服务
- job_name: 'llama-vision-service'
static_configs:
- targets: ['localhost:7860'] # 你的服务地址
labels:
service: 'llama-vision'
model: 'llama-3.2v-11b-cot'
重要:如果你的推理服务运行在其他机器或端口上,记得修改 targets 中的地址。
4.3 启动Prometheus
现在启动Prometheus服务:
# 在前台启动(方便看日志)
./prometheus --config.file=prometheus.yml
# 或者后台启动
nohup ./prometheus --config.file=prometheus.yml > prometheus.log 2>&1 &
启动后,访问 http://你的服务器IP:9090,就能看到Prometheus的Web界面了。
4.4 验证数据收集
在Prometheus界面中,点击顶部菜单的“Status” -> “Targets”,你应该能看到两个监控目标:
- prometheus (localhost:9090) - 状态应该是UP
- llama-vision-service (localhost:7860) - 状态应该是UP
如果llama-vision-service的状态是DOWN,可能是:
- 推理服务没启动
- 端口不对
- 防火墙阻止了访问
等状态都变成UP后,点击“Graph”标签,在输入框里输入 llama_vision_requests_total,然后点击“Execute”。如果能看到数据(可能是0),就说明Prometheus已经成功收集到指标了。
现在,回到推理服务的Web界面,上传几张图片进行推理。然后刷新Prometheus的查询,你应该能看到 llama_vision_requests_total 的值增加了。
5. 使用Grafana可视化监控数据
5.1 什么是Grafana?
Prometheus虽然能收集数据,但它的界面比较“工程师向”,不够直观。Grafana就是一个“仪表盘”,能把枯燥的数据变成漂亮的图表,让你一眼就能看出服务的运行状态。
5.2 安装和启动Grafana
安装Grafana很简单:
# 添加Grafana仓库
sudo apt-get install -y software-properties-common
sudo add-apt-repository "deb https://packages.grafana.com/oss/deb stable main"
wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -
# 安装Grafana
sudo apt-get update
sudo apt-get install -y grafana
# 启动Grafana服务
sudo systemctl start grafana-server
sudo systemctl enable grafana-server # 设置开机自启
默认情况下,Grafana运行在3000端口。访问 http://你的服务器IP:3000,用默认账号密码登录:
- 用户名:admin
- 密码:admin
第一次登录会要求修改密码,建议设置一个强密码。
5.3 配置数据源
登录后,我们需要告诉Grafana去哪里获取数据(也就是Prometheus)。
- 点击左侧菜单的“Configuration”(齿轮图标)-> “Data Sources”
- 点击“Add data source”
- 选择“Prometheus”
- 在URL处填写
http://localhost:9090(如果Prometheus在其他机器,填对应的地址) - 点击“Save & Test”,应该会显示“Data source is working”
5.4 创建监控仪表盘
现在我们来创建一个专门监控Llama推理服务的仪表盘。
- 点击左侧菜单的“Create”(加号图标)-> “Dashboard”
- 点击“Add new panel”
我们来添加第一个图表:请求数量监控
在查询框输入:
sum(rate(llama_vision_requests_total[5m]))
这个查询的意思是:计算最近5分钟内,平均每秒的请求数。
在右侧设置中:
- 标题改为“请求速率 (QPS)”
- 单位选择“requests/s”
- 可以根据喜好调整图表类型(折线图、柱状图等)
点击“Apply”保存这个图表。
用同样的方法,我们再添加几个重要的图表:
2. 请求延迟分布 查询:
histogram_quantile(0.95, rate(llama_vision_request_duration_seconds_bucket[5m]))
标题:“95%请求延迟” 单位:“seconds”
3. 错误率 查询:
rate(llama_vision_request_errors_total[5m]) / rate(llama_vision_requests_total[5m])
标题:“请求错误率” 单位:“percentunit”(会自动显示为百分比)
4. 活跃请求数 查询:
llama_vision_active_requests
标题:“当前活跃请求数”
5. GPU内存使用(如果有GPU) 查询:
llama_vision_gpu_memory_usage_bytes
标题:“GPU内存使用” 单位:“bytes”
5.5 布局和美化
添加完所有图表后,你可以:
- 拖动图表调整位置
- 调整图表大小
- 设置刷新间隔(比如每10秒自动刷新)
- 添加说明文字
一个完整的监控仪表盘可能长这样:
┌─────────────────┬─────────────────┐
│ 请求速率(QPS) │ 95%请求延迟 │
├─────────────────┼─────────────────┤
│ 错误率 │ 活跃请求数 │
├─────────────────┼─────────────────┤
│ GPU内存使用 │ (空位) │
└─────────────────┴─────────────────┘
点击右上角的“Save”按钮,给仪表盘起个名字,比如“Llama Vision Service Monitoring”。
6. 设置告警规则
监控仪表盘能让你看到问题,但你不能一直盯着屏幕看。告警功能能在问题发生时主动通知你。
6.1 在Prometheus中定义告警规则
创建告警规则文件 alert.rules:
groups:
- name: llama_vision_alerts
rules:
# 规则1:错误率过高
- alert: HighErrorRate
expr: rate(llama_vision_request_errors_total[5m]) / rate(llama_vision_requests_total[5m]) > 0.05
for: 2m
labels:
severity: warning
annotations:
summary: "Llama Vision服务错误率过高"
description: "错误率已达到 {{ $value }},超过5%的阈值"
# 规则2:延迟过高
- alert: HighLatency
expr: histogram_quantile(0.95, rate(llama_vision_request_duration_seconds_bucket[5m])) > 10
for: 2m
labels:
severity: warning
annotations:
summary: "Llama Vision服务延迟过高"
description: "95%请求延迟已达到 {{ $value }}秒,超过10秒阈值"
# 规则3:服务宕机
- alert: ServiceDown
expr: up{job="llama-vision-service"} == 0
for: 1m
labels:
severity: critical
annotations:
summary: "Llama Vision服务不可用"
description: "服务已宕机超过1分钟"
修改 prometheus.yml,取消注释并指定告警规则文件:
rule_files:
- "alert.rules" # 取消注释这行
重启Prometheus使配置生效。
6.2 配置告警通知(以邮件为例)
Prometheus本身不发送通知,它需要配合Alertmanager。这里我们简单配置一下邮件告警。
首先安装Alertmanager:
cd /opt/prometheus
wget https://github.com/prometheus/alertmanager/releases/download/v0.25.0/alertmanager-0.25.0.linux-amd64.tar.gz
tar xvfz alertmanager-0.25.0.linux-amd64.tar.gz
cd alertmanager-0.25.0.linux-amd64
创建配置文件 alertmanager.yml:
global:
smtp_smarthost: 'smtp.gmail.com:587' # 你的SMTP服务器
smtp_from: 'your-email@gmail.com'
smtp_auth_username: 'your-email@gmail.com'
smtp_auth_password: 'your-app-password' # 注意:不是邮箱密码,是应用专用密码
route:
group_by: ['alertname']
group_wait: 10s
group_interval: 10s
repeat_interval: 1h
receiver: 'email-notifications'
receivers:
- name: 'email-notifications'
email_configs:
- to: 'admin@yourcompany.com'
send_resolved: true
启动Alertmanager:
nohup ./alertmanager --config.file=alertmanager.yml > alertmanager.log 2>&1 &
最后,修改Prometheus配置,告诉它Alertmanager的地址:
alerting:
alertmanagers:
- static_configs:
- targets:
- localhost:9093 # Alertmanager默认端口
现在,当服务出现问题时,你就会收到邮件通知了。
7. 总结与进阶建议
7.1 我们做了什么?
回顾一下,我们完成了以下几件事:
- 给推理服务添加了监控指标:让服务能“报告”自己的状态
- 部署了Prometheus:定期收集和存储这些监控数据
- 搭建了Grafana仪表盘:把数据变成直观的图表
- 配置了告警规则:有问题时能及时通知
现在,你有了一个完整的监控系统,可以:
- 实时查看服务的请求量、延迟、错误率
- 了解硬件资源的使用情况
- 在服务出现问题时第一时间知道
- 基于数据做容量规划(比如什么时候需要升级服务器)
7.2 进阶监控建议
如果你想让监控更完善,可以考虑:
1. 添加更多业务指标
- 推理结果的质量评分(如果有评估方法)
- 不同图片类型的处理时间差异
- 用户满意度指标(如果有反馈机制)
2. 监控系统资源
# 添加CPU、内存监控
import psutil
CPU_USAGE = Gauge('llama_vision_cpu_usage_percent', 'CPU usage percentage')
MEMORY_USAGE = Gauge('llama_vision_memory_usage_bytes', 'Memory usage in bytes')
def update_system_metrics():
CPU_USAGE.set(psutil.cpu_percent())
MEMORY_USAGE.set(psutil.Process().memory_info().rss)
3. 日志与监控结合
- 把重要的业务日志也收集起来
- 在Grafana中同时查看指标和日志
- 使用Loki+Promtail+Grafana搭建日志监控
4. 自动化运维
- 基于监控数据自动扩缩容
- 异常检测和自动恢复
- 容量预测和预警
7.3 常见问题排查
问题1:Prometheus显示Target为DOWN
- 检查推理服务是否在运行:
curl http://localhost:7860/health - 检查防火墙设置:
sudo ufw status - 检查Prometheus配置中的target地址是否正确
问题2:Grafana看不到数据
- 检查数据源配置:确保URL正确,能正常连接
- 检查查询语句:在Prometheus界面先测试查询
- 检查时间范围:Grafana右上角的时间范围设置
问题3:告警不触发
- 检查告警规则表达式:在Prometheus的“Alerts”页面查看状态
- 检查Alertmanager日志:
tail -f alertmanager.log - 检查网络连接:Prometheus能否访问Alertmanager
7.4 最后的建议
监控不是一次性的工作,而是一个持续的过程。随着业务发展,你可能需要:
- 调整监控指标(增加新的、删除没用的)
- 优化告警阈值(避免误报或漏报)
- 完善仪表盘(让重要信息更突出)
记住,好的监控系统应该像汽车的仪表盘——不需要的时候你不会注意它,但需要的时候,它能立刻告诉你关键信息。
现在,你的Llama-3.2V-11B-cot推理服务已经有了“眼睛”和“耳朵”,你可以更放心地让它服务用户了。如果遇到问题,监控系统会第一时间告诉你,让你能快速响应和处理。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。
更多推荐

所有评论(0)