GPU

NVML

·12 分钟阅读·4542 字

NVIDIA Management Library 的 GPU 信息采集、状态监控与 Python 调用方法

📋 目录

NVML

NVML(NVIDIA Management Library) 是学习 AI 基础设施、GPU 运维和 AIOps 的第一个必学组件。

如果把 Kubernetes 比作管理服务器的 API,那么 NVML 就是管理 NVIDIA GPU 的 API。

它也是 nvidia-smi 背后的核心库。


一、什么是 NVML

NVML(NVIDIA Management Library)是 NVIDIA 官方提供的一个 C API,用于监控和管理 GPU。

官方的定位可以理解为:

提供程序访问 NVIDIA GPU 硬件状态和管理功能的接口。

很多你熟悉的工具,其实底层都调用了 NVML,例如:

+------------------------+
|      nvidia-smi        |
+-----------+------------+
            |
            | 调用
            ▼
+------------------------+
|         NVML           |
+-----------+------------+
            |
            ▼
+------------------------+
|     NVIDIA Driver      |
+-----------+------------+
            |
            ▼
+------------------------+
|        GPU 硬件        |
+------------------------+

所以:

nvidia-smi

实际上就是:

nvidia-smi

↓

NVML API

↓

GPU Driver

↓

GPU

二、为什么要学习 NVML

对于普通深度学习工程师:

GPU 就是:

torch.cuda

结束了。

但是对于:

  • AIOps

  • GPU 运维

  • GPU Scheduler

  • Kubernetes GPU Operator

  • GPU Monitoring

  • GPU 云平台

NVML 就非常重要。

因为它能告诉你:

GPU 到底发生了什么。

例如:

GPU 当前:

利用率

显存

ECC

温度

风扇

PCIe

时钟

功耗

进程

MIG

NVLink

这些都是 NVML 提供的数据。


三、NVML 可以做什么

可以分成四大类。


第一类:GPU 基本信息

例如:

GPU 型号:

RTX3050

驱动:

575.xx

CUDA Version:

12.x

UUID:

GPU-7fa...

Serial:

03218...

Bus ID:

0000:01:00

Python:

nvmlDeviceGetName()

nvmlDeviceGetUUID()

nvmlDeviceGetPciInfo()

第二类:GPU 状态

这是监控最常用的。

包括:

GPU 利用率:

63%

显存:

4200MB

GPU 温度:

72℃

风扇:

41%

GPU 时钟:

1860MHz

功耗:

74W

Python:

nvmlDeviceGetUtilizationRates()

nvmlDeviceGetMemoryInfo()

nvmlDeviceGetTemperature()

nvmlDeviceGetPowerUsage()

最终:

可以得到:

{
    "gpu":63,
    "memory":4200,
    "temperature":72,
    "power":74
}

第三类:GPU 上运行的进程

这是 AIOps 最喜欢用的一类。

例如:

GPU 上:

谁在运行?

PID

Python

CUDA

TensorFlow

PyTorch

Python:

nvmlDeviceGetComputeRunningProcesses()

返回:

PID

Memory Used

例如:

PID 12893

Memory

4200MB

然后:

Python:

再去:

ps

查询:

12893

↓

python train.py

这样:

GPU:

就可以对应:

GPU

↓

Process

↓

Pod

↓

Training Job

这是很多 GPU 调度器都在做的事情。


第四类:GPU 管理

不仅能读。

还能写。

例如:

设置:

GPU 功耗:

250W

设置:

GPU Clock:

1700MHz

开启:

Persistence Mode

等等。

不过:

很多接口:

需要:

管理员权限。


四、NVML 的整体架构

整个调用流程:

Python

↓

pynvml

↓

NVML(C Library)

↓

NVIDIA Driver

↓

GPU

Python:

其实只是:

调用:

官方:

libnvidia-ml.so

Windows:

就是:

nvml.dll

所以NVML不是 Python 写的。Python只是封装。


五、Python 如何调用 NVML

安装:

pip install nvidia-ml-py

初始化:

from pynvml import *

nvmlInit()

结束:

nvmlShutdown()

中间:

获取 GPU:

handle = nvmlDeviceGetHandleByIndex(0)

