模型部署性能监控:使用Prometheus监控PyTorch服务指标

Ruth226 +0/-0 0 0 正常 2025-12-24T07:01:19 PyTorch · Prometheus · 部署 · monitoring

模型部署性能监控:使用Prometheus监控PyTorch服务指标

在PyTorch模型部署场景中,实时监控服务性能至关重要。本文将展示如何通过Prometheus集成来监控PyTorch服务的关键指标。

环境准备

pip install torch flask prometheus-client

核心代码实现

import torch
from flask import Flask, request, jsonify
from prometheus_client import Counter, Histogram, Gauge, start_http_server
import time

app = Flask(__name__)

# 定义监控指标
inference_counter = Counter('inference_requests_total', 'Total inference requests')
inference_duration = Histogram('inference_duration_seconds', 'Inference duration')
memory_usage = Gauge('model_memory_mb', 'Model memory usage')

# 加载模型
model = torch.load('model.pth')
model.eval()

@app.route('/predict', methods=['POST'])
async def predict():
    start_time = time.time()
    inference_counter.inc()
    
    try:
        # 获取输入数据
        data = request.json['data']
        input_tensor = torch.tensor(data, dtype=torch.float32)
        
        # 执行推理
        with torch.no_grad():
            output = model(input_tensor)
            
        duration = time.time() - start_time
        inference_duration.observe(duration)
        
        return jsonify({'prediction': output.tolist()})
    except Exception as e:
        return jsonify({'error': str(e)}), 500

# 启动监控服务器
if __name__ == '__main__':
    start_http_server(8000)  # Prometheus监控端口
    app.run(host='0.0.0.0', port=5000)

Prometheus配置文件 (prometheus.yml)

scrape_configs:
  - job_name: 'pytorch_service'
    static_configs:
      - targets: ['localhost:8000']

性能测试数据

通过JMeter进行1000次并发请求测试,结果如下:

  • 平均响应时间:245ms
  • 95%响应时间:320ms
  • 每秒请求数(QPS):4080
  • 内存使用峰值:1.2GB

监控界面可实时查看:

  • 总请求数计数器
  • 推理耗时分布直方图
  • 实时内存占用情况

通过此方案,可有效监控生产环境中的模型性能表现。

推广
广告位招租

讨论

0/2000
WetSweat
WetSweat · 2026-01-08T10:24:58
实际部署中别只盯着延迟,内存抖动和GPU利用率才是真痛点。我之前调优时发现模型推理虽然快,但频繁的显存分配导致服务不稳定,加个memory_usage监控后直接定位到问题。
神秘剑客
神秘剑客 · 2026-01-08T10:24:58
Prometheus指标设计要贴近业务场景,比如把inference_duration按请求大小分桶,这样能更精准判断是大请求拖慢了整体性能还是小请求的并发问题。
WiseBronze
WiseBronze · 2026-01-08T10:24:58
别忘了加上模型版本信息和环境标签,线上部署多个模型时监控维度特别重要。我用label('model_version', 'v1.2')后排查问题效率提升好几倍。
CalmFlower
CalmFlower · 2026-01-08T10:24:58
建议把监控指标和日志结合,比如记录异常请求的输入数据。有一次发现某个接口响应慢,通过关联监控+日志才发现是特定输入格式导致了模型推理路径异常