文章目录
写在前面
As we all know,配置深度学习环境时,CUDA、CUDnn、tensorflow、pytorch等涉及到版本匹配问题。如果不匹配,就会出现各种报错。
通常在匹配版本时有两种思路
:
- 根据
本机的CUDA和CUDnn
匹配合适版本的TensorFlow、pytorch
- 根据
要用到的TensorFlow、pytorch
匹配合适版本的CUDA和CUDnn
。
-
大多数情况下我们会按照
思路1
去进行环境配置(毕竟装CUDA和CUDnn不容易啊)。 -
但有的时候,当我们复现代码时,代码是用特定版本的TensorFlow、pytorch写的,如果我们安装的TensorFlow、pytorch版本不对,可能要涉及到大改代码。而由于某些代码API实在差太多,不同版本的TensorFlow没法做“平替”(没法改),那就只能采取
思路2
去配置环境了。
本文中,笔者就属于思路2
。介绍了笔者在跑训练的时候,由于要用tensorflow-gpu==2.6.0
,经过查询资料,需要匹配11.2
版本的CUDA
。所以介绍了CUDA和CUDnn的卸载重装方法。
正文开始
注:
- 查看
本机已安装的
CUDA版本的命令行指令:nvcc -V
- 查看本机显卡最高支持的
CUDA
版本的命令行指令:nvidia-smi
也可以直接打开nvidia控制面板
→帮助→系统信息→组件,就可以看到了:
可以看到笔者的显卡驱动是最高支持
CUDA11.5版本,所以完全可以支持CUDA11.2
BUT❗️ 笔者电脑已经安装了10.2
版本的CUDA
,因此需要把现有版本的CUDA
卸载,然后重新安装CUDA
和CUDnn
。
step1. 卸载CUDA
- 打开控制面板→程序→程序卸载
- 卸载与
CUDA10.2
版本相关的四个程序:
NVIDIA CUDA Samples 10.2
NVIDIA CUDA Runtime 10.2
NVIDIA CUDA Documentation 10.2
nvidia cuda dEVELOPMENT 10.2
参考:windows下CUDA的卸载以及安装
注:笔者只参考了本文中的卸载
部分。
step2. 安装CUDA
和CUDnn
笔者安装的是CUDA11.2.0
版本的CUDA,以及相应版本的CUDnn
(官网上Windows系统且CUDA是11.x
版本的只对应一个CUDnn,下载它就好啦)
注:安装完成后,用nvcc -V
测试是否安装好时,一定要重启命令行!一定要重启命令行!一定要重启命令行!
-
不要在“安装之前就已经打开的命令行窗口”中输入命令,否则你会遇到
nvcc不是内部操作
的迷之错误中而自我怀疑。 -
当你重新打开命令行,再次输入,就会发现,其实已经安装成功啦!
📗Debug经验+1:重启可以解决很多奇怪的问题😆。
step3. Tensorflow-gpu安装
这个帖子中可以找到对应版本的TensorFlow:2021最新:TensorFlow各个GPU版本CUDA和cuDNN对应版本整理(最简洁)
由于笔者已经确定要用tensorflow-gpu==2.6.0
,因此在对应的虚拟环境中安装:
pip install tensorflow-gpu==2.6.0 --default-timeout=100 -i https://pypi.tuna.tsinghua.edu.cn/simple
通过更换清华源,可以更快地下载,避免报错。
安装完成后,检查是否安装成功(即:检查TensorFlow是否可以用gpu了)
python
import tensorflow as tf
tf.config.list_physical_devices('GPU')
📗Debug经验:不要同时安装tensorflow(CPU版本)和tensorflow-gpu(GPU版本),否则,会出现各种错误。
安装完成,GPU可以用了,cmd中执行正常,but pycharm❓
(1)报错分析
💢pycharm,你怎么回事?
运行代码时,报错Could not load dynamic library ‘...dll‘
,一连报一大串,属实难受哇,这个报错让笔者困扰了好久。你如果去搜索,几乎会看到的大部分解决思路无外乎两种:
- 错误思路一:缺啥补啥
绝大部分帖子都在用缺啥补啥
的思路告诉你怎么去下载丢失的包。
📝笔者的解答:
如果你属于:无法使用gpu,即
CUDA
和CUDnn
没有安装成功,那应该参考笔者前面提到的步骤,去好好下载并安装CUDA和CUDnn!(😢I know the installation process will be difficult!)
注意:在CUDnn的安装步骤中,涉及到替换CUDA的bin目录,而我们需要的各种dll
文件就是在这一步被安装的。
但是!如果你的CUDA
和CUDnn
已经安装好了,也分两种情况:
-
CUDA版本不匹配导致的报错:你安装的是
CUDA10.X
,而报错缺失的动态包是关于CUDA11.x
的,意思是:你安装的是CUDA10.x版本,而该代码要求的环境是CUDA11.X。那么你就应该卸载重装CUDA和CUDnn(可以参考上方写出的step1~3)。单纯靠
缺啥补啥
逃避卸载是没用的😢,伙计!因为笔者是过来人,尝试过这种蠢办法。 -
如果CUDA版本没有问题,是完全不用去补
.ddl
文件的。你可以去安装好的
CUDA
的bin
目录,看看是否这些包都已经存在。如果存在,说明你没错。如果你用
cmd
在命令行中可以正确使用gpu,那就说明你的操作没问题。这是pycharm自身的锅:它没有能够链接到CUDA
的bin
路径下
-
错误思路二:掩耳盗铃🙈
一些帖子教你如何通过设置指令,从而忽略警告。
📝笔者的解答:
笔者看来,这个警告等同于报错,因为它会影响程序能否正常执行)。所以不要尝试去忽略警告,这么做治标不治本,依旧会存在各种错误。
良好的正确的环境是成功之基!配置环境这部分重视起来了,代码就成功一半了!千万要好好配置!否则,你会遇到特别特别多奇怪的bug。
(2)报错解决
📝翻阅大量资料,读到Anaconda虚拟环境下的PyCharm使用Tensorflow调用GPU出现dll文件缺失的问题和解决办法时,笔者看到了希望👍!这篇文章准确地说 (ma)出了笔者的心声,也为笔者指出了最终解除报错的方法。最终参考的也正是文中作者所参考的帖子:PyCharm DLL load failed的原因和对治方法。
例如:笔者根据自己电脑的情况,打开
anaconda prompt
→输入start+pycharm.exe所在路径:start C:\"Program Files"\"NVIDIA GPU Computing Toolkit"\CUDA\v11.2\bin\pycharm64.exe
。再次打开就不会出现这个报错了。
晚安~