赞
踩
首先说一下我的电脑环境:
windows10,python3.7.4。
以管理员身份打开anaconda prompt,
- conda install protobuf
-
- pip install tensorflow-gpu==2.0.0
安装好tensorflow-gpu 2.0之后,我依次输入 python,import tensorflow as tf,看到下图的报错
不过不用慌,我要从它的报错反推出它对应的CUDA和cuDNN的版本,从cudart64_100.dll我们可以推测出所需CUDA和cuDNN的版本分别是10.0和7.6.4。于是我们去这里(CUDA、cuDNN)下载这两个对应版本的安装包,我这里都是去archive里下载的,因为下载首页的版本都偏高。
网上也有人通过安装conda install cupy的方式间接地安装CUDA和cuDNN,请见这里。
下载好这两个文件后,先安装CUDA,双击进入安装向导界面,因为我电脑买来时已经安装好Driver components了,所以我就吧下图红框的3个包都取消勾选了。安装好CUDA之后,你去环境变量里看,会发现对了一些CUDA相关的路径。
接下来安装cuDNN,这个没有向导界面,它的安装也是比较独特的:解压后把cuDNN中bin,include,lib文件夹下的3个文件(不是文件夹)对应地复制到C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1中的同名文件夹下面即可。
设置好环境变量就算是大功告成了。关闭anaconda prompt,再重启anaconda prompt,依次输入python,import tensorflow as tf,我们从下图可以看到,这次已经没有任何报错了!开始使用tensoflow2吧!
补充,网上有人说配置TensorFlow—GPU版本,根本不用安装什么cuda+cudnn啥的,直接在anaconda里面搜索TensorFlow_gpu(keras_gpu)并下载安装即可,它自动创建cuda+cudnn环境。各位读者还没装的可以试一下。
后来在运行object detection tutorial.ipynb时遇到了报错,这个github issue里说到加一些代码后TF2.1就能成功运行了,于是我决定把TF升级到2.1试试。(以下报错仅针对tensorflow2.1,2.0的用户可以漠视)
pip uninstall tensorflow-gpu(不用加版本后缀)
pip install tensorflow-gpu==2.1.0
眼看它提示我安装成功了,没想到后面还是发生了我不想要的报错
后来百度了一些“Failed to load the native TensorFlow runtime.”怎么办,有人说用
pip install --upgrade --ignore-installed tensorflow
这下安装过程看起来正常多了,我看到这次它下载了protobuf这个很重要的库,还有其他一些库,看来刚刚那种安装方法会少装很多依赖库啊,难怪会出错。
不过上图的红字提醒我少装了4个库,那我再单独装一下呗。不同包用空格隔开,这样就可以同时安装4个包
pip install pyqt5==5.12 pyqtwebengine==5.12 typed-ast==1.4.0 six==1.12
好了,再import tensorflow as tf 看看,md,还是跟原来的一样的报错:
- python -c "import tensorflow as tf; print(tf.version)"
- Traceback (most recent call last):
- File "C:\venv113\lib\site-packages\tensorflow\python\pywrap_tensorflow.py", line 58, in
- from tensorflow.python.pywrap_tensorflow_internal import *
- File "C:\venv113\lib\site-packages\tensorflow\python\pywrap_tensorflow_internal.py", line 28, in
- _pywrap_tensorflow_internal = swig_import_helper()
- File "C:\venv113\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 "C:\venv113\lib\imp.py", line 243, in load_module
- return load_dynamic(name, filename, file)
- File "C:\venv113\lib\imp.py", line 343, 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 "C:\venv113\lib\site-packages\tensorflow_init_.py", line 24, in
- from tensorflow.python import pywrap_tensorflow # pylint: disable=unused-import
- File "C:\venv113\lib\site-packages\tensorflow\python_init_.py", line 49, in
- from tensorflow.python import pywrap_tensorflow
- File "C:\venv113\lib\site-packages\tensorflow\python\pywrap_tensorflow.py", line 74, in
- raise ImportError(msg)
- ImportError: Traceback (most recent call last):
- File "C:\venv113\lib\site-packages\tensorflow\python\pywrap_tensorflow.py", line 58, in
- from tensorflow.python.pywrap_tensorflow_internal import *
- File "C:\venv113\lib\site-packages\tensorflow\python\pywrap_tensorflow_internal.py", line 28, in
- _pywrap_tensorflow_internal = swig_import_helper()
- File "C:\venv113\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 "C:\venv113\lib\imp.py", line 242, in load_module
- return load_dynamic(name, filename, file)
- File "C:\venv113\lib\imp.py", line 342, in load_dynamic
- return _load(spec)
- ImportError: DLL load failed: 找不到指定的模块.
-
- Failed to load the native TensorFlow runtime.
好了,我知道我又要开始那熟悉又漫长的debug之路了。
话说我把tensorflow版本从2.0更新到2.1,cuda和cudnn是不是也要跟上去,貌似是的,反正我更新成10.1和10.1对应的cudnn7.6.4了(注意,10.1对应的cudnn也叫7.6.4,但在archive 下载页,两者是分开下载的)
我以为更新好cuda和cudnn版本,报错就没有了,import 一下,md,还是有。
接着我试着去报错里提供的tensorflow错误收集官网https://www.tensorflow.org/install/errors查看错误记录里有没有跟我一样的,翻到最后看到github issue 22512 和22794跟我的问题相关。
点进去22512看了一圈,没结果,又点进去22794,滚到差不多最下面(因为新的回答在下面,我这个tensorflow2.1是新出的,有相关回答的话应该出现在最下面),终于看到跟我的情况差不多的回答,都是在装好tensorflow2.1后import tensorflow时遇到的。
原来答案就藏在tensorflow2.1 的 release note 里啊!看来我得吸取教训:以后再安装新版tensorflow时,一定要先去看看它的release note!
这样看来,我是少装了Microsoft Visual C++ Redistributable for Visual Studio 2019,于是我就去他们的官方下载网页下载了vc_redist.x64.exe。
下载好后安装:
安装好后它说要重启才生效
重启后再import tensorflow as tf真的没问题了~
安装好后我们可以在命令行里直接输入
- nvidia-smi
- nvcc --version
来查看GPU的更多信息,比如占用GPU资源的进程有哪些。
因为我装的是GPU版,所以后面会经常需要往脚本里写入下面的代码:
- # tensorflow 1版加下面的代码
- conf = tf.ConfigProto()
- conf.gpu_options.per_process_gpu_memory_fraction = 0.6
- conf.gpu_options.allow_growth = True
- session = tf.Session(config=conf)
-
- # tensorflow2版加下面代码
- gpus = tf.config.experimental.list_physical_devices('GPU')
- if gpus:
- try:
- for gpu in gpus:
- tf.config.experimental.set_memory_growth(gpu, True)
- tf.config.experimental.set_virtual_device_configuration(gpus[0], [
- tf.config.experimental.VirtualDeviceConfiguration(memory_limit=1024 * 4)])
- except RuntimeError as e:
- print(e)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。