Phi-3-mini-128k-instruct部署教程:Prometheus+Grafana监控vLLM GPU利用率

你是不是已经用vLLM成功部署了Phi-3-mini-128k-instruct模型,并且用Chainlit搭建了一个漂亮的前端界面?模型跑起来了,对话也正常了,但心里总有点不踏实——服务器上的GPU到底用了多少?内存压力大不大?服务稳不稳定?

别担心,今天我们就来解决这个问题。我将带你一步步搭建一套专业的监控系统,用Prometheus收集数据,用Grafana展示漂亮的图表,让你对模型的运行状态了如指掌。整个过程就像给模型装上了“仪表盘”,哪里有问题一眼就能看出来。

1. 为什么需要监控GPU利用率?

在深入操作之前,我们先聊聊为什么这件事很重要。你可能会想:“模型能正常回答问题不就行了吗?” 但实际情况要复杂得多。

看不见的问题才是真问题。想象一下这些场景:

  • 用户反馈响应变慢了,但你不知道是GPU满了还是网络卡了
  • 服务突然崩溃,你只能重启,却找不到根本原因
  • 想优化性能,但不知道瓶颈到底在哪里
  • 担心资源浪费,却不知道GPU实际用了多少

有了监控系统,这些问题就迎刃而解了。你可以:

  • 实时查看GPU使用率、显存占用、温度等关键指标
  • 设置告警,在问题发生前就收到通知
  • 分析趋势,了解服务的负载模式和资源需求
  • 优化配置,基于数据做出更明智的决策

特别是对于Phi-3-mini-128k-instruct这样的模型,虽然参数不多(38亿),但在处理128K长上下文时,对显存和计算资源的要求依然不低。好的监控能帮你用得更省心、更高效。

2. 监控方案整体架构

我们的监控系统由三个核心组件组成,它们各司其职,协同工作:

用户访问
    ↓
Chainlit前端界面
    ↓
vLLM服务(运行Phi-3-mini-128k-instruct)
    ↓
NVIDIA GPU ←→ NVIDIA DCGM Exporter(采集指标)
    ↓
Prometheus(收集和存储指标)
    ↓
Grafana(可视化展示)

各组件的作用

  • NVIDIA DCGM Exporter:这是NVIDIA官方提供的工具,专门用来采集GPU的各种指标数据
  • Prometheus:负责定时从Exporter拉取数据,并存储起来,相当于监控系统的“数据库”
  • Grafana:从Prometheus读取数据,用漂亮的图表展示出来,是我们的“仪表盘”

听起来有点复杂?别担心,我会带你一步步完成,每个步骤都有详细的命令和说明。

3. 环境准备与依赖安装

在开始之前,请确保你已经按照之前的教程,用vLLM成功部署了Phi-3-mini-128k-instruct模型,并且Chainlit前端可以正常访问。如果还没完成,建议先完成基础部署。

3.1 检查当前环境

首先,我们确认一下基础环境是否就绪:

# 检查Python和pip版本
python3 --version
pip3 --version

# 检查vLLM服务是否在运行
ps aux | grep vllm

# 检查GPU状态(确保有NVIDIA GPU)
nvidia-smi

如果nvidia-smi命令能正常显示GPU信息,说明GPU驱动已经安装好了。这是后续步骤的基础。

3.2 安装Docker和Docker Compose

我们的监控组件将通过Docker容器来运行,这样最方便也最干净。如果你的系统还没有安装Docker,可以按以下步骤安装:

# 更新系统包列表
sudo apt-get update

# 安装必要的依赖
sudo apt-get install -y \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg \
    lsb-release

# 添加Docker官方GPG密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

# 添加Docker仓库
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 安装Docker引擎
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io

# 安装Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

# 验证安装
docker --version
docker-compose --version

安装完成后,建议将当前用户添加到docker组,这样就不需要每次都加sudo了:

sudo usermod -aG docker $USER
# 需要重新登录才能生效

4. 部署NVIDIA DCGM Exporter

DCGM Exporter是监控系统的“眼睛”,它负责采集GPU的各种指标。我们将用Docker来运行它。

4.1 创建配置文件

首先,创建一个目录来存放我们的监控配置:

mkdir -p ~/gpu-monitoring
cd ~/gpu-monitoring

