一杯茶一包烟,一个环境配一天
某天上网冲浪的时候,看到一种说法 TensorFlow1.14 对新版本的兼容性会更好,于是在大作业之前手贱升级了一下,结果发现再也不能调用 GPU 运算了,接着就有了这篇踩坑记录。 原环境:
- Win10 1909
- Anaconda 3
- Python 3.6.8
- TensorFlow 1.12
- CUDA 10.1
本文涉及到 TensorFlow 的指定版本升级、CUDA 的卸载重装与 cuDNN 的重装。
TensorFlow
首先升级 TensorFlow,启动 Anaconda,激活相应环境,启动命令行,使用pip install tensorflow==1.14.0
或pip install tensorflow-gpu==1.14.0
命令安装指定版本 TensorFlow。
最早配置的服务器是清华源,而当天不知道什么原因下载非常不稳定,于是尝试换成中科大源,但是仍然下载失败。
pip install --channel https://mirrors.ustc.edu.cn/anaconda/pkgs/main/ tensorflow-gpu==1.14.0
神秘的是,吃了晚饭回来网络就恢复正常了。
下载之后出现提示,“Could not install packages due to an EnvironmentError: [WinError 5] 拒绝访问”,谷歌后解决方案如下。
解决方法: C:\Users\xxx> 中的 xxx 不是管理员,或者说就是权限不够;在 conda 在的路径里,……\Anaconda3 右击属性->安全->user 选中现在的用户,修改权限至所有权限;重新打开命令行,即可。
安装完之后记得使用conda info
命令检查一下版本,同时升级的时候需要注意 CPU 和 GPU 版本之间的顺序。之前有次安装失败没注意看终端,结果装完了 CUDA 发现 TensorFlow 版本还没跟上。
如果使用 CPU 版本的话应该就到此顺利结束了,但是为了使用 GPU 加速,任务还没完。加载环境后可以使用如下代码测试是否能调用 GPU,这一次很可惜不能。
from tensorflow.python.client import device_lib
print(device_lib.list_local_devices())
CUDA
根据 TensorFlow 官方给出的“经过测试的构建配置”,可以看到 TensorFlow1.14 对应的推荐 CUDA 版本是 10.0,和当前版本不符,显然为了稳定运行还需要降级 CUDA。
首先是 CUDA 卸载,参考下面这篇博客,在控制面板中卸载含有相关关键词的程序。
CUDA 的卸载:控制面板-卸载程序(不要用 360 等杀毒软件,找不到对应程序的),按照安装时间排序,最上面这几个带版本号的,就是刚才安装的 CUDA 了,挨个卸载即可
来自:https://blog.csdn.net/XunCiy/article/details/89070315
然后是安装包的重新下载,在英伟达官网的 归档 里能找到历史版本的 CUDA。这里推荐使用离线版而不是在线版,借助 IDM 等下载工具能有效提高效率。
cuDNN
下一步是 cuDNN,在 官网 下载,对照上文,下载指定版本后解压、覆盖、检查环境变量,参考教程如下。
下载完,解压 cudnn, 会出现四个文件,如下:[图片、] 在 cuda 安装完后,系统自动在 C 盘的 Program Files 文件中创建了 NVIDIA GPUComputing Toolkit 文件夹,你可以找到如下路径:[图片、] 你可以发现在这个 v9.0 目录下也有类似 cudnn 中的文件夹。将 cudnn 的 bin,include,lib 中的内容 拷贝到 v9.0 的 bin,include,lib 对应目录下,提示替换的话点击 OK。完成,最好重启一下电脑。OK。
来自:https://blog.csdn.net/c20081052/article/details/86683446
这时候运行之前的代码,发现已经可以检测到 GPU,但是跑之前的网络仍然报错,提示版本不匹配。
Loaded runtime CuDNN library: 7.3.1 but source was compiled with: 7.4.1.
查资料后发现,很多博客都建议回退旧版本,这当然不能接受。最终找到了下面这一篇,看来这是使用 Anaconda 造成的问题,主环境中的 cuDNN 版本修改并没有顾及到虚拟环境,于是按照指南顺利解决。
也许你和我一样使用的是 Anaconda,那么,请打开你的 Anaconda 安装路径(比如:我的路径是 F:\Anaconda\anaconda\pkgs),你会发现这有个、[图片、] 好的,我们找到了这个玩意,也许 Anaconda 直接是使用这里的 CUDNN,而不是在 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0 这个地方的 CUDNN(这只是猜测)。为此,我们尝试一下直接更新这个 pkgs,在这个网站下载 (https://anaconda.org/anaconda/cudnn/files?sort=basename&sort_order=desc) 选择合适版本的 CUDNN(一定要注意是合适的版本),然后把刚下载的文件解压得到:[图片、] 将里面 Library 的东西复制覆盖到 F:\Anaconda\anaconda\pkgs\ cudnn-7.1.4-cuda9.0_0\Library 的东西(也许你的 Anaconda 路径不同,需要自己找一下)路径,再试一下。
来自:https://blog.csdn.net/Tilamy/article/details/88616201
至此,终于全部完成,新环境:
- Win10 1909
- Anaconda 3
- Python 3.6.8
- TensorFlow 1.14
- CUDA 10.0