NVIDIA管理库的Python绑定
项目描述
pyNVML
到NVIDIA管理库的Python绑定
提供了一个Python接口,用于GPU管理和监控功能。
这是一个NVML库的包装器。有关NVML库的信息,请参阅NVML开发者页面 http://developer.nvidia.com/nvidia-management-library-nvml
从以下位置下载最新包: http://pypi.python.org/pypi/nvidia-ml-py/
请注意,此文件可以使用 'python -m doctest -v README.txt' 运行,尽管结果依赖于系统
nvml头文件包含与该包装器相关的函数文档。头文件与以下内容一起分发。 https://developer.nvidia.com/gpu-deployment-kit
主要区别在于这个库在返回所需值之前,会处理分配结构和传递函数指针。非成功返回码如下面所述,将被提升为异常。
需求
Python 2.5 或更早版本,并包含 ctypes 模块。
安装
使用 python3 进行 Pip 安装
python3 -m pip install nvidia-ml-py
手动安装
$ tar -xzf nvidia-ml-py-$major-$minor-$patch.tar.gz`
$ cd nvidia-ml-py-$major-$minor-$patch
$ sudo python setup.py install
用法
>>> from pynvml import *
>>> nvmlInit()
>>> print(f"Driver Version: {nvmlSystemGetDriverVersion()}")
Driver Version: 11.515.48
>>> deviceCount = nvmlDeviceGetCount()
>>> for i in range(deviceCount):
... handle = nvmlDeviceGetHandleByIndex(i)
... print(f"Device {i} : {nvmlDeviceGetName(handle)}")
...
Device 0 : Tesla K40c
>>> nvmlShutdown()
函数
Python 方法封装了在 C 共享库中实现的 NVML 函数。每个函数的使用与以下异常相同
- 而不是返回错误码,失败的错误码将以 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 类。
// C Function and typedef struct
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;
# Python call to function and accessing members of ctype struct
>>> info = nvmlDeviceGetMemoryInfo(handle)
>>> print(f"Total memory: {info.total}")
Total memory: 5636292608
>>> print(f"Free memory:, {info.free}")
Free memory: 5578420224
>>> print(f"Used memory: {info.used}")
Used memory: 57872384
- Python 负责字符串缓冲区的创建。
// C Function that needs character array and length
nvmlReturn_t nvmlSystemGetDriverVersion(char* version,
unsigned int length);
# Python function handles memory
>>> version = nvmlSystemGetDriverVersion()
>>> print(version)
... 11.520.75
>>> nvmlShutdown()
有关用法信息,请参阅 NVML 文档。
变量
所有有意义的 NVML 常量和枚举都在 Python 中公开。
NVML_VALUE_NOT_AVAILABLE 常量未使用。相反,None 将映射到字段。
异常
由于 C 库使用返回码,而 Python 更喜欢异常处理,因此库将所有返回码转换为各种异常。这些异常在运行时通过函数自动生成,而不是手动定义。
异常的列表可以在 NVMLError 基类中找到。
如上所述的函数部分的示例
>>> try:
... nvmlDeviceGetCount()
... except NVMLError as error:
... print(error)
...
Uninitialized
可以更准确地捕获如下
>>> try:
... nvmlDeviceGetCount()
... except NVMLError_Uninitialized as error:
... print(error)
...
Uninitialized
对于所有异常,名称到异常的转换如下
NVML_ERROR_UNINITIALIZED
=>NVMLError_Uninitialized
NVML_ERROR_LIBRARY_NOT_FOUND
=>NVMLError_LibraryNotFound
NVML_ERROR_ALREADY_INITIALIZED
=>NVMLError_AlreadyInitialized
发布说明
版本 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 文档。
版本 10.418
- 为 NVML 10.418 添加了新功能。有关更多信息,请参阅 NVML 文档。
- 修复了与 Python 3.x 一起使用绑定的问题
- 用 example.py 替换了示例应用程序 nvidia_smi.py
版本 11.515.48
- 添加了对 Python3 的支持
- 更新了 API,以添加 NVML 的新功能,使 pynvml 与 NVML 保持一致
- 添加了自动版本,自动处理结构和函数的 byte 和字符串转换
- 修复了少量错误
- 在 pypi.org 的 long_description 中正确添加了 README.txt
版本 11.520
- 更新了 Long Description 以成为实际的 markdown
- 为 NVML 11.520 添加了新功能
版本 11.525
- 为 NVML 11.525 添加了新功能
版权
版权(c)2011-2023,NVIDIA Corporation。保留所有权利。
许可证
在满足以下条件的情况下,允许以源代码和二进制形式重新分发和使用,无论是否修改
-
源代码重新分发必须保留上述版权声明、本许可列表和以下免责声明。
-
二进制形式的再分发必须复制上述版权声明、本条件列表和以下免责声明在随分发提供的文档和其他材料中。
-
未经具体事先书面的许可,不得使用NVIDIA公司名称或其贡献者的名称来认可或推广由此软件衍生出的产品。
本软件由版权所有者和贡献者“按原样”提供,并不承担任何明示或暗示的保证,包括但不限于适销性和针对特定目的的适用性保证。在任何情况下,版权所有者或贡献者不对任何直接、间接、偶然、特殊、示范性或后果性损害(包括但不限于替代商品或服务的采购;使用、数据或利润的损失;或业务中断)承担责任,无论该损害是由何种原因引起的,以及根据何种责任理论(包括合同、严格责任或侵权,包括疏忽或不计)产生,即使已被告知此类损害的可能性。
项目详情
下载文件
下载适用于您的平台的文件。如果您不确定选择哪一个,请了解更多关于安装包的信息。