然后创建DCGM Exporter的Docker Compose配置文件:

# 创建文件:dcgm-exporter/docker-compose.yml
cat > dcgm-exporter/docker-compose.yml << 'EOF'
version: '3.8'

services:
  dcgm-exporter:
    image: nvcr.io/nvidia/k8s/dcgm-exporter:3.3.4-3.1.5-ubuntu22.04
    container_name: dcgm-exporter
    restart: unless-stopped
    ports:
      - "9400:9400"
    volumes:
      - /proc:/proc
      - /sys:/sys
    environment:
      - DCGM_EXPORTER_INTERVAL=2000  # 采集间隔2秒
      - DCGM_EXPORTER_KUBERNETES=false
    privileged: true
    devices:
      - /dev/nvidiactl
      - /dev/nvidia-uvm
      - /dev/nvidia-uvm-tools
      - /dev/nvidia0  # 如果有多个GPU,需要全部列出
    command: ["-f", "/etc/dcgm-exporter/dcp-metrics-included.csv"]
EOF

配置文件说明

  • ports: "9400:9400":DCGM Exporter会在9400端口提供指标数据
  • DCGM_EXPORTER_INTERVAL=2000:每2秒采集一次数据,这个频率比较合适
  • privileged: truedevices:让容器有权限访问GPU设备
  • 最后的command指定了要采集的指标列表

4.2 启动DCGM Exporter

现在启动DCGM Exporter服务:

cd dcgm-exporter
docker-compose up -d

检查服务是否正常运行:

# 查看容器状态
docker ps | grep dcgm-exporter

# 测试指标接口
curl http://localhost:9400/metrics

如果一切正常,你会看到一大堆以DCGM_FI_开头的指标数据。这些就是GPU的各种状态信息。

5. 部署Prometheus

Prometheus是我们的监控“大脑”,负责收集和存储所有指标数据。

5.1 创建Prometheus配置文件

在监控目录下创建Prometheus的配置:

cd ~/gpu-monitoring
mkdir prometheus

创建Prometheus的主配置文件:

# 创建文件:prometheus/prometheus.yml
cat > prometheus/prometheus.yml << 'EOF'
global:
  scrape_interval: 15s  # 每15秒采集一次数据
  evaluation_interval: 15s  # 每15秒评估一次告警规则

# 告警规则配置(可选,后续可以添加)
rule_files:
  # - "alert.rules"

# 采集目标配置
scrape_configs:
  # 监控Prometheus自身
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']

  # 监控DCGM Exporter(GPU指标)
  - job_name: 'dcgm-exporter'
    static_configs:
      - targets: ['host.docker.internal:9400']
    scrape_interval: 5s  # GPU指标采集可以更频繁一些
    metrics_path: /metrics

  # 监控vLLM服务(如果你暴露了指标端口)
  - job_name: 'vllm'
    static_configs:
      - targets: ['host.docker.internal:8000']  # vLLM默认端口
    scrape_interval: 10s
EOF

重要提示:上面的配置中使用了host.docker.internal,这是Docker的一个特殊域名,指向宿主机。如果你的Prometheus和DCGM Exporter都在同一台机器的Docker中运行,这样配置是没问题的。

5.2 创建Prometheus的Docker Compose配置

# 创建文件:prometheus/docker-compose.yml
cat > prometheus/docker-compose.yml << 'EOF'
version: '3.8'

services:
  prometheus:
    image: prom/prometheus:latest
    container_name: prometheus
    restart: unless-stopped
    ports:
      - "9090:9090"
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml
      - prometheus_data:/prometheus
    command:
      - '--config.file=/etc/prometheus/prometheus.yml'
      - '--storage.tsdb.path=/prometheus'
      - '--web.console.libraries=/etc/prometheus/console_libraries'
      - '--web.console.templates=/etc/prometheus/consoles'
      - '--storage.tsdb.retention.time=30d'  # 保留30天数据
      - '--web.enable-lifecycle'
    extra_hosts:
      - "host.docker.internal:host-gateway"

volumes:
  prometheus_data:
EOF

5.3 启动Prometheus

cd prometheus
docker-compose up -d

检查Prometheus是否正常运行:

