如何获取NVIDIA GPU Minor Number与GPU UUID的对应关系?
可选实现方案
方案1:直接读取sysfs文件系统(最优,无需调用外部命令)
Linux下NVIDIA驱动会把所有GPU的相关信息都暴露在/sys/class/nvidia目录下,直接遍历即可拿到对应关系,不需要启动额外进程解析nvidia-smi的输出,性能开销可以忽略。
操作逻辑:
- 遍历
/sys/class/nvidia/下的所有nvidia*子目录,目录名末尾的数字就是Minor Number - 每个子目录下的
uuid文件存储的就是对应GPU的UUID,直接读取即可
示例Shell命令:
for gpu_dir in /sys/class/nvidia/nvidia[0-9]*; do minor=$(basename "$gpu_dir" | sed 's/nvidia//') uuid=$(cat "$gpu_dir/uuid") echo "Minor Number: $minor, UUID: $uuid" done
如果是用其他编程语言实现,直接读写对应路径的文件就行,比解析命令行输出稳定得多。
方案2:调用NVIDIA管理库NVML API(适合代码集成)
如果是在C/C++/Python等程序里需要获取这个对应关系,可以直接调用NVML的官方API,不用fork进程执行nvidia-smi。核心逻辑:
- 调用
nvmlInit()初始化NVML - 遍历所有设备,用
nvmlDeviceGetMinorNumber()获取Minor Number,用nvmlDeviceGetUUID()获取UUID - 最后调用
nvmlShutdown()释放资源
Python下用pynvml库的示例代码:
import pynvml pynvml.nvmlInit() device_count = pynvml.nvmlDeviceGetCount() for i in range(device_count): handle = pynvml.nvmlDeviceGetHandleByIndex(i) minor = pynvml.nvmlDeviceGetMinorNumber(handle) uuid = pynvml.nvmlDeviceGetUUID(handle).decode('utf-8') print(f"Minor Number: {minor}, UUID: {uuid}") pynvml.nvmlShutdown()
这个方案的稳定性比解析nvidia-smi输出高,不会因为nvidia-smi的输出格式变化就失效,性能也比调用外部命令好。
注意:以上两种方案都依赖NVIDIA驱动正常加载,
/sys/class/nvidia目录存在才可以正常使用。
内容的提问来源于stack exchange,提问作者JW Wang
相关产品推荐
相关产品推荐

