我在路径C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\bin\cudart64_101.dll
中有一个DLL文件,但是TensorFlow
似乎无法识别它:
2020-03-11 14:39:19.815880: W tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library 'cudart64_101.dll'; dlerror: cudart64_101.dll not found
我确保PATH变量包含DLL的路径:
>>> l = os.environ['PATH'].split(';')
>>> for s in l:
... print(s)
...
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\bin
奇怪的是,如果我在ctypes
中手动添加它,则会成功加载:
>>> import ctypes
>>> hllDll = ctypes.WinDLL("C:\\Program Files\\NVIDIA GPU Computing Toolkit\\CUDA\\v10.1\\bin\\cudart64_101.dll")
>>> import tensorflow as tf
2020-03-11 15:05:26.907300: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cudart64_101.dll
那是为什么?我该如何解决?
答案 0 :(得分:5)
在我的情况下,问题出在从 Windows应用商店 安装了python!
请参阅@smreichling对tensorflow's GitHub (issue 36111)的评论:
原来的问题是我安装的python版本是Microsoft Store的版本,而不是是python.org的版本。事实证明,从Microsoft Store安装的应用程序都经过沙箱处理。 Windows严格限制了它们可以从哪些位置加载DLL。在restrictions中:Windows不会在
PATH
env var中的目录中搜索DLL。因此,应用商店python将永远无法以这种方式找到CUDA DLL。
因此,我安装了可从https://www.python.org下载的版本。