# 查看容器状态
docker ps | grep prometheus

# 访问Prometheus Web界面(如果服务器有公网IP,记得配置安全组)
# 浏览器访问:http://你的服务器IP:9090

在Prometheus的Web界面中,点击菜单栏的"Status" -> "Targets",你应该能看到dcgm-exporter的状态是"UP"。如果状态是"DOWN",可能是网络配置有问题。

6. 部署Grafana

Grafana是我们的“仪表盘”,用来可视化展示监控数据。

6.1 创建Grafana的Docker Compose配置

# 创建文件:grafana/docker-compose.yml
cat > grafana/docker-compose.yml << 'EOF'
version: '3.8'

services:
  grafana:
    image: grafana/grafana:latest
    container_name: grafana
    restart: unless-stopped
    ports:
      - "3000:3000"
    environment:
      - GF_SECURITY_ADMIN_PASSWORD=admin123  # 初始密码,第一次登录后请修改
      - GF_INSTALL_PLUGINS=grafana-piechart-panel
    volumes:
      - grafana_data:/var/lib/grafana
      - ./dashboards:/etc/grafana/provisioning/dashboards
      - ./datasources:/etc/grafana/provisioning/datasources
    extra_hosts:
      - "host.docker.internal:host-gateway"

volumes:
  grafana_data:
EOF

6.2 配置Grafana数据源

Grafana需要知道从哪里获取数据,所以我们要配置Prometheus作为数据源:

mkdir -p grafana/datasources

创建数据源配置文件:

# 创建文件:grafana/datasources/prometheus.yml
cat > grafana/datasources/prometheus.yml << 'EOF'
apiVersion: 1

datasources:
  - name: Prometheus
    type: prometheus
    access: proxy
    url: http://host.docker.internal:9090
    isDefault: true
    editable: true
EOF

6.3 导入GPU监控仪表盘

Grafana社区有很多现成的仪表盘模板,我们可以直接导入一个专门为NVIDIA GPU监控设计的仪表盘。

首先创建仪表盘配置目录:

mkdir -p grafana/dashboards

创建仪表盘配置文件:

# 创建文件:grafana/dashboards/dashboards.yml
cat > grafana/dashboards/dashboards.yml << 'EOF'
apiVersion: 1

providers:
  - name: 'default'
    orgId: 1
    folder: ''
    type: file
    disableDeletion: false
    updateIntervalSeconds: 10
    allowUiUpdates: true
    options:
      path: /etc/grafana/provisioning/dashboards
EOF

6.4 启动Grafana

cd grafana
docker-compose up -d

等待几秒钟,然后检查服务状态:

docker ps | grep grafana

6.5 登录并配置Grafana

  1. 打开浏览器,访问:http://你的服务器IP:3000
  2. 使用默认账号登录:
    • 用户名:admin
    • 密码:admin123(就是我们刚才在配置里设置的)
  3. 首次登录会要求修改密码,建议设置一个强密码

登录后,Grafana应该已经自动配置好了Prometheus数据源。你可以点击左侧菜单的"Configuration" -> "Data Sources"确认一下。

7. 配置GPU监控仪表盘

现在我们来创建一个专门监控vLLM GPU使用情况的仪表盘。

7.1 导入社区仪表盘

最简单的方法是使用社区已有的模板。在Grafana中:

  1. 点击左侧"+"号 -> "Import"
  2. 在"Import via grafana.com"输入框中输入:12239(这是一个很受欢迎的NVIDIA DCGM Exporter仪表盘)
  3. 点击"Load"
  4. 选择"Prometheus"作为数据源
  5. 点击"Import"

现在你就有了一个完整的GPU监控仪表盘,包含了GPU利用率、显存使用、温度、功耗等各种图表。

7.2 创建自定义vLLM监控面板

虽然社区模板很好,但我们可能还需要一些针对vLLM的特定监控。让我们创建几个专门的面板:

面板1:GPU利用率实时监控

在Grafana中:

  1. 点击"Dashboard" -> "New Dashboard" -> "Add new panel"
  2. 在查询框中输入:
    DCGM_FI_DEV_GPU_UTIL{instance="host.docker.internal:9400"}
    
  3. 设置面板标题:"GPU利用率 (%)"
  4. 选择可视化类型:"Time series"
  5. 在"Standard options"中,设置单位:"Percent (0-100)"
  6. 点击"Apply"

