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] 找不到指定的模块。
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
文件在哪。
where nvidia-smi
会返回当前系统的 nvidia-smi.exe的位置 (前提是当前cuda安装正常,可以使用nvidia-smi)
nvml.dll
文件和他在一起,所以只要将代码中路径指向它就行了。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
C:\Program Files\NVIDIA Corporation\NVSMI
nvml.dll
文件放在文件夹里