这里Handle可以理解成GPU 对象。以后所有 API都需要Handle。

例如:

util = nvmlDeviceGetUtilizationRates(handle)
temp = nvmlDeviceGetTemperature(handle)
memory = nvmlDeviceGetMemoryInfo(handle)

六、Handle 是什么?

很多人第一次都会疑惑为什么不是:

GPU0.temperature()

而是:

handle

实际上Handle就是GPU 的句柄。

类似Linux:

File Descriptor

例如打开:

/dev/nvidia0

返回:

一个Handle。

以后所有操作都是:

Handle

↓

Temperature

Handle

↓

Memory

Handle

↓

Power

因为GPU可能有很多块。 例如:

GPU0

GPU1

GPU2

GPU3

Handle用于区分。


七、最重要的几个 API

建议优先掌握这些:

GPU 数量

count = nvmlDeviceGetCount()

返回:

2

说明:

两块 GPU。


获取 Handle

handle = nvmlDeviceGetHandleByIndex(0)

GPU 名称

name = nvmlDeviceGetName(handle)

例如:

RTX 3050 Laptop GPU

GPU 利用率

util = nvmlDeviceGetUtilizationRates(handle)

返回:

util.gpu

例如:

62%

还有:

util.memory

显存控制器利用率。


显存

memory = nvmlDeviceGetMemoryInfo(handle)

包括:

memory.used

memory.free

memory.total

温度

nvmlDeviceGetTemperature(
    handle,
    NVML_TEMPERATURE_GPU
)

返回:

72℃

功耗

nvmlDeviceGetPowerUsage(handle)

返回:

74000

注意:

单位:

不是:

W。

而是:

mW

所以:

需要:

power/1000

GPU 进程

nvmlDeviceGetComputeRunningProcesses(handle)

返回:

PID

Memory

八、NVML 在 AIOps 中的应用

例如:

你想做:

训练异常检测。

Agent:

每秒:

调用:

NVML

得到:

{
    "gpu":0,
    "memory":5800,
    "temperature":65
}

然后:

Prometheus:

得到:

Loss:

1.53

Agent:

分析:

GPU=0

Loss 不变

↓

训练卡死

或者:

GPU=100%

Memory=6000

Temperature=91℃

↓

GPU 过热

或者:

GPU=100%

Memory=0

↓

CUDA Driver Error

所以:

NVML:

提供:

GPU。

Prometheus:

提供:

训练。

Kubernetes:

提供:

Pod。

三者:

组合。

就是:

AIOps。


九、学习 NVML 的推荐路线

建议按下面的顺序来学习,每一步都做成一个小实验:

阶段学习目标动手实验
① 入门理解 NVML 架构、Handle、初始化打印 GPU 名称、驱动版本、GPU 数量
② 基础监控掌握 GPU 利用率、显存、温度、功耗等核心 API编写 gpu_monitor.py,每秒输出 GPU 状态
③ 进程监控理解 GPU 与进程的关系获取 GPU 上运行的 PID,并结合 psutil 找到对应 Python 进程
④ Prometheus Exporter将 NVML 数据转换为监控指标编写 gpu_exporter.py,通过 /metrics 暴露指标供 Prometheus 抓取
⑤ Kubernetes 集成将 GPU 指标关联到 Pod 和训练任务编写 gpu_collector.py,建立 GPU → PID → 容器 → Pod 的映射
⑥ AIOps 应用基于 GPU 指标做异常检测实现 GPU 空闲、显存泄漏、训练卡死、GPU 过热等诊断规则

对于AI 运维学习方向,建议不要把 NVML 当成一个普通 Python 库来学,而是把它看成 GPU 世界里的 Kubernetes API。

就像 Kubernetes API 能告诉你 Pod、Node、Deployment 的状态一样,NVML 能告诉你 GPU、显存、温度、功耗、CUDA 进程 的状态。

以后你会把 NVML(GPU)+ Kubernetes API(容器)+ Prometheus(指标)+ LLM(分析) 四者组合起来,这正是一个完整 AIOps 平台的核心技术栈。

Yanche Blog

记录云原生、Linux、数据库等技术领域的学习心得,以及日常生活的思考与感悟。

© 2026 Yanche Blog. All rights reserved.

Powered by Astro