面板2:显存使用情况

添加另一个面板:

  1. 查询语句:
    DCGM_FI_DEV_FB_USED{instance="host.docker.internal:9400"}
    
  2. 为了更直观,我们可以同时显示已用显存和总显存:
    # 已用显存
    DCGM_FI_DEV_FB_USED{instance="host.docker.internal:9400"}
    
    # 总显存
    DCGM_FI_DEV_FB_TOTAL{instance="host.docker.internal:9400"}
    
  3. 设置标题:"显存使用 (MB)"
  4. 设置单位:"Data (bytes)" -> "megabytes"
  5. 点击"Apply"

面板3:GPU温度监控

温度过高会影响GPU寿命和稳定性:

  1. 查询语句:
    DCGM_FI_DEV_GPU_TEMP{instance="host.docker.internal:9400"}
    
  2. 设置标题:"GPU温度 (°C)"
  3. 设置单位:"Temperature" -> "celsius"
  4. 可以设置告警阈值(比如超过80°C告警)

面板4:vLLM请求监控(如果暴露了指标)

如果vLLM服务暴露了Prometheus指标,我们还可以监控请求情况。首先需要确保vLLM开启了指标收集:

# 在启动vLLM时添加--metrics-interval参数
# vllm serve phi-3-mini-128k-instruct --metrics-interval 10

然后在Grafana中添加查询:

# 请求速率
rate(vllm:requests:count[1m])

# 平均响应时间
vllm:request:latency:avg

7.3 整理仪表盘布局

把相关面板放在一起,让仪表盘更清晰:

  • 第一行:GPU核心指标(利用率、温度、功耗)
  • 第二行:显存相关(已用、空闲、碎片)
  • 第三行:vLLM服务指标(请求数、延迟、错误率)
  • 第四行:系统指标(CPU、内存、磁盘IO)

点击右上角的"Save dashboard"保存你的配置。

8. 设置告警规则

监控不仅要能看,还要能在出问题时及时通知我们。Grafana提供了强大的告警功能。

8.1 创建GPU利用率过高告警

  1. 在GPU利用率面板,点击标题 -> "Edit"
  2. 切换到"Alert"标签页
  3. 点击"Create alert rule from this panel"
  4. 配置告警条件:
    • last() of query(A, 1m, now) IS ABOVE 80(当GPU利用率持续1分钟高于80%)
  5. 配置告警详情:
    • 告警名称:"GPU利用率过高"
    • 评估频率:"1m"
  6. 配置通知渠道(需要先设置通知渠道,如邮件、Slack、钉钉等)
  7. 点击"Save rule and exit"

8.2 创建显存不足告警

同样方法创建显存告警:

  • 条件:DCGM_FI_DEV_FB_USED / DCGM_FI_DEV_FB_TOTAL * 100 > 90
  • 说明:当显存使用率超过90%时告警

8.3 创建温度告警

  • 条件:DCGM_FI_DEV_GPU_TEMP > 85
  • 说明:当GPU温度超过85°C时告警

9. 监控系统优化与维护

部署完成后,还有一些优化工作可以让监控系统更稳定、更好用。

9.1 调整数据保留策略

默认情况下,Prometheus会保存所有监控数据。时间长了会占用大量磁盘空间。我们可以调整保留时间:

修改prometheus/prometheus.yml,在Prometheus的启动命令中添加:

command:
  - '--config.file=/etc/prometheus/prometheus.yml'
  - '--storage.tsdb.path=/prometheus'
  - '--storage.tsdb.retention.time=30d'  # 只保留30天数据
  - '--storage.tsdb.retention.size=50GB' # 或限制总大小

然后重启Prometheus:

cd prometheus
docker-compose restart

9.2 配置数据持久化

为了防止容器重启后数据丢失,我们已经使用了Docker卷来持久化数据。你可以检查卷的使用情况:

# 查看所有Docker卷
docker volume ls

# 查看特定卷的详细信息
docker volume inspect gpu-monitoring_prometheus_data

9.3 设置开机自启

确保监控服务在服务器重启后能自动启动:

