监控运行大模型的显存占用率的方式

监控运行大模型的显存占用率的方式:“临时观察 → 终端可视化 → 生产级监控报警”

1)最轻量:nvidia-smi 实时观察(无需安装)
• 连续采样关键信息(适合临时看是否“打满”)

nvidia-smi --query-gpu=index,utilization.gpu,utilization.memory,memory.used,memory.total,power.draw,temperature.gpu \
           --format=csv,noheader -l 1
•	面向时序的监控模式:
# 每秒输出功耗/利用率/显存等,-i 指定要看的卡
nvidia-smi dmon -s pucmT -i 0,1,2,3
# 逐进程维度看利用率(谁在吃GPU)
nvidia-smi pmon -s umt -i 0,1,2,3

2)终端 TUI/CLI 工具(更好看、易排查)
• nvtop(TUI)

apt-get install -y nvtop
nvtop
•	nvitop(Python 版 TUI,支持进程/显存/显卡拓扑)
pip install nvitop
nvitop
•	gpustat(极简列表 + 进程)
pip install gpustat
gpustat --watch -i 1

3)一键“满载告警”脚本(本机阈值判断)

判定规则(可改):GPU 利用率 ≥95% 且显存使用 ≥90% 连续 30 秒即判“满载”。

#!/usr/bin/env bash
# gpu-fullcheck.sh
CARDS="0,1,2,3"   # 要监控的卡
THRESH_UTIL=95
THRESH_MEM=90
WINDOW=30         # 连续 N 秒

ok=0
while true; do
  line=$(nvidia-smi --query-gpu=utilization.gpu,memory.used,memory.total --format=csv,noheader -i ${CARDS})
  # 如果任一GPU未达标就重置计数
  all_full=1
  echo "$line" | while IFS=',' read -r util mem_used mem_total; do
    u=$(echo $util | tr -dc '0-9')
    mu=$(echo $mem_used | tr -dc '0-9')
    mt=$(echo $mem_total | tr -dc '0-9')
    memp=$(( 100 * mu / mt ))
    if [ "$u" -lt "$THRESH_UTIL" ] || [ "$memp" -lt "$THRESH_MEM" ]; then
      all_full=0
      break
    fi
  done

  if [ "${all_full}" -eq 1 ]; then
    ok=$((ok+1))
  else
    ok=0
  fi

  if [ "$ok" -ge "$WINDOW" ]; then
    echo "[FULL] GPUs saturated (util>=${THRESH_UTIL}% and mem>=${THRESH_MEM}% for ${WINDOW}s)."
    exit 0
  fi

  sleep 1
done

用法:bash gpu-fullcheck.sh
想更严格就把 THRESH_UTIL/THRESH_MEM/WINDOW 调高。

4)生产级:Prometheus + Grafana + DCGM Exporter(强烈推荐)
• DCGM(NVIDIA Data Center GPU Manager)能暴露完整 GPU 指标给 Prometheus,做看板 + 告警。
• 启动 Exporter(Docker):

docker run -d --gpus all --restart=always --name dcgm-exporter -p 9400:9400 \
  nvcr.io/nvidia/k8s/dcgm-exporter:latest
•	Prometheus 抓取(示例 prometheus.yml 片段):
scrape_configs:
  - job_name: 'dcgm'
    static_configs:
      - targets: ['localhost:9400']
•	告警规则(示例):
groups:
- name: gpu
  rules:
  - alert: GPUHighUtilization
    expr: DCGM_FI_DEV_GPU_UTIL > 95
    for: 5m
    labels: { severity: warning }
    annotations:
      description: "GPU util >95% for 5m on {{ $labels.hostname }} (gpu {{ $labels.uuid }})"

  - alert: GPUMemoryHigh
    expr: (DCGM_FI_DEV_FB_USED / DCGM_FI_DEV_FB_TOTAL) > 0.90
    for: 5m
    labels: { severity: warning }
    annotations:
      description: "GPU memory >90% for 5m on {{ $labels.hostname }} (gpu {{ $labels.uuid }})"
•	Grafana 直接导入社区 DCGM 仪表盘(含利用率、显存、功耗、温度、PCIe 带宽、Xid 错误等),就有时序图 + P95/P99叠加分析。

5)性能归因/压测辅助
• Nsight Systems/Compute:深入到内核层面看 SM 占用、内存带宽、瓶颈类型(是否真的“算力打满”而不是被内存/PCIe 卡住)。
• gpu-burn / stress 工具:用于基准“打满”验证(别在生产上跑,容易把温度/功耗拉满)。

给你的小结
• 临时:nvidia-smi dmon / pmon + 我上面的满载脚本就够用了。
• 常态化:上 DCGM Exporter + Prometheus + Grafana,再加告警阈值(>95% 利用率、>90% 显存、功耗/温度叠加)= 可视化+报警闭环。
• 结合你跑 vLLM 的场景,建议把 GPU 指标与 vLLM 的 Prometheus 指标(如请求队列、prefill/decoding 直方图)一起进 Grafana,才能判断“排队导致的高延迟”还是“算力真打满”。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MonkeyKing.sun

对你有帮助的话,可以打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值