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 平台的核心技术栈。