# 在每个服务的docker-compose.yml所在目录,重启策略已经是unless-stopped
# 但为了更可靠,可以创建systemd服务

# 创建全局的Docker Compose服务
sudo nano /etc/systemd/system/gpu-monitoring.service

添加以下内容:

[Unit]
Description=GPU Monitoring Stack
Requires=docker.service
After=docker.service

[Service]
Type=oneshot
RemainAfterExit=yes
WorkingDirectory=/home/你的用户名/gpu-monitoring
ExecStart=/usr/local/bin/docker-compose -f dcgm-exporter/docker-compose.yml up -d
ExecStart=/usr/local/bin/docker-compose -f prometheus/docker-compose.yml up -d
ExecStart=/usr/local/bin/docker-compose -f grafana/docker-compose.yml up -d
ExecStop=/usr/local/bin/docker-compose -f dcgm-exporter/docker-compose.yml down
ExecStop=/usr/local/bin/docker-compose -f prometheus/docker-compose.yml down
ExecStop=/usr/local/bin/docker-compose -f grafana/docker-compose.yml down

[Install]
WantedBy=multi-user.target

启用服务:

sudo systemctl daemon-reload
sudo systemctl enable gpu-monitoring.service
sudo systemctl start gpu-monitoring.service

10. 实际监控效果演示

现在让我们看看监控系统在实际使用中的表现。我会模拟一些典型的vLLM使用场景,并观察监控数据的变化。

10.1 正常负载下的监控

当Phi-3-mini-128k-instruct处理一般长度的文本时(比如几百个token):

  • GPU利用率:通常在20%-40%之间波动
  • 显存使用:模型加载后基础占用约4-6GB,处理请求时会有小幅波动
  • 温度:保持在60-70°C的合理范围
  • 请求延迟:根据输入长度,在100-500毫秒之间

10.2 高负载压力测试

通过Chainlit前端发送一个长文本请求(比如50K token的上下文):

# 模拟长上下文请求
long_text = "A" * 50000  # 5万个字符的文本
# 通过Chainlit或直接调用vLLM API发送请求

观察监控数据的变化:

  • GPU利用率:瞬间飙升到80%-90%,然后逐渐回落
  • 显存使用:明显增加,可能达到8-10GB
  • 温度:可能上升到75-80°C
  • 请求延迟:显著增加,可能达到2-3秒

10.3 并发请求测试

同时发送多个请求:

# 使用ab(Apache Benchmark)进行并发测试
ab -n 100 -c 10 http://localhost:8000/v1/completions

观察效果:

  • GPU利用率:持续保持在高位
  • 请求队列:如果vLLM配置了限流,可能会看到排队现象
  • 错误率:监控是否有请求失败

10.4 监控数据解读技巧

看到监控图表后,如何解读这些数据?这里有一些实用技巧:

  1. 看趋势比看单点更重要:偶尔的峰值是正常的,持续的高位才需要关注
  2. 关联分析:GPU利用率高的时候,温度是否也高?显存使用是否接近上限?
  3. 建立基线:记录服务正常时的指标范围,异常时更容易发现
  4. 关注变化率:指标突然的剧烈变化往往意味着有问题

11. 常见问题与解决方案

在部署和使用过程中,你可能会遇到一些问题。这里列出一些常见问题及解决方法:

11.1 DCGM Exporter无法采集数据

症状:Prometheus中dcgm-exporter target状态为DOWN,或者/metrics端点返回空数据。

可能原因和解决

  1. 权限问题:确保容器以privileged模式运行,并且挂载了正确的设备

    # 检查容器权限
    docker inspect dcgm-exporter | grep -A5 Privileged
    
    # 检查设备挂载
    docker inspect dcgm-exporter | grep -A10 Devices
    
  2. NVIDIA驱动问题:确保宿主机安装了正确的NVIDIA驱动

    # 检查驱动版本
    nvidia-smi
    
    # 安装或更新驱动
    sudo apt-get install nvidia-driver-535  # 根据你的GPU型号选择版本
    
  3. NVIDIA Container Toolkit:确保安装了NVIDIA Container Toolkit

    # 安装NVIDIA Container Toolkit
    distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
    curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
    curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
    sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit
    sudo systemctl restart docker
    

