基于Prometheus+Grafana的Deepseek性能监控实战

1. 为什么需要专门的大模型监控?

大型语言模型(LLM)服务化面临独特挑战:

高显存消耗与GPU利用率波动
请求响应时间(Token生成速度)不稳定
批处理吞吐量动态变化
长文本场景下的OOM风险
多租户场景下的资源抢占

传统监控方案难以捕捉LLM服务特性,本文将展示如何构建针对vLLM的定制化监控体系。

2. 技术栈组成

2.1 vLLM(推理引擎层)

技术定位

UC Berkeley开源的LLM服务框架,专为GPU推理优化

核心特性:

PagedAttention算法:实现显存动态分页管理,提升3倍吞吐量
连续批处理:动态合并请求,GPU利用率提升至92%+
OpenAI兼容API:无缝对接LangChain等生态工具
多GPU自动分片:支持Tensor Parallelism分布式推理

2.2 Prometheus(监控采集层)

技术定位

云原生时序数据库,专为动态指标采集设计

关键实现:

多维数据模型:支持labels标记的时序存储
主动拉取机制:通过HTTP定期获取目标数据
高效压缩算法:1小时原始数据(1.3GB)压缩至65MB
预警规则引擎:基于PromQL的实时阈值判断

2.3 Grafana(数据可视化平台)

技术定位

跨平台指标可视化系统,支持动态仪表盘编排

高阶功能:

混合数据源:同时接入Prometheus+Elasticsearch
智能警报路由:支持分级通知(企业微信/邮件/短信)
版本化存储:仪表盘配置自动保存至Git仓库
权限联邦:集成LDAP/SSO统一认证

Deepseek:大语言模型(可替换本地大模型)
技术定位

国产高性能大语言模型,支持多模态扩展

3. 监控系统架构

[vLLM服务] --> [Prometheus Exporter]
     ↑                  ↓
[Node Exporter]   [Prometheus Server]
     ↑                  ↓
[DCGM Exporter] <--> [Grafana Dashboard]

4. 实施步骤

4.1 启动DeepSeek-R1模型

之前文章也有介绍下载部署deekseek: 在Ubuntu 20上使用vLLM部署DeepSeek大模型的完整指南

启动命令:

vllm serve DeepSeekR1 --port 8000 --max-model-len 16384  --gpu-memory-utilization 0.9 > vllm.log 2>&1

查看日志:
在这里插入图片描述

4.2 部署 Prometheus

4.2.1 拉取镜像

docker pull bitnami/prometheus:2.48.1

在这里插入图片描述

4.2.2 编写配置文件

创建目录:

mkdir -p /data/sda/deploy/vllm/prometheus/data

在/data/sda/deploy/vllm/prometheus 文件夹下面创建 prometheus.yml 文件

# my global config
global:
  scrape_interval:     15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
  # scrape_timeout is set to the global default (10s).

# Alertmanager configuration
alerting:
  alertmanagers:
  - static_configs:
    - targets:
      # - alertmanager:9093

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"

# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: 'deepseek'

    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.

    static_configs:
    - targets:
      - 'localhost:8000'

localhost:8000指向的是大模型的链接。

4.2.3 启动容器

sudo chown 1001:1001 /data/sda/deploy/vllm/prometheus/data
docker rm -f prometheus ; docker run -d --name prometheus --user 1001 -p 9090:9090 -v /data/sda/deploy/vllm/prometheus/data:/opt/bitnami/prometheus/data -v /data/sda/deploy/vllm/prometheus/prometheus.yml:/opt/bitnami/prometheus/conf/prometheus.yml bitnami/prometheus:2.48.1

在这里插入图片描述

4.3 部署 Grafana

4.3.1 拉取镜像

docker pull grafana/grafana:10.0.10

在这里插入图片描述

4.3.2 启动容器

$ docker rm -f vllm_grafana ; docker run -d --name vllm_grafana -p 3008:3000 grafana/grafana:10.0.10

在这里插入图片描述

4.3.3 接入 Prometheus 数据

