utkuozdemir/nvidia_gpu_exporter · 上手攻略

  • 仓库:utkuozdemir/nvidia_gpu_exporter
  • 链接:https://github.com/utkuozdemir/nvidia_gpu_exporter
  • 分类:ai
  • 作者:Jay
  • 更新:2026-08-12

是什么

nvidia_gpu_exporter 是一个用 Go 编写的 Prometheus GPU 指标导出器,底层调用 nvidia-smi(NVIDIA 系统管理接口)采集显卡实时状态——包括 GPU 利用率、显存占用、温度、功率、风扇转速、时钟频率等——并以 Prometheus 标准格式(/metrics 端点)暴露出来,可直接对接 Grafana 渲染监控面板。

它的核心定位是轻量级 GPU 监控:适合消费级显卡(GeForce/RTX)、小型 Kubernetes 集群、边缘设备、vGPU/MIG 切片环境,以及那些不想装一整套 NVIDIA GPU Operator 但又想看到 GPU 指标的用户。相比官方 DCGM-exporter,它不需要 CUDA Toolkit,部署门槛更低,一个二进制或一行 Docker 命令即可运行。

架构上,exporter 分为两种采集后端: - exec 后端(默认):调用 nvidia-smi 命令行,解析其输出。支持所有操作系统(Windows/Linux/macOS),但 nvidia-smi 输出格式在不同驱动版本/GPU 型号间存在差异,仓库已内置大量测试用例覆盖。 - nvml 后端(实验性):直接读取 NVIDIA 驱动库(libnvidia-ml),无需 nvidia-smi 二进制,仅 Linux 支持,可获取 nvidia-smi 无法提供的 per-MIG-instance 指标、XID 错误计数、总能耗、PCIe 吞吐量。

解决什么问题

在 GPU 监控领域,官方方案 DCGM(Data Center GPU Manager)功能完整但部署复杂,需要 NVIDIA GPU Operator、CUDA 运行时和一系列依赖。nvidia_gpu_exporter 的设计哲学是:最小化依赖,只用 nvidia-smi,就能在 Windows、Linux、macOS 上跑起来。同时它自带两个 Grafana Dashboard(单卡详情 + 多卡概览),装完就能看图,省去 dashboard 配置时间。

快速安装

方式一:Docker(最简,推荐)

# 默认版本(exec 后端,依赖 nvidia-smi)
docker run -d \
  --name nvidia_gpu_exporter \
  --restart unless-stopped \
  --gpus all \
  -p 9835:9835 \
  utkuozdemir/nvidia_gpu_exporter:latest

# NVML 后端(无需 nvidia-smi,直接读驱动库,⚠️实验性,仅 Linux)
docker run -d \
  --name nvidia_gpu_exporter \
  --restart unless-stopped \
  --gpus all \
  -e NVIDIA_DRIVER_CAPABILITIES=utility \
  -p 9835:9835 \
  utkuozdemir/nvidia_gpu_exporter:latest-nvml

⚠️ Docker 方式要求 GPU 可见(--gpus all)和 nvidia-container-toolkit 已正确安装。NVIDIA_DRIVER_CAPABILITIES=utility 是 NVML 后端镜像的必要环境变量,否则容器无法访问驱动库。

方式二:二进制直接运行

# Linux x86_64 示例(版本号请替换为最新,参见 Releases 页面)
VERSION=X.Y.Z
wget https://github.com/utkuozdemir/nvidia_gpu_exporter/releases/download/v${VERSION}/nvidia_gpu_exporter_${VERSION}_linux_x86_64.tar.gz
tar -xvzf nvidia_gpu_exporter_${VERSION}_linux_x86_64.tar.gz
mv nvidia_gpu_exporter /usr/bin/nvidia_gpu_exporter

# 验证
nvidia_gpu_exporter --help

# 启动(前台测试,Ctrl+C 终止后转为 systemd 服务)
nvidia_gpu_exporter

⚠️ 版本号请以 Releases 页面 为准,建议不要硬编码版本号,本攻略亦不做版本号硬编码以避免过时引用。

方式三:deb / rpm 包(系统管理友好)

# Debian 系(Ubuntu/Debian)
sudo dpkg -i nvidia-gpu-exporter_<version>_amd64.deb

# RPM 系(CentOS/RHEL/Fedora)
sudo rpm -i nvidia-gpu-exporter-<version>.x86_64.rpm

# 安装后自动注册 systemd 服务(deb/rpm 包默认处理)
sudo systemctl enable nvidia-gpu-exporter
sudo systemctl start nvidia-gpu-exporter

