NVIDIA 管理库的 Python 绑定
项目描述
Python 绑定到 NVIDIA 管理库
为 GPU 管理和监控功能提供 Python 接口。
这是 NVML 库的包装器。有关 NVML 库的信息,请参阅 NVML 开发人员页面 http://developer.nvidia.com/nvidia-management-library-nvml
从版本 11.0.0 开始,pynvml 中使用的 NVML 包装器与通过nvidia-ml-py发布的相同。
请注意,此文件可以使用“python -m doctest -v README.txt”运行,尽管结果取决于系统
需要
Python 3 或带有 ctypes 模块的早期版本。
安装
pip install .
用法
您可以使用较低级别的 nvml 绑定
>>> from pynvml import *
>>> nvmlInit()
>>> print("Driver Version:", nvmlSystemGetDriverVersion())
Driver Version: 410.00
>>> deviceCount = nvmlDeviceGetCount()
>>> for i in range(deviceCount):
... handle = nvmlDeviceGetHandleByIndex(i)
... print("Device", i, ":", nvmlDeviceGetName(handle))
...
Device 0 : Tesla V100
>>> nvmlShutdown()
或者更高级别的 nvidia_smi API
from pynvml.smi import nvidia_smi
nvsmi = nvidia_smi.getInstance()
nvsmi.DeviceQuery('memory.free, memory.total')
from pynvml.smi import nvidia_smi
nvsmi = nvidia_smi.getInstance()
print(nvsmi.DeviceQuery('--help-query-gpu'), end='\n')
功能
Python 方法包装了 NVML 函数,在 C 共享库中实现。每个函数的用途都是一样的,但有以下例外:
-
失败的错误代码不是返回错误代码,而是作为 Python 异常引发。
>>> try: ... nvmlDeviceGetCount() ... except NVMLError as error: ... print(error) ... Uninitialized
-
C 函数输出参数从左到右从相应的 Python 函数返回。
nvmlReturn_t nvmlDeviceGetEccMode(nvmlDevice_t device, nvmlEnableState_t *current, nvmlEnableState_t *pending);
>>> nvmlInit() >>> handle = nvmlDeviceGetHandleByIndex(0) >>> (current, pending) = nvmlDeviceGetEccMode(handle)
-
C 结构被转换为 Python 类。
nvmlReturn_t DECLDIR nvmlDeviceGetMemoryInfo(nvmlDevice_t device, nvmlMemory_t *memory); typedef struct nvmlMemory_st { unsigned long long total; unsigned long long free; unsigned long long used; } nvmlMemory_t;
>>> info = nvmlDeviceGetMemoryInfo(handle) >>> print "Total memory:", info.total Total memory: 5636292608 >>> print "Free memory:", info.free Free memory: 5578420224 >>> print "Used memory:", info.used Used memory: 57872384
-
Python 处理字符串缓冲区的创建。
nvmlReturn_t nvmlSystemGetDriverVersion(char* version, unsigned int length);
>>> version = nvmlSystemGetDriverVersion(); >>> nvmlShutdown()
有关使用信息,请参阅 NVML 文档。
变量
所有有意义的 NVML 常量和枚举都在 Python 中公开。
不使用 NVML_VALUE_NOT_AVAILABLE 常量。而是将 None 映射到该字段。
NVML 权限
许多pynvml
包装器假定可以在没有管理员/root 权限的情况下使用底层 NVIDIA 管理库 (NVML) API。但是,系统权限当然可以阻止 pynvml 查询 GPU 性能计数器。例如:
$ nvidia-smi nvlink -g 0
GPU 0: Tesla V100-SXM2-32GB (UUID: GPU-96ab329d-7a1f-73a8-a9b7-18b4b2855f92)
NVML: Unable to get the NvLink link utilization counter control for link 0: Insufficient Permissions
检查权限状态的一个简单方法是RmProfilingAdminOnly
在驱动程序params
文件中查找(注意这RmProfilingAdminOnly == 1
意味着需要 admin/sudo 访问权限):
$ cat /proc/driver/nvidia/params | grep RmProfilingAdminOnly
RmProfilingAdminOnly: 1
有关设置/取消设置相关管理员权限的更多信息,请参阅这些关于解决ERR_NVGPUCTRPERM
错误的说明。
发行说明
- 版本 2.285.0
- 为 NVML 2.285 添加了新功能。有关详细信息,请参阅 NVML 文档。
- 移植以支持 Python 3.0 和 Python 2.0 语法。
- 添加了 nvidia_smi.py 工具作为示例应用程序。
- 版本 3.295.0
- 为 NVML 3.295 添加了新功能。有关详细信息,请参阅 NVML 文档。
- 更新了 nvidia_smi.py 工具
- 包括额外的错误处理
- 版本 4.304.0
- 为 NVML 4.304 添加了新功能。有关详细信息,请参阅 NVML 文档。
- 更新了 nvidia_smi.py 工具
- 版本 4.304.3
- 修复 nvmlUnitGetDeviceCount 错误
- 版本 5.319.0
- 为 NVML 5.319 添加了新功能。有关详细信息,请参阅 NVML 文档。
- 版本 6.340.0
- 为 NVML 6.340 添加了新功能。有关详细信息,请参阅 NVML 文档。
- 版本 7.346.0
- 为 NVML 7.346 添加了新功能。有关详细信息,请参阅 NVML 文档。
- 版本 7.352.0
- 为 NVML 7.352 添加了新功能。有关详细信息,请参阅 NVML 文档。
- 版本 8.0.0
- 将代码重构为 nvidia_smi 单例类
- 添加了返回 (name, value) 字典的 DeviceQuery。
- 在 DeviceQuery 上添加过滤器参数以匹配 nvidia-smi 中的查询 api
- 在 XmlDeviceQuery 上添加了过滤器参数以匹配 nvidia-smi 中的查询 api
- 为过滤器字符串添加了整数枚举,以减少性能监控的开销。
- 添加了具有异步和回调支持的循环(过滤器)方法
- 版本 8.0.1
- 将目录重组为两个包(pynvml 和 nvidia_smi)
- 为两个包添加初始测试
- pynvml 中的一些名称约定清理
- 版本 8.0.2
- 为 pynvml 模块添加了 NVLink 函数包装器
- 版本 8.0.3
- 添加了版本控制者
- 修复了 nvmlDeviceGetNvLinkUtilizationCounter 错误
- 版本 8.0.4
- 添加了 nvmlDeviceGetTotalEnergyConsumption
- 添加了有关 NVML 权限的说明
- 修复了版本检查测试
- 版本 11.0.0
- 将 nvml.py 更新为 CUDA 11
- 将 smi.py DeviceQuery 更新为 R460
- 将 nvml.py 与最新的 nvidia-ml-py 部署对齐
- 版本 11.4.0
- 将 nvml.py 更新为 CUDA 11.4
- 更新了 smi.py NVML_BRAND_NAMES
- 将 nvml.py 与最新的 nvidia-ml-py 部署 (11.495.46) 对齐
- 版本 11.4.1
- 修复 nvml.py 中的逗号错误
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。