访问 http://192.168.0.110:3008/login
(这里用http://localhost:3008/login 貌似是有点问题的)
在这里插入图片描述
设置初始化的账号密码,我这里账号密码都有admin

如下图所示点击“Data sources”
在这里插入图片描述

如下图所示点击“Add new data source”
在这里插入图片描述

选择 “Prometheus”
在这里插入图片描述

名字随便取,URL 用Prometheus server的URL
在这里插入图片描述

翻到最下面点击保存和测试 Save & test
在这里插入图片描述

滚到最上,点击构建仪表盘 Build a dashboard
在这里插入图片描述

添加可视化 Add visualization
在这里插入图片描述
选择刚刚设置的data source
在这里插入图片描述
选择scrape_duration_seconds, 然后点击‘Run queries’
在这里插入图片描述

在这里插入图片描述

5. 延伸思考

基于监控数据的自动扩缩容(结合K8s HPA)
请求特征分析(Prompt长度 vs 资源消耗)
能效优化(Tokens/Watt指标构建)

### DeepSeek与Spring Cloud AI微服务的原理及源码架构 #### 1. 概述 DeepSeek作为一种假设性的框架名称,在此背景下理解为一种融合了人工智能(AI)能力的微服务平台。该平台旨在通过集成机器学习模型和服务化部署,提供智能化解决方案。对于基于Spring Cloud构建的AI微服务体系而言,其核心在于如何有效地将AI算法融入到传统的微服务结构之中[^2]。 #### 2. 原理说明 在Spring Cloud环境中引入AI功能通常涉及以下几个方面: - **模型训练与优化**:利用Python等编程语言完成数据处理、特征工程以及模型的选择和调优工作。 - **API封装**:采用Java/Spring Boot创建RESTful接口来暴露经过训练好的ML/DL模型给其他应用程序调用。 - **容器编排**:借助Docker Swarm或Kubernetes实现多实例自动伸缩和支持持续交付流程。 - **监控运维**:实施Prometheus+Grafana组合用于性能指标收集分析;ELK栈负责日志聚合查询展示。 以上过程体现了从原始数据分析直至最终上线运营整个生命周期内的各个环节是如何紧密协作共同作用于提升业务价值的过程[^3]。 #### 3. 源码架构解析 典型的Spring Cloud AI微服务项目会遵循分层设计理念,具体表现为如下几个层次: ##### (a) 数据接入层 负责接收外部请求并将参数传递至下一层逻辑单元进行进一步加工转换。这部分可以由Zuul作为网关组件承担起路由转发职责的同时也能够附加必要的认证鉴权机制确保安全性[^1]。 ```java // Zuul Gateway Configuration Example @Bean public RouteLocator customRouteLocator(RouteLocatorBuilder builder){ return builder.routes() .route(r -> r.path("/ai/**").filters(f->f.stripPrefix(1)).uri("http://localhost:8090")) .build(); } ``` ##### (b) 商业逻辑层 这里集中实现了针对特定领域问题求解所需的各种算法规则定义及其执行路径规划等功能特性。例如,当涉及到图像识别任务时,则可能需要调用TensorFlow Serving所提供的gRPC接口获取预测结果并据此作出相应决策响应。 ##### (c) 存储持久层 为了保证系统的高可用性和灾难恢复能力,所有重要状态信息均需妥善保存下来以便日后查阅追溯。此时可选用关系型数据库(MySQL/PostgreSQL)或者NoSQL存储方案(MongoDB/Cassandra),视具体情况而定。 ##### (d) 安全防护层 鉴于敏感数据保护的重要性日益凸显,因此有必要在整个体系内部署一套完善的身份验证(Security OAuth2/OpenID Connect) 和授权策略配置(Spring Security)。 ```xml <!-- Maven Dependency for Spring Security --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> <!-- Enable Method Level Security Annotation Support --> @EnableGlobalMethodSecurity(prePostEnabled=true, securedEnabled=true) @Configuration class WebSecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http)throws Exception{ http.csrf().disable(). authorizeRequests(). antMatchers("/api/v1/public/**").permitAll(). anyRequest().authenticated(). and(). oauth2Login(); // Use built-in login page with OAuth2 support. } } ``` #### 4. 实战教程推荐资源链接 虽然官方文档提供了详尽的操作指南,但对于初学者来说或许还不够直观易懂。为此建议参考以下几类优质的学习材料辅助理解和掌握相关知识点: - 开发者社区论坛帖子讨论; - 技术博客文章系列连载; - YouTube频道上的免费公开课视频录制; - GitHub仓库里的开源示例工程项目。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值