Win10+Python3.7+Anaconda2019.03+tensorflow-gpu2.0/1.14+CUDA10.0

系统 1725 0

存在的问题       

ImportError: DLL load failed: 找不到指定的模块。

安装tensorflow-gpu很容易因为版本不兼容和缺少运行时环境(动态链接库.dll)而出问题,但是我按正确版本安装(期间更换了tensorflow和cuda、cudnn的版本)还是多次出现了“ImportError: DLL load failed: 找不到指定的模块。”这个问题。我发现网上(百度/谷歌)有很多答案,有详尽的安装过程和自己的解决方法,却仍然人没说到点子上。这个问题困扰了我一天,出错原因和解决方法放到后面讲。

报错信息如下:

            
              Python 3.7.3 (default, Apr 24 2019, 15:29:51) [MSC v.1915 64 bit (AMD64)] :: Anaconda, Inc. on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow
Traceback (most recent call last):
  File "E:\Develop\Anaconda3\envs\tf2.0\lib\site-packages\tensorflow\python\pywrap_tensorflow.py", line 58, in 
              
                
    from tensorflow.python.pywrap_tensorflow_internal import *
  File "E:\Develop\Anaconda3\envs\tf2.0\lib\site-packages\tensorflow\python\pywrap_tensorflow_internal.py", line 28, in 
                
                  
    _pywrap_tensorflow_internal = swig_import_helper()
  File "E:\Develop\Anaconda3\envs\tf2.0\lib\site-packages\tensorflow\python\pywrap_tensorflow_internal.py", line 24, in swig_import_helper
    _mod = imp.load_module('_pywrap_tensorflow_internal', fp, pathname, description)
  File "E:\Develop\Anaconda3\envs\tf2.0\lib\imp.py", line 242, in load_module
    return load_dynamic(name, filename, file)
  File "E:\Develop\Anaconda3\envs\tf2.0\lib\imp.py", line 342, in load_dynamic
    return _load(spec)
ImportError: DLL load failed: 找不到指定的模块。

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "
                  
                    ", line 1, in 
                    
                      
  File "E:\Develop\Anaconda3\envs\tf2.0\lib\site-packages\tensorflow\__init__.py", line 40, in 
                      
                        
    from tensorflow.python.tools import module_util as _module_util
  File "E:\Develop\Anaconda3\envs\tf2.0\lib\site-packages\tensorflow\python\__init__.py", line 49, in 
                        
                          
    from tensorflow.python import pywrap_tensorflow
  File "E:\Develop\Anaconda3\envs\tf2.0\lib\site-packages\tensorflow\python\pywrap_tensorflow.py", line 74, in 
                          
                            
    raise ImportError(msg)
ImportError: Traceback (most recent call last):
  File "E:\Develop\Anaconda3\envs\tf2.0\lib\site-packages\tensorflow\python\pywrap_tensorflow.py", line 58, in 
                            
                              
    from tensorflow.python.pywrap_tensorflow_internal import *
  File "E:\Develop\Anaconda3\envs\tf2.0\lib\site-packages\tensorflow\python\pywrap_tensorflow_internal.py", line 28, in 
                              
                                
    _pywrap_tensorflow_internal = swig_import_helper()
  File "E:\Develop\Anaconda3\envs\tf2.0\lib\site-packages\tensorflow\python\pywrap_tensorflow_internal.py", line 24, in swig_import_helper
    _mod = imp.load_module('_pywrap_tensorflow_internal', fp, pathname, description)
  File "E:\Develop\Anaconda3\envs\tf2.0\lib\imp.py", line 242, in load_module
    return load_dynamic(name, filename, file)
  File "E:\Develop\Anaconda3\envs\tf2.0\lib\imp.py", line 342, in load_dynamic
    return _load(spec)
ImportError: DLL load failed: 找不到指定的模块。


Failed to load the native TensorFlow runtime.

See https://www.tensorflow.org/install/errors

for some common reasons and solutions.  Include the entire stack trace
above this error message when asking for help.
                              
                            
                          
                        
                      
                    
                  
                
              
            
          

 

OSError: [WinError 126] 找不到指定的模块

除了这个问题,我还出现过的问题是 找不到cudart64_100.dll

ImportError: DLL load failed 高效解决方法 Win10+Python3.7+Anaconda2019.03+tensorflow-gpu2.0/1.14+CUDA10.0_第1张图片

这个Error就好解决了,因为dll文件的名字都告诉你了。一般是因为

1.cuda/cudnn版本和tensorflow版本不一致, 导致缺少dll

如果你安装的是cuda10.1,而"\NVIDIA GPU Computing Toolkit\CUDA\v10.1\bin"里面是cudart64_101.dll,当然会找不到cudart64_100.dll了。。。这时候你要么再装一个cuda10.0(cudnn也要换),要么更换成支持cuda10.1的tensorflow版本(目前tensorflow1.14.0可以支持,其它版本请自行确认)

ImportError: DLL load failed 高效解决方法 Win10+Python3.7+Anaconda2019.03+tensorflow-gpu2.0/1.14+CUDA10.0_第2张图片

 

 2.环境变量没有配置对。

