DeepSeek-R1-Distill-Qwen-1.5B模型监控:Prometheus+Grafana实战
DeepSeek-R1-Distill-Qwen-1.5B模型监控:Prometheus+Grafana实战
部署完DeepSeek-R1-Distill-Qwen-1.5B模型服务后,很多朋友可能会遇到这样的问题:服务跑得好好的,突然就变慢了,或者干脆不响应了。你只能凭感觉去猜,是显存不够了?还是请求太多了?又或者是GPU温度太高了?这种“盲人摸象”的状态,对于生产环境来说简直是灾难。
今天我就来分享一套完整的监控方案,用Prometheus和Grafana给你的模型服务装上“眼睛”和“耳朵”。这套方案不仅能让你实时看到服务的各项指标,还能在问题发生前发出预警,让你从被动救火变成主动预防。
1. 为什么模型服务需要监控?
你可能觉得,模型服务部署好了能跑就行,监控是不是有点小题大做?其实不然。模型服务跟传统的Web服务有很大不同,它有自己独特的“脾气”。
首先,GPU资源是模型服务的命脉。显存使用率、GPU利用率、温度这些指标,直接决定了服务能不能稳定运行。显存爆了,服务就挂了;GPU利用率太低,你又浪费了昂贵的硬件资源。
其次,推理性能是关键。每个请求的处理时间、吞吐量、并发数,这些指标反映了服务的实际表现。用户可不会管你后台用了多牛的模型,他们只关心响应快不快。
再者,错误率不容忽视。模型推理过程中可能会出现各种错误:显存不足、输入格式不对、模型加载失败等等。及时发现并处理这些错误,才能保证服务的可用性。
最后,资源使用情况决定了成本。CPU、内存、磁盘I/O、网络带宽,这些资源的使用情况直接影响着你的运维成本。合理分配资源,才能既保证性能又控制成本。
2. 监控方案整体设计
我们的监控方案基于Prometheus+Grafana这套经典的组合。Prometheus负责采集和存储指标数据,Grafana负责可视化展示。这套方案有几个明显的优势:
一是成熟稳定,社区活跃,遇到问题容易找到解决方案。 二是扩展性强,可以轻松添加新的监控指标。 三是开源免费,对于预算有限的团队特别友好。 四是部署简单,学习成本相对较低。
整个架构分为三层:数据采集层、数据存储层和可视化层。
在数据采集层,我们会在模型服务中暴露Prometheus格式的指标,然后通过Prometheus的抓取机制定期采集这些数据。对于GPU相关的指标,我们会使用NVIDIA的DCGM Exporter来获取。
数据存储层就是Prometheus本身,它会将采集到的指标按照时间序列的方式存储起来,并提供强大的查询语言PromQL。
可视化层则是Grafana,它可以从Prometheus中读取数据,然后以图表、仪表盘的形式展示出来,让你一目了然地看到服务的运行状态。
3. 环境准备与组件部署
3.1 安装Prometheus
首先,我们来部署Prometheus。Prometheus的安装其实很简单,这里我推荐使用Docker方式,这样既方便又干净。
# 创建Prometheus的配置文件目录
mkdir -p /opt/prometheus/config
# 创建Prometheus配置文件
cat > /opt/prometheus/config/prometheus.yml << 'EOF'
global:
scrape_interval: 15s
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: 'dcgm-exporter'
static_configs:
- targets: ['dcgm-exporter:9400']
- job_name: 'deepseek-model'
static_configs:
- targets: ['deepseek-model:8000']
metrics_path: '/metrics'
EOF
# 使用Docker运行Prometheus
docker run -d \
--name=prometheus \
--network=host \
-p 9090:9090 \
-v /opt/prometheus/config:/etc/prometheus \
-v /opt/prometheus/data:/prometheus \
prom/prometheus:latest \
--config.file=/etc/prometheus/prometheus.yml \
--storage.tsdb.path=/prometheus \
--web.console.libraries=/etc/prometheus/console_libraries \
--web.console.templates=/etc/prometheus/consoles \
--web.enable-lifecycle
Prometheus启动后,你可以通过浏览器访问 http://你的服务器IP:9090 来查看Prometheus的Web界面。在这个界面上,你可以执行PromQL查询,查看服务的状态。
3.2 安装Node Exporter
Node Exporter是用来采集服务器基础指标的,比如CPU使用率、内存使用情况、磁盘I/O、网络流量等等。这些指标虽然基础,但对于了解服务器的整体负载情况非常重要。
# 使用Docker运行Node Exporter
docker run -d \
--name=node-exporter \
--network=host \
-p 9100:9100 \
-v "/proc:/host/proc:ro" \
-v "/sys:/host/sys:ro" \
-v "/:/rootfs:ro" \
prom/node-exporter:latest \
--path.procfs=/host/proc \
--path.sysfs=/host/sys \
--collector.filesystem.mount-points-exclude="^/(sys|proc|dev|host|etc)($|/)"
Node Exporter默认会在9100端口暴露指标。你可以在Prometheus的Targets页面看到node-exporter的状态,如果显示为UP,就说明采集正常。
3.3 安装DCGM Exporter
对于GPU监控,我们需要专门的工具。NVIDIA提供了DCGM(Data Center GPU Manager),而DCGM Exporter则是将DCGM的指标转换成Prometheus格式的工具。
# 使用Docker运行DCGM Exporter
docker run -d \
--name=dcgm-exporter \
--network=host \
--gpus all \
-p 9400:9400 \
nvcr.io/nvidia/k8s/dcgm-exporter:3.3.4-3.1.5-ubuntu22.04
DCGM Exporter会采集GPU的各种指标,包括:
- GPU利用率(正在执行计算的时间百分比)
- GPU显存使用情况
- GPU温度
- GPU功耗
- GPU错误信息
这些指标对于模型服务来说至关重要。你可以通过 http://你的服务器IP:9400/metrics 查看DCGM Exporter暴露的所有指标。
3.4 为模型服务添加指标暴露
现在我们需要修改DeepSeek-R1-Distill-Qwen-1.5B模型服务的部署方式,让它能够暴露Prometheus格式的指标。这里我们使用vLLM来部署模型,并启用它的指标暴露功能。
# 修改模型服务的启动命令,添加指标暴露
MODEL_NAME="DeepSeek-R1-Distill-Qwen-1.5B"
LOCAL_SAVE_PATH="/mnt/1.5B"
PORT="30000"
METRICS_PORT="8000"
# 停止原有的服务(如果存在)
docker stop ${MODEL_NAME} 2>/dev/null || true
docker rm ${MODEL_NAME} 2>/dev/null || true
# 启动新的服务,启用Prometheus指标
docker run -d -t \
--network=host \
--gpus all \
--privileged \
--ipc=host \
--name ${MODEL_NAME} \
-v ${LOCAL_SAVE_PATH}:/data \
egs-registry.cn-hangzhou.cr.aliyuncs.com/egs/vllm:0.6.4.post1-pytorch2.5.1-cuda12.4-ubuntu22.04 \
/bin/bash -c "vllm serve /data \
--port ${PORT} \
--served-model-name ${MODEL_NAME} \
--tensor-parallel-size 1 \
--max-model-len=16384 \
--enforce-eager \
--dtype=half \
--metric-config '{\"namespace\": \"vllm\", \"labels\": {\"model\": \"deepseek-r1-distill-qwen-1.5b\"}}' \
--enable-metrics \
--metrics-port ${METRICS_PORT}"
vLLM会自动在指定的端口(这里是8000)暴露Prometheus格式的指标。这些指标包括:
- 请求处理延迟
- 请求吞吐量
- 令牌生成速度
- 缓存命中率
- 错误计数
4. 配置Grafana可视化看板
4.1 安装Grafana
Grafana的安装也很简单,同样推荐使用Docker方式。
# 创建Grafana的数据目录
mkdir -p /opt/grafana/data
# 使用Docker运行Grafana
docker run -d \
--name=grafana \
--network=host \
-p 3000:3000 \
-v /opt/grafana/data:/var/lib/grafana \
grafana/grafana:latest
Grafana启动后,你可以通过 http://你的服务器IP:3000 访问。默认的用户名和密码都是 admin,首次登录后会要求修改密码。
4.2 配置数据源
登录Grafana后,第一步要配置数据源。点击左侧菜单的"Configuration" -> "Data Sources" -> "Add data source",选择Prometheus。
在配置页面中,填写以下信息:
- Name: Prometheus(可以自定义)
- URL: http://localhost:9090
- Access: Server(默认)
其他选项保持默认,点击"Save & Test"。如果配置正确,你会看到"Data source is working"的提示。
4.3 导入监控看板
Grafana社区有很多现成的监控看板,我们可以直接导入使用。这里我推荐几个适合模型服务监控的看板:
-
Node Exporter Full(ID: 1860) 这个看板展示了服务器的所有基础指标,包括CPU、内存、磁盘、网络等。
-
NVIDIA DCGM Exporter Dashboard(ID: 12239) 专门用于监控GPU的看板,展示了GPU利用率、显存、温度等关键指标。
-
vLLM Metrics Dashboard 对于vLLM的监控,我们可以自己创建一个看板,或者使用社区提供的模板。
以Node Exporter看板为例,导入方法如下:
- 点击左侧菜单的"Dashboards" -> "Import"
- 在"Import via grafana.com"中输入看板ID: 1860
- 点击"Load"
- 选择刚才配置的Prometheus数据源
- 点击"Import"
导入成功后,你就可以看到一个完整的服务器监控看板了。
4.4 创建自定义模型服务看板
虽然社区看板很全面,但对于模型服务的特定需求,我们最好还是创建一个自定义看板。下面是一个简单的模型服务看板配置示例:
{
"dashboard": {
"title": "DeepSeek Model Service Dashboard",
"panels": [
{
"title": "Request Rate",
"targets": [{
"expr": "rate(vllm_num_prompt_tokens_total[5m])",
"legendFormat": "Prompt Tokens"
}, {
"expr": "rate(vllm_num_generation_tokens_total[5m])",
"legendFormat": "Generation Tokens"
}],
"type": "graph"
},
{
"title": "Request Latency",
"targets": [{
"expr": "histogram_quantile(0.95, rate(vllm_request_duration_seconds_bucket[5m]))",
"legendFormat": "P95 Latency"
}, {
"expr": "histogram_quantile(0.50, rate(vllm_request_duration_seconds_bucket[5m]))",
"legendFormat": "P50 Latency"
}],
"type": "graph"
},
{
"title": "GPU Memory Usage",
"targets": [{
"expr": "DCGM_FI_DEV_FB_USED{instance=~\"$instance\"}",
"legendFormat": "Used"
}, {
"expr": "DCGM_FI_DEV_FB_FREE{instance=~\"$instance\"}",
"legendFormat": "Free"
}],
"type": "graph"
}
]
}
}
这个看板包含了三个关键图表:
- 请求速率:显示模型处理提示令牌和生成令牌的速率
- 请求延迟:显示P50和P95的请求处理延迟
- GPU显存使用:显示GPU显存的使用情况
你可以根据实际需求,添加更多的图表,比如错误率、缓存命中率、GPU利用率等。
5. 设置告警规则
监控看板能让你看到当前的状态,但你不能一直盯着看板。这时候就需要告警功能,当出现异常时自动通知你。
5.1 配置Prometheus告警规则
首先,在Prometheus中配置告警规则。创建告警规则文件:
mkdir -p /opt/prometheus/config/rules
cat > /opt/prometheus/config/rules/alerts.yml << 'EOF'
groups:
- name: model_service_alerts
rules:
- alert: HighGPUUsage
expr: DCGM_FI_DEV_GPU_UTIL > 90
for: 5m
labels:
severity: warning
annotations:
summary: "High GPU usage on {{ $labels.instance }}"
description: "GPU usage is above 90% for 5 minutes"
- alert: HighGPUMemoryUsage
expr: (DCGM_FI_DEV_FB_USED / DCGM_FI_DEV_FB_TOTAL) * 100 > 85
for: 5m
labels:
severity: warning
annotations:
summary: "High GPU memory usage on {{ $labels.instance }}"
description: "GPU memory usage is above 85% for 5 minutes"
- alert: HighRequestLatency
expr: histogram_quantile(0.95, rate(vllm_request_duration_seconds_bucket[5m])) > 10
for: 5m
labels:
severity: warning
annotations:
summary: "High request latency on model service"
description: "P95 request latency is above 10 seconds for 5 minutes"
- alert: HighErrorRate
expr: rate(vllm_request_failure_total[5m]) / rate(vllm_request_total[5m]) > 0.05
for: 5m
labels:
severity: critical
annotations:
summary: "High error rate on model service"
description: "Error rate is above 5% for 5 minutes"
EOF
然后修改Prometheus的配置文件,添加告警规则:
# 在prometheus.yml中添加
rule_files:
- "rules/alerts.yml"
alerting:
alertmanagers:
- static_configs:
- targets:
- localhost:9093
5.2 安装和配置Alertmanager
Alertmanager是Prometheus的告警管理器,负责处理告警通知。
# 创建Alertmanager配置文件
mkdir -p /opt/alertmanager/config
cat > /opt/alertmanager/config/alertmanager.yml << 'EOF'
global:
smtp_smarthost: 'smtp.example.com:587'
smtp_from: 'alertmanager@example.com'
smtp_auth_username: 'username'
smtp_auth_password: 'password'
route:
group_by: ['alertname', 'cluster', 'service']
group_wait: 10s
group_interval: 10s
repeat_interval: 1h
receiver: 'email-notifications'
receivers:
- name: 'email-notifications'
email_configs:
- to: 'admin@example.com'
send_resolved: true
EOF
# 使用Docker运行Alertmanager
docker run -d \
--name=alertmanager \
--network=host \
-p 9093:9093 \
-v /opt/alertmanager/config:/etc/alertmanager \
prom/alertmanager:latest \
--config.file=/etc/alertmanager/alertmanager.yml \
--storage.path=/alertmanager
5.3 配置Grafana告警
除了Prometheus的告警,Grafana也提供了告警功能。在Grafana的看板中,你可以为每个图表设置告警规则。
以GPU使用率为例,设置告警的步骤:
- 在GPU使用率图表上,点击标题 -> Edit
- 切换到"Alert"标签页
- 点击"Create Alert"
- 设置告警条件:WHEN
last()OFquery(A, 5m, now)ISABOVE90 - 设置评估频率:Every
1mFor5m - 配置通知渠道
Grafana支持多种通知渠道,包括邮件、Slack、钉钉、企业微信等。你可以在"Configuration" -> "Alerting" -> "Notification channels"中配置。
6. 监控指标详解与优化建议
6.1 关键监控指标解读
在实际使用中,你需要特别关注以下几类指标:
GPU相关指标:
DCGM_FI_DEV_GPU_UTIL:GPU利用率,理想值在70%-90%之间DCGM_FI_DEV_FB_USED:GPU显存使用量,要留出一定的余量DCGM_FI_DEV_GPU_TEMP:GPU温度,长期高于85度需要关注散热DCGM_FI_DEV_POWER_USAGE:GPU功耗,影响电费和散热
模型服务指标:
vllm_request_duration_seconds:请求处理时间,P95值要控制在可接受范围内vllm_num_prompt_tokens_total:处理的提示令牌数,反映服务负载vllm_num_generation_tokens_total:生成的令牌数,反映服务输出量vllm_cache_hit_ratio:缓存命中率,影响性能的关键指标
系统资源指标:
node_memory_MemAvailable_bytes:可用内存,要保证有足够的内存用于系统运行node_filesystem_avail_bytes:磁盘可用空间,模型文件通常很大node_network_receive_bytes_total:网络接收流量,影响模型加载速度
6.2 性能优化建议
基于监控数据,你可以进行针对性的优化:
如果GPU利用率过低(<50%):
- 检查是否有请求排队,增加并发请求数
- 调整批处理大小,提高GPU的并行计算能力
- 检查CPU或IO是否成为瓶颈
如果GPU显存使用率过高(>90%):
- 减少批处理大小
- 使用更小的数据类型(如fp16)
- 启用vLLM的PagedAttention功能,优化显存使用
如果请求延迟过高:
- 检查GPU利用率,如果已满负荷,考虑扩容
- 优化提示词长度,减少不必要的令牌
- 启用请求批处理,提高吞吐量
如果缓存命中率过低:
- 调整vLLM的KV缓存大小
- 对于重复的提示词,考虑使用缓存机制
- 检查请求模式,是否有大量不同的提示词
6.3 容量规划建议
通过长期的监控数据,你可以更好地进行容量规划:
- 确定基准负载:记录正常业务时段的各项指标,作为基准
- 识别峰值模式:找出业务高峰期,了解峰值负载
- 预测增长趋势:基于历史数据,预测未来的资源需求
- 设置扩容阈值:根据业务需求,设置自动扩容的阈值
例如,你可以设置这样的扩容策略:
- 当GPU利用率连续30分钟超过85%时,自动扩容
- 当请求延迟P95连续15分钟超过设定阈值时,自动扩容
- 当错误率连续10分钟超过5%时,自动告警并介入处理
7. 总结
给DeepSeek-R1-Distill-Qwen-1.5B模型服务加上监控,就像给汽车装上了仪表盘。你不再需要凭感觉开车,而是可以实时看到车速、油量、水温等所有关键信息。这套Prometheus+Grafana的监控方案,不仅让你能及时发现和解决问题,更重要的是能让你提前预防问题。
实际用下来,这套方案的效果还是很明显的。部署过程不算复杂,基本上按照步骤来都能搞定。监控数据的丰富程度也足够,从GPU到模型服务再到系统资源,该有的都有了。告警功能也很实用,设置好之后就不用一直盯着看板了。
如果你刚开始接触模型服务监控,建议先从基础指标开始,把GPU和系统资源监控起来。等熟悉了之后,再逐步添加模型服务的特定指标和告警规则。监控不是一蹴而就的事情,需要根据实际运行情况不断调整和优化。
最后要提醒的是,监控数据本身也会占用资源。Prometheus的数据存储、Grafana的查询展示,都需要消耗CPU和内存。对于小规模部署,这点开销可以忽略不计。但如果监控的目标很多,数据量很大,就需要考虑监控系统的资源分配了。一般来说,给监控系统单独分配一些资源,避免跟模型服务争抢,是个不错的做法。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。
更多推荐



所有评论(0)