python 使用 pynvml 工具获取GPU工作状态

深度学习过程中经常需要和GPU打交道,需要在训练之前确定GPU工作状态。本文介绍python中的pynvml包的使用方法,用来获取上述信息。

安装

直接通过pip安装:

pip install nvidia-ml-py

或者根据所使用的python版本安装对应包:

pip install nvidia-ml-py2  # python2
pip install nvidia-ml-py3  # python3

使用方法

# 导入包
import pynvml 
# 每MB包含的字节数
NUM_EXPAND = 1024 * 1024
# 初始化
pynvml.nvmlInit()
#GPU驱动信息
pynvml.nvmlSystemGetDriverVersion()
-> b'441.22'
#获取Nvidia GPU块数
pynvml.nvmlDeviceGetCount()
-> 1
#获取GPU 0 的handle
handle = pynvml.nvmlDeviceGetHandleByIndex(0)
# 设备名称
pynvml.nvmlDeviceGetName(handle)
-> b'GeForce GTX 1660'
#通过handle获取GPU 0 的信息
info = pynvml.nvmlDeviceGetMemoryInfo(handle)
#GPU 0 的总显存
info.total 
-> 6442450944
info.total / NUM_EXPAND
-> 6144.0
#GPU 0 使用的显存
info.used
-> 383299584
info.used / NUM_EXPAND
-> 365.54296875
#关闭 pynvml
pynvml.nvmlShutdown() 

踩坑

  • 报错 : pynvml.NVMLError_LibraryNotFound: NVML Shared Library Not Found

坑已填:解决 pynvml 报错 NVML Shared Library Not Found / WinError 126

参考资料

  • http://www.ngui.cc/51cto/show-33630.html
### PyCharm 中实时监控 GPU 使用量的方法 要在 PyCharm 中实现实时监控 GPU使用情况,可以借助 Python 库 `nvidia-ml-py3` 来获取 NVIDIA GPU 的状态数据,并将其集成到项目中以便于观察。以下是具体方法: #### 安装依赖库 首先需要安装 `nvidia-ml-py3` 库来访问 NVML 功能并查询 GPU 状态。可以通过 pip 命令完成安装: ```bash pip install nvidia-ml-py3 ``` 此库提供了对 NVIDIA Management Library (NVML) API 的封装,允许开发者通过 Python 查询 GPU 温度、内存占用率以及计算利用率等指标[^1]。 #### 编写监控脚本 编写一段简单的 Python 脚本来定期读取 GPU 数据并在终端显示出来。下面是一段示例代码: ```python import pynvml import time def initialize_nvml(): """初始化 NVML""" try: pynvml.nvmlInit() except Exception as e: print(f"无法初始化 NVML: {e}") exit(1) def get_gpu_info(index=0): """获取指定索引号的 GPU 信息,默认第一个 GPU""" handle = pynvml.nvmlDeviceGetHandleByIndex(index) # 获取显卡名称 name = pynvml.nvmlDeviceGetName(handle).decode('utf-8') # 获取显存使用情况 meminfo = pynvml.nvmlDeviceGetMemoryInfo(handle) memory_used = meminfo.used / 1024 ** 2 # 单位 MB # 获取当前温度 temperature = pynvml.nvmlDeviceGetTemperature(handle, pynvml.NVML_TEMPERATURE_GPU) return { 'name': name, 'memory_used': f"{memory_used:.2f}MB", 'temperature': f"{temperature}°C" } if __name__ == "__main__": initialize_nvml() while True: info = get_gpu_info() # 默认监控第 0 号 GPU print(f"\rGPU Name: {info['name']} | Memory Used: {info['memory_used']} | Temperature: {info['temperature']}", end="") time.sleep(1) # 每隔一秒刷新一次 ``` 上述代码会持续打印目标 GPU 的基本信息至控制台窗口,包括设备名、已使用的显存量和核心温度。 #### 配置环境变量(可选) 如果是在多 GPU 平台上工作,则可能还需要调整可见的 GPU 设备列表以减少干扰或分配资源给不同进程独占使用。这可通过修改操作系统级别的环境变量 `CUDA_VISIBLE_DEVICES` 实现[^2]。例如,在启动脚本前加入如下命令限定仅能看到第二张卡(假设其逻辑序列为1): ```bash export CUDA_VISIBLE_DEVICES=1 ``` 这样做的好处是可以让后续加载的所有基于 CUDA 的操作都局限于所选定的一组物理 GPUs 上面执行而不会影响其他未被提及的部分。 #### 将监控嵌入 PyCharm 工作流 为了更方便地查看这些动态变化的数据,可以直接把上面提到的小工具作为独立模块引入自己的主要应用程序里头去;或者干脆另开一个专门负责展示统计数值的新线程/子进程来做这件事儿——总之就是想办法让它跑起来的同时不影响主线业务流程正常运转即可。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值