阅读 215

解决 pynvml 报错 NVML Shared Library Not Found / WinError 126

pynvml包直接在Windows系统上安装可能会报出模块找不到的错误,本文记录解决方法。

问题复现

在Windows中调用 pynvml.nvmlInit()时出错:

错误信息:

  File "E:\Program_Files\Annoconda\lib\site-packages\pynvml\nvml.py", line 731, in _load_nvml_library
     nvml_lib = CDLL(os.path.join(os.getenv("ProgramFiles", "C:/Program Files"), "NVIDIA Corporation/NVSMI/nvml.dll"))
   File "E:\Program_Files\Annoconda\lib\ctypes__init__.py", line 356, in __init__
     self._handle = _dlopen(self._name, mode)
 OSError: [WinError 126] 找不到指定的模块。复制代码

问题分析

  • 在源代码文件 numl.py 中 731 行附近:

 if (sys.platform[:3] == "win"):
     # cdecl calling convention
     # load nvml.dll from %ProgramFiles%/NVIDIA Corporation/NVSMI/nvml.dll
     nvml_lib = CDLL(os.path.join(os.getenv("ProgramFiles", "C:/Program Files"), "NVIDIA Corporation/NVSMI/nvml.dll"))
 else:
     # assume linux
     nvml_lib = CDLL("libnvidia-ml.so.1")复制代码

可以看到模块在尝试寻找 C:/Program Files/NVIDIA Corporation/NVSMI/nvml.dll 文件,如果你的nvml.dll文件不在这就会报错。

解决方案

知道问题的原因,排除故障有两种方案,但都需要知道当前的nvml.dll文件在哪。

确定 nvidia-smi.exe 位置
  • 打开cmd,输入命令:

 where nvidia-smi复制代码

会返回当前系统的 nvidia-smi.exe的位置 (前提是当前cuda安装正常,可以使用nvidia-smi)

  • 去相应位置查看,发现nvml.dll文件和他在一起,所以只要将代码中路径指向它就行了。

方案1: 修改源码:

  • 修改numl.py 中第 731 行代码:

 nvml_lib = CDLL(os.path.join(os.getenv("ProgramFiles", "C:/Program Files"), "NVIDIA Corporation/NVSMI/nvml.dll"))复制代码

改为你自己的路径:

 nvml_lib = CDLL(r"C:\Windows\System32\nvml.dll")复制代码

注意反斜杠路径需要在前面加 r

方案2: 为源码创建运行环境

  • 源码不会出错,错的是我们自己的环境,改过来就是了。

  • 创建文件夹C:\Program Files\NVIDIA Corporation\NVSMI

  • nvml.dll文件放在文件夹里

运行示例


作者:为为为什么
链接:https://juejin.cn/post/7028152575861981215

文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