11.2 Prometheus无法连接DCGM Exporter

症状:Prometheus targets页面显示dcgm-exporter为DOWN。

解决

  1. 检查网络连通性

    # 从Prometheus容器内部测试连接
    docker exec prometheus curl -v http://host.docker.internal:9400/metrics
    
  2. 修改Prometheus配置:如果使用host.docker.internal不行,可以尝试直接用宿主机IP

    # 在prometheus.yml中
    - targets: ['宿主机IP:9400']
    
  3. 检查防火墙

    # 确保9400端口开放
    sudo ufw allow 9400
    sudo ufw allow 9090  # Prometheus端口
    sudo ufw allow 3000  # Grafana端口
    

11.3 Grafana无法显示数据

症状:Grafana面板显示"No data"。

解决

  1. 检查数据源:确保Prometheus数据源配置正确且状态为"Healthy"
  2. 检查查询语句:在Grafana中点击"Explore",手动输入查询语句测试
  3. 检查时间范围:确保选择的时间范围内有数据
  4. 检查指标名称:在Prometheus的Graph页面查看可用的指标

11.4 监控数据延迟或丢失

症状:监控图表有断点,或者数据更新不及时。

解决

  1. 调整采集间隔:在Prometheus配置中减少scrape_interval
    scrape_interval: 5s  # 改为5秒采集一次
    
  2. 检查资源占用:监控服务本身也会消耗资源
    # 查看容器资源使用
    docker stats
    
  3. 优化Prometheus配置:如果数据量很大,可以调整存储设置
    command:
      - '--storage.tsdb.retention.time=7d'  # 缩短保留时间
      - '--storage.tsdb.max-block-duration=2h'  # 调整块大小
    

11.5 磁盘空间不足

症状:Prometheus容器频繁重启,或者日志显示磁盘错误。

