Skip to main content

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 中的逗号错误

项目详情


下载文件

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

源分布

pynvml-11.4.1.tar.gz (64.3 kB 查看哈希

已上传 source

内置分布

pynvml-11.4.1-py3-none-any.whl (47.0 kB 查看哈希

已上传 py3