如果你安装了cuda10.0、cudnn7.6.0,在安装目录(\NVIDIA GPU Computing Toolkit\CUDA\v10.0\bin)下面搜索是可以找到这个文件的。

ImportError: DLL load failed 高效解决方法 Win10+Python3.7+Anaconda2019.03+tensorflow-gpu2.0/1.14+CUDA10.0_第3张图片

这时候只要配置好环境变量就可以啦。(Tips:更改CUDA_PATH的路径可以自由切换cuda版本)

ImportError: DLL load failed 高效解决方法 Win10+Python3.7+Anaconda2019.03+tensorflow-gpu2.0/1.14+CUDA10.0_第4张图片

ImportError: DLL load failed 高效解决方法 Win10+Python3.7+Anaconda2019.03+tensorflow-gpu2.0/1.14+CUDA10.0_第5张图片

 

解决方法(ImportError: DLL load failed)

在windows系统上安装tensorflow-gpu,很多人遇到这个问题,网上也有很多解决方法,我看了好多篇,解决方法大概有以下几种。

1. 降版本安装tensorflow和cuda,或者换个教程全部卸载重装(如果还是较新版本的tensorflow,问题依然存在emmmm)。

       有的人是“不小心”换成了tensorflow(cpu)版,当然没有问题了,也不用cuda/cudnn了。只不过这不是我们的初衷(cpu训练神经网络实在是太慢了,不然花钱买那么贵的显卡干嘛...)

       另一种情况是 降版本之后的tensorflow-gpu不需要较新的动态链接库(.dll文件)了,系统中已有的Visual C++ 库运行时组件可以满足运行需要;或者你用的处理器较老(有网友提到)?,tensorflow不支持,Python版本较老?不适用于较新的tensorflow及其依赖库等等,这个就要仔细一点了,网上有相应的安装教程,写的很好。

2. 安装Microsoft visual studio 2015/2017

      Microsoft visual studio恰好提供了相应的tensorflow版本需要的 Visual C++ 库运行时组件 ,tensorflow得以运行成功。其实装visual studio肯定不是必须的,不然tensorflow官方说明里面就提到了,visual studio是个集成开发环境(很大,只选基础的C++开发环境都要8G),怎么可能用tensorflow-gpu还必须装它,无非是系统缺少相应的运行时组件。

ImportError: DLL load failed 高效解决方法 Win10+Python3.7+Anaconda2019.03+tensorflow-gpu2.0/1.14+CUDA10.0_第6张图片

       下面这俩组件原来是2015版本的,tensorflow-gpu1.14.0安装完成后,导入出错。我昨晚装了visual studio 2019以后被替换为2015-2019版本的了,然后以为是vs版本问题又卸载,重装了visual stdio2017,这个组件也没有变。现在tensorflow1.14.0(root环境)和tensorflow2.0(我用conda创建了个tf2.0环境)就都可以用了。你可以在控制面板里查看你的Visual C++ 依赖库版本。

卸载visual stdio 2017,再次检测tensorflow是否可以导入。

ImportError: DLL load failed 高效解决方法 Win10+Python3.7+Anaconda2019.03+tensorflow-gpu2.0/1.14+CUDA10.0_第7张图片

已卸载,Microsoft Visual C++ 2015-2019 Redistributable (x64)和(x86)组件还在。

tensorflow依然可用。

ImportError: DLL load failed 高效解决方法 Win10+Python3.7+Anaconda2019.03+tensorflow-gpu2.0/1.14+CUDA10.0_第8张图片