解决

  1. 清理旧数据

    # 进入Prometheus容器
    docker exec -it prometheus sh
    
    # 查看数据目录大小
    du -sh /prometheus/*
    
    # 使用Prometheus的API清理数据(谨慎操作)
    # curl -X POST http://localhost:9090/api/v1/admin/tsdb/clean_tombstones
    
  2. 调整保留策略:如前所述,减少数据保留时间

  3. 增加磁盘空间:或者将数据目录挂载到更大的磁盘

12. 监控系统的高级用法

基础监控搭建完成后,你还可以进一步优化和扩展监控系统。

12.1 监控vLLM特定指标

vLLM本身也提供了一些监控指标,我们可以将其集成到Prometheus中。

首先,确保vLLM以正确的方式启动:

# 启动vLLM时开启指标端点
vllm serve phi-3-mini-128k-instruct \
  --host 0.0.0.0 \
  --port 8000 \
  --metrics-interval 10  # 每10秒收集一次指标

然后在Prometheus配置中添加新的job:

# 在prometheus.yml的scrape_configs中添加
- job_name: 'vllm-metrics'
  static_configs:
    - targets: ['host.docker.internal:8000']
  scrape_interval: 10s
  metrics_path: /metrics

vLLM提供的一些有用指标:

  • vllm:requests:count:请求总数
  • vllm:request:latency:avg:平均请求延迟
  • vllm:generation:throughput:avg:生成吞吐量
  • vllm:gpu:utilization:vLLM报告的GPU利用率

12.2 集成系统级监控

除了GPU,我们还可以监控整个系统的状态:

# 安装node-exporter监控主机指标
# 创建node-exporter的docker-compose.yml
cat > node-exporter/docker-compose.yml << 'EOF'
version: '3.8'

services:
  node-exporter:
    image: prom/node-exporter:latest
    container_name: node-exporter
    restart: unless-stopped
    ports:
      - "9100:9100"
    volumes:
      - /proc:/host/proc:ro
      - /sys:/host/sys:ro
      - /:/rootfs:ro
    command:
      - '--path.procfs=/host/proc'
      - '--path.sysfs=/host/sys'
      - '--collector.filesystem.mount-points-exclude=^/(sys|proc|dev|host|etc)($$|/)'
EOF

在Prometheus中添加配置:

- job_name: 'node-exporter'
  static_configs:
    - targets: ['host.docker.internal:9100']

12.3 设置自动化告警

除了在Grafana中设置告警,我们还可以使用Alertmanager实现更复杂的告警逻辑:

  1. 部署Alertmanager

    # alertmanager/docker-compose.yml
    version: '3.8'
    
    services:
      alertmanager:
        image: prom/alertmanager:latest
        container_name: alertmanager
        restart: unless-stopped
        ports:
          - "9093:9093"
        volumes:
          - ./alertmanager.yml:/etc/alertmanager/alertmanager.yml
    
  2. 配置告警规则

    # prometheus/alert.rules.yml
    groups:
      - name: gpu_alerts
        rules:
          - alert: HighGPUUsage
            expr: DCGM_FI_DEV_GPU_UTIL > 80
            for: 5m
            labels:
              severity: warning
            annotations:
              summary: "GPU利用率过高"
              description: "GPU利用率持续5分钟超过80%,当前值 {{ $value }}%"
    
  3. 配置通知渠道:支持邮件、Slack、钉钉、企业微信等

12.4 创建自定义监控仪表盘

根据你的具体需求,可以创建更专业的监控视图:

视图1:服务健康状态概览

  • 所有GPU的实时状态
  • 服务运行时间
  • 最近24小时错误数
  • 当前并发请求数

视图2:性能分析视图

  • 请求延迟分布(P50、P90、P99)
  • Token生成速度
  • 缓存命中率
  • 批处理效率

视图3:成本优化视图

  • GPU利用率时间分布
  • 高峰时段识别
  • 资源使用建议
  • 成本估算

13. 总结

通过本教程,我们完成了一个完整的Phi-3-mini-128k-instruct模型GPU监控系统的搭建。让我们回顾一下关键步骤和收获:

13.1 核心成果

  1. 完整的监控栈:从数据采集(DCGM Exporter)到存储(Prometheus)再到展示(Grafana),我们建立了一个专业级的监控系统。

  2. 实时可视化:现在你可以通过Grafana仪表盘实时查看:

    • GPU利用率、显存使用、温度等硬件指标
    • vLLM服务的请求量、延迟、吞吐量等应用指标
    • 系统级的CPU、内存、磁盘使用情况
  3. 智能告警:设置了关键指标的告警规则,可以在问题发生前及时通知。

  4. 历史数据分析:所有监控数据都被保存下来,可以用于分析趋势、优化配置、排查问题。

13.2 实际价值

这个监控系统不仅仅是一个"仪表盘",它为你带来了实实在在的价值:

对开发者

  • 快速定位性能瓶颈
  • 优化模型部署配置
  • 验证优化措施的效果
  • 提供数据支持的技术决策

对运维人员

  • 实时掌握服务状态
  • 提前发现潜在问题
  • 自动化故障处理
  • 容量规划和资源管理

对业务方

  • 确保服务稳定性
  • 优化用户体验
  • 控制运营成本
  • 数据驱动的业务决策

13.3 后续优化建议

监控系统搭建完成后,你还可以考虑以下优化方向:

  1. 监控更多指标:添加业务指标、用户行为指标、成本指标等
  2. 设置SLO/SLI:定义服务的可观测性目标,如延迟SLA、可用性要求等
  3. 自动化运维:基于监控数据实现自动扩缩容、自动故障转移等
  4. 成本优化:分析资源使用模式,优化实例规格和数量
  5. 安全加固:为监控系统添加认证、授权、加密等安全措施

13.4 最后的建议

监控系统的价值在于持续使用和不断优化。建议你:

  1. 定期查看:养成每天查看监控仪表盘的习惯
  2. 设置周报:每周分析监控数据,发现趋势和模式
  3. 持续优化:根据监控数据调整告警阈值、优化资源配置
  4. 团队共享:将重要的监控视图分享给团队成员
  5. 文档化:记录监控系统的配置、告警规则、处理流程

记住,好的监控系统不是一蹴而就的,而是在使用中不断演进和完善的。现在你已经有了一个强大的起点,可以根据实际需求不断调整和扩展。

希望这个教程能帮助你更好地管理和优化Phi-3-mini-128k-instruct模型的部署。如果你在实施过程中遇到任何问题,或者有更好的建议,欢迎分享你的经验。


获取更多AI镜像

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

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