跳转到主要内容

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公司名称或其贡献者的名称来认可或推广由此软件衍生出的产品。

本软件由版权所有者和贡献者“按原样”提供,并不承担任何明示或暗示的保证,包括但不限于适销性和针对特定目的的适用性保证。在任何情况下,版权所有者或贡献者不对任何直接、间接、偶然、特殊、示范性或后果性损害(包括但不限于替代商品或服务的采购;使用、数据或利润的损失;或业务中断)承担责任,无论该损害是由何种原因引起的,以及根据何种责任理论(包括合同、严格责任或侵权,包括疏忽或不计)产生,即使已被告知此类损害的可能性。

项目详情


下载文件

下载适用于您的平台的文件。如果您不确定选择哪一个,请了解更多关于安装包的信息。

源代码分发

nvidia-ml-py-12.560.30.tar.gz (39.2 kB 查看散列值)

上传时间 源代码

构建分发

nvidia_ml_py-12.560.30-py3-none-any.whl (40.5 kB 查看散列值)

上传时间 Python 3

由以下赞助

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面