⚠️ deb/rpm 包仅支持 systemd init 系统,不支持 SysVinit 或其他 init 系统。

方式四:Windows PowerShell 一键脚本

# 1. 下载安装脚本(保存为 .ps1 文件)
# 下载地址:https://raw.githubusercontent.com/utkuozdemir/nvidia_gpu_exporter/main/install/windows-all-in-one.ps1

# 2. 管理员 PowerShell 运行(会自动装 Prometheus + Grafana + Exporter 三件套)
powershell -NoProfile -ExecutionPolicy Bypass -File .\windows-all-in-one.ps1

# 验证
# Prometheus: http://localhost:9090
# Grafana:    http://localhost:3000 (默认账号 admin / admin)

⚠️ 如果之前用 scoop+ssm 方式安装过旧版,先运行同目录下的 windows-all-in-one-uninstall.ps1 清除旧服务,否则可能冲突。卸载脚本保留历史数据(只删服务本身)。

方式五:winget(Windows,包管理器)

# 用户级安装(PATH 自动加入)
winget install utkuozdemir.nvidia_gpu_exporter

# 如需注册为 Windows 服务(需管理员权限,系统级安装)
winget install --scope machine utkuozdemir.nvidia_gpu_exporter
nvidia_gpu_exporter install

核心用法

1. Prometheus 接入配置

# prometheus.yml
scrape_configs:
  - job_name: 'nvidia_gpu'
    static_configs:
      - targets: ['localhost:9835']
    scrape_interval: 15s       # 推荐,不要太频繁(nvidia-smi 有开销)
    scrape_timeout: 10s

⚠️ 默认 --collect.timeout 为 10s,Prometheus 的 scrape_timeout 应略大于 exporter 的 collection timeout。

2. 常用命令行参数

# 指定监听地址(默认 :9835)
nvidia_gpu_exporter --web.listen-address :9100

# 指定 nvidia-smi 路径(默认 "nvidia-smi")
nvidia_gpu_exporter --nvidia-smi-command /usr/bin/nvidia-smi

# 开启 per-process GPU 指标(哪个进程用了多少显存)
nvidia_gpu_exporter --collect.compute-apps

# Docker 中使用 hostPID(看到宿主机进程)
docker run --gpus all --pid=host utkuozdemir/nvidia_gpu_exporter:latest --collect.compute-apps

# 开启 NVML 后端(实验性,Linux)
nvidia_gpu_exporter --collect.backend=nvml

# Demo 模式(无 GPU 也能跑,用于测试 dashboard)
nvidia_gpu_exporter --collect.backend=demo

# 指定自定义 nvidia-smi(通过 SSH 远程执行)
nvidia_gpu_exporter --nvidia-smi-command "ssh user@gpu-host sudo nvidia-smi"

# 排除慢速/不支持的字段(避免报错)
nvidia_gpu_exporter --query-field-names-exclude "remapped_rows.histogram.*"

3. 指标解读

exporter 暴露的主要指标(命名以 nvidia_gpu_ 开头):