3. 安装Microsoft Visual C++ 2015 Redistributable (x64)

       有网友(https://cloud.tencent.com/developer/news/361221)提到自己试了很多解决方法没有效果,最后安装了一下Microsoft Visual C++ 2015 Redistributable (x86)、Microsoft Visual C++ 2015 Redistributable (x64)错误就完全消失了,可以import tensorflow了。这里就是把缺少的C++运行时组件装到Windows系统里了,至于为什么gpu版必须要用这个组件,我觉得可能是tensorflow用gpu训练神经网络要调用cuda提供的驱动及相应的系统底层函数(动态链接库.dll)。网友(@蓝三金https://blog.csdn.net/qq_20084101/article/details/89148256)在Ubuntu环境下,直接用anaconda装好tensorflow2.0 (pip install tensorflow-gpu==2.0.0-beta0)、cudnn、cudatoolkit (conda install cudnn cudatoolkit numba)、numba (用于支持 Anaconda 找到安装的 cudatoolkit 和 cudnn),一条龙服务看着真舒服,可是我在win10下卸载anaconda跟着教程重新来了一遍还是那个错误... 不得不说Windows确实很坑,等我换了电脑就用双系统装Linux......

正确的解决方法

           做好TensorFlow和cuda/cudnn的版本匹配,然后安装相应的 Visual C++ 库运行时组件 就可以了。

这是Microsoft Visual C++ Redistributable for Visual Studio 2019的下载地址 https://visualstudio.microsoft.com/zh-hans/downloads/?utm_medium=post-banner&utm_source=microsoft.com&utm_campaign=channel+banner&utm_content=launch+vs2019&rr=https%3A%2F%2Fwww.microsoft.com%2Fen-us%2Fdownload%2Fdeveloper-tools

 

这是Microsoft Visual C++ 2015 Redistributable Update 3的下载地址https://www.microsoft.com/en-us/download/details.aspx?id=53587 ImportError: DLL load failed 高效解决方法 Win10+Python3.7+Anaconda2019.03+tensorflow-gpu2.0/1.14+CUDA10.0_第9张图片

 

如果你 想知道到底缺了哪些dll

ImportError: DLL load failed 高效解决方法 Win10+Python3.7+Anaconda2019.03+tensorflow-gpu2.0/1.14+CUDA10.0_第10张图片

可以通过Visual Studio的dumpbin.exe找到依赖的DLL(把下面的路径替换为你dumpbin.exe的路径和tensorflow的安装路径),检测加载module时出现错误的“_pywrap_tensorflow_internal.pyd”所需要的dll文件。( pyd 是一种Python动态模块,相当于C语言中的dll 文件 ,只是改了后缀为 pyd

            
              "E:\Program Files(x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.21.27702\bin\Hostx64\x64\dumpbin.exe" /dependents E:\Develop\Anaconda3\Lib\site-packages\tensorflow\python\_pywrap_tensorflow_internal.pyd
            
          

 

我的结果是下面这样:

            
              Microsoft (R) COFF/PE Dumper Version 14.21.27702.2
Copyright (C) Microsoft Corporation.  All rights reserved.


Dump of file E:\Develop\Anaconda3\Lib\site-packages\tensorflow\python\_pywrap_tensorflow_internal.pyd

File Type: DLL

  Image has the following dependencies:

    cusparse64_100.dll
    cusolver64_100.dll
    cublas64_100.dll
    cudnn64_7.dll
    cufft64_100.dll
    curand64_100.dll
    cudart64_100.dll
    python37.dll
    ADVAPI32.dll
    MSVCP140.dll
    WS2_32.dll
    SHLWAPI.dll
    KERNEL32.dll
    VCRUNTIME140.dll
    api-ms-win-crt-runtime-l1-1-0.dll
    api-ms-win-crt-math-l1-1-0.dll
    api-ms-win-crt-stdio-l1-1-0.dll
    api-ms-win-crt-string-l1-1-0.dll
    api-ms-win-crt-heap-l1-1-0.dll
    api-ms-win-crt-utility-l1-1-0.dll
    api-ms-win-crt-environment-l1-1-0.dll
    api-ms-win-crt-time-l1-1-0.dll
    api-ms-win-crt-locale-l1-1-0.dll
    api-ms-win-crt-filesystem-l1-1-0.dll
    api-ms-win-crt-convert-l1-1-0.dll

  Summary

      457000 .data
        1000 .gfids
        2000 .nvFatBi
    29E66000 .nv_fatb
      289000 .pdata
     2198000 .rdata
       87000 .reloc
     63F0000 .text
        1000 .tls
       11000 _RDATA
            
          


然后搜索上述DLL,找到缺失的dll

            
              (tf2.0) C:\Users\DELL>where SHLWAPI.dll
C:\Windows\System32\shlwapi.dll

(tf2.0) C:\Users\DELL>where VCRUNTIME140.dll
E:\Develop\Anaconda3\envs\tf2.0\vcruntime140.dll
E:\Develop\Anaconda3\envs\tf2.0\Library\bin\vcruntime140.dll
E:\Develop\Anaconda3\vcruntime140.dll
E:\Develop\Anaconda3\Library\bin\vcruntime140.dll
C:\Windows\System32\vcruntime140.dll

(tf2.0) C:\Users\DELL>where cusparse64_100.dll
E:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\bin\cusparse64_100.dll

            
          

这是我故意改了文件名

            
              (tf2.0) C:\Users\DELL>where cublas64_100.dll
信息: 用提供的模式无法找到文件。
            
          

然后搜索确定DLL来自于哪里,装上对应版本的模块(可能是缺少Visual C++ 库运行时组件、cuda版本不一致)。

方法来源 https://github.com/tensorflow/tensorflow/issues/7623

 

ImportError: DLL load failed 高效解决方法 Win10+Python3.7+Anaconda2019.03+tensorflow-gpu2.0/1.14+CUDA10.0_第11张图片 ImportError: DLL load failed 高效解决方法 Win10+Python3.7+Anaconda2019.03+tensorflow-gpu2.0/1.14+CUDA10.0_第12张图片

安装成功界面

2.0.0版本

ImportError: DLL load failed 高效解决方法 Win10+Python3.7+Anaconda2019.03+tensorflow-gpu2.0/1.14+CUDA10.0_第13张图片

1.14.0版本

ImportError: DLL load failed 高效解决方法 Win10+Python3.7+Anaconda2019.03+tensorflow-gpu2.0/1.14+CUDA10.0_第14张图片

 

以上是我在安装过程中的经历和体会,如有错误请指正, 祝大家安装顺利


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论