指标名 类型 说明
nvidia_gpu_utilization_percent gauge GPU 利用率 %
nvidia_gpu_memory_used_bytes gauge 显存已用(字节)
nvidia_gpu_memory_total_bytes gauge 显存总量(字节)
nvidia_gpu_memory_free_bytes gauge 显存剩余(字节)
nvidia_gpu_temperature_celsius gauge GPU 温度(℃)
nvidia_gpu_power_usage_watts gauge 当前功率(W)
nvidia_gpu_power_draw_watts gauge 实际功率(W,部分卡)
nvidia_gpu_fan_speed_percent gauge 风扇转速 %
nvidia_gpu_clock_sm_mhz gauge SM(流多处理器)时钟(MHz)
nvidia_gpu_clock_memory_mhz gauge 显存时钟(MHz)
nvidia_gpu_clock_video_mhz gauge 视频编解码时钟(MHz)
nvidia_gpu_process_memory_bytes gauge 单进程 GPU 内存占用(per-process,需 --collect.compute-apps
nvidia_xid_errors_total counter XID 错误计数(NVML 后端专用)
nvidia_gpu_energy_total_joules counter GPU 总能耗(焦耳,NVML 后端专用)
nvidia_gpu_pcie_throughput_* gauge PCIe 吞吐量(NVML 后端专用)

配套 Grafana Dashboard

exporter 自带两个官方 Grafana Dashboard,导入方式二选一:

方式一:Grafana 内 Import(推荐) - 单卡详情 Dashboard:ID 14574(Dashboards → New → Import → 输入 14574) - 多卡概览 Dashboard:ID 25547(同上,输入 25547)

方式二:Helm chart 自动 Provision

# values.yaml
grafanaDashboard:
  enabled: true  # 自动 provision 两张 Dashboard

Dashboard JSON 文件也保存在仓库 docs/grafana/ 目录下,可离线使用或自行修改主题色。

⚠️ NVML 后端专属指标(XID errors、energy total、PCIe throughput)在默认 exec 后端下对应面板为空,属于正常现象;换上 NVML 后端后这些面板会自动亮起。

典型适用场景

场景 推荐安装方式 推荐后端
小型 homelab / 游戏主机 GPU 监控 Docker 或 winget + Grafana exec(默认)
小型 Kubernetes 集群(无 GPU Operator) Helm chart exec 或 nvml
边缘设备 / 工控机 GPU 监控 二进制 + systemd exec
vGPU / MIG 切片环境 Docker + NVML 后端 nvml(必需)
多卡服务器统一 Prometheus 看板 Helm chart + Grafana exec 或 nvml
快速验证 exporter 配置(无 GPU) Demo 模式 demo

坑与注意

  1. NVML 后端为实验性--collect.backend=nvml 标记为 experimental,主要因为需要更多驱动版本/GPU 型号的真实环境测试积累。生产环境建议默认使用 exec 后端;如需 per-MIG-instance 指标或 XID 错误计数,可在 staging 环境验证后再上生产,并记得提 issue 反馈体验。
  2. Windows nvidia-smi 路径含空格:Windows 上 nvidia-smi.exe 默认路径为 C:\Program Files\NVIDIA Corporation\NVSMI\nvidia-smi.exe,必须完整引用:--nvidia-smi-command '"C:\Program Files\NVIDIA Corporation\NVSMI\nvidia-smi.exe"'
  3. Prometheus scrape 超时--collect.timeout 默认 10s,复杂 nvidia-smi 查询(多卡 + per-process + 网络存储延迟)在机械盘环境下可能超时,需适当调大 --collect.timeout
  4. Docker NVIDIA_DRIVER_CAPABILITIES:使用 latest-nvml 镜像时必须设置 NVIDIA_DRIVER_CAPABILITIES=utility,否则容器无法访问 NVML 库;exec 后端镜像默认无需此变量。
  5. Per-process 指标需要 hostPID:在 Kubernetes 中需配置 hostPID: true,或在 Docker 中加 --pid=host,否则 exporter 看不到其他进程的 GPU 占用。
  6. GPG 签名验证(可选,推荐):release 的 checksums.txt.asc 用 GPG 签名覆盖所有二进制/包,正式环境建议校验: bash curl -fsSL https://utkuozdemir.github.io/nvidia_gpu_exporter/pubkey.asc | gpg --import gpg --verify checksums.txt.asc checksums.txt sha256sum --ignore-missing -c checksums.txt
  7. Cosign 镜像签名验证(可选): bash cosign verify \ --certificate-identity-regex '.*' \ --certificate-oidc-issuer-regex '.*' \ utkuozdemir/nvidia_gpu_exporter:latest-nvml

与同类对比

方案 语言 核心依赖 Windows 多卡 MIG 支持 Dashboard
nvidia_gpu_exporter Go nvidia-smi(可选 NVML) ✅(nvml) ✅ 两张
DCGM-exporter Go DCGM/CUDA
node_exporter + textfile Go nvidia-smi + cron
Telegraf NVIDIA plugin Go nvidia-smi

DCGM-exporter 适合数据中心级 Kubernetes 部署(与 GPU Operator 深度集成,支持完整 DCGM 指标);nvidia_gpu_exporter 适合轻量场景——消费卡、小型集群、边缘设备、vGPU/MIG 环境,以及需要一站式 Windows 监控的用户。

一句话推荐结论

nvidia_gpu_exporter 是目前安装门槛最低的 Prometheus GPU 监控方案,一行 Docker、一个二进制或一个 winget 命令就能跑起来,配套 Grafana Dashboard 开箱即用;唯一需要注意的是 NVML 后端仍在实验阶段,生产环境优先用默认 exec 后端,如需 MIG 分片指标或 XID 错误监控再考虑 NVML 后端并留意稳定性。

原始 commit/PR:https://github.com/utkuozdemir/nvidia_gpu_exporter/commits/main · Releases · ⚠️ NVML 后端为 experimental,生产环境建议默认 exec 后端;Windows nvidia-smi 路径含空格需完整引用;Per-process 指标在容器中需要 hostPID