一. 前言
这篇就是总结一下Anaconda里也就是jupyter notebook中如何安装使用tensorflow的GPU版本,踩了好多好多坑,各种各样的错误,写这篇文章也是为了记录一下步骤和各种错误,以防自己忘了还要在踩坑。(这里我就默认已经装好了Anaconda和jupyter notebook了)
二. 所有步骤
1)通过Anaconda建造一个虚拟环境,保证不会影响到全局,一切都在虚拟环境中进行
2)下载匹配的cuda与cudnn(根据自己的显卡算力与驱动版本选择,后面会说)
3)下载tensorflow-gpu(版本要匹配上面的cuda与cudnn)
4)下载vc_redist
5)验证tensorflow-gpu是否能正常使用
6)将整备好的虚拟环境导入jupyter notebook
三. 具体步骤
1. 创建虚拟环境
1.1 打开Anaconda Prompt
1.2 利用Anaconda Prompt 创建一个虚拟环境
创建的代码如下,代码的意思就是创建一个名为tensorflow的文件夹也就是虚拟空间,此虚拟空间的python版本是3.7,一个“=”代表3.7随机一个版本,俩个“==”代表就固定一个版本,这里选择3.7的原因是我安装的tensorflow-gpu版本需要python在3.6-3.8之间
conda create -n tensorflow python=3.7
安装过程中会出现让你选择Y/N,输入Y回车就可以,其实就是问你是否安装一些扩展包,比如wheel或者pip等等,都是需要的
出现下面的界面就是安装成功了,会有提示你激活虚拟空间的代码
1.3 激活虚拟空间
建立好虚拟空间之后输入下面代码激活虚拟空间,进入虚拟空间,前面的(base)变成虚拟空间的名字即为成功进入了
conda activate tensorflow
2. cuda、cudnn、tensorflow-gpu 版本的选择与下载
2.1 cuda版本选择
cuda的版本一定要根据你自己的显卡型号来决定
先右键桌面点击英伟达控制面板
点击左下角系统信息
查看你的驱动程序版本(要记住了,一会就根据这个来选择cuda的版本)
看一下自己的驱动版本符合哪些cuda版本,你可以使用所有低于你驱动程序版本的cudatoolkit,
注意:比你驱动程序版本高的cudatoolkit绝对不能使用
2.2 cuda、cudnn、tensorflow-gpu 版本对应关系
你可以去tensorflow的官网去查看他们的对应关系,能很明显的看出不同版本的tensorflow-gpu需要的cuDNN和CUDA以及python的版本
https://tensorflow.google.cn/install/source_windows?hl=zh-cn
2.3 个人安装的版本和步骤代码
我自己安装的tensorflow-gpu-2.2.0版本,对应的是CUDNN--7.6.5和CUDA--10.1版本
下载cuda代码如下:(使用的都是清华的镜像)
conda install cudatoolkit=10.1 -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/win-64/
安装完毕如下
下载cudnn代码如下:
conda install cudnn=7 -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/win-64/
安装完毕如下
下载tensorflow-gpu代码如下:(注意这里用的是pip)
pip install tensorflow-gpu==2.2.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
安装成功如下
3. 下载vc_redist
官方提供的vc_redist下载地址如下:
https://learn.microsoft.com/zh-cn/cpp/windows/latest-supported-vc-redist?view=msvc-170
选择X64进行下载,下载成功之后进行安装就行了,一直点击下一步就可以了,很简单(别忘了重启)
4. 验证tensorflow-GPU是否能正常使用
4.1 判断是否导入成功
在虚拟环境中打开python,然后导入tensorflow工具包,如果显示successfully即为成功
红线的部分都是需要输入的部分
python
import tensorflow as tf
可能出现的错误(1):
当时遇到的第一种错误 protobuff 错误(版本过高,需要降低版本)
TypeError: Descriptors cannot not be created directly.
If this call came from a _pb2.py file, your generated code is out of date and must be regenerated with protoc >= 3.19.0.
If you cannot immediately regenerate your protos, some other possible workarounds are:
1. Downgrade the protobuf package to 3.20.x or lower.
2. Set PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python (but this will use pure-Python parsing and will be much slower).
解决办法:卸载原来的protobuff,然后再重新下载一个低版本的protobuff就可以了
pip uninstall protobuf
pip install protobuf==3.19.0
可能出现的错误(2) :
当时遇到的第二种错误,是解决了第一种错误之后出现的,缺少 cudart64_101.dll 文件
解决方法:去重新下载一个cudart64_101.dll 文件,将其直接复制到 C:\Windows\System32 路径下,重新导入tensorflow就会发现错误消失变成successfully了
下载地址:cudart64_101.dll 免费下载 | DLL‑files.com
进入下载地址向下翻就能看到下载了,点击下载之后会弹出一个广告×了就行,然后等待5秒钟会自动在浏览器下载
4.2 判断GPU是否可以使用
首先,还是一样在虚拟环境中打开python,然后导入tensorflow,打印下面这条语句,下面这条语句是判断GPU是否能使用,如果能使用返回的就是True,反之返回False
注意:这里用的tf是在导入tensorflow时候as命名的缩写
print(tf.test.is_gpu_available())
可以看到最后返回的True,代表能正常使用
可能出现的错误:
当时遇到了缺少各种.dll扩展,‘cublas64_10.dll’,‘cufft64_10.dll’,‘curand64_10.dll’,
‘cusparse64_10.dll’,‘cudnn64_7.dll’,错误整体信息如下
2020-06-15 20:30:54.310396: W tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library ‘cublas64_10.dll’; dlerror: cublas64_10.dll not found
2020-06-15 20:30:54.311457: W tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library ‘cufft64_10.dll’; dlerror: cufft64_10.dll not found
2020-06-15 20:30:54.312777: W tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library ‘curand64_10.dll’; dlerror: curand64_10.dll not found
2020-06-15 20:30:54.314450: W tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library ‘cusolver64_10.dll’; dlerror: cusolver64_10.dll not found
2020-06-15 20:30:54.315749: W tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library ‘cusparse64_10.dll’; dlerror: cusparse64_10.dll not found
2020-06-15 20:30:54.316863: W tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library ‘cudnn64_7.dll’; dlerror: cudnn64_7.dll not found
2020-06-15 20:30:54.317064: W tensorflow/core/common_runtime/gpu/gpu_device.cc:1592] Cannot dlopen some GPU libraries. Please make sure the missing libraries mentioned above are installed properly if you would like to use GPU. Follow the guide at https://www.tensorflow.org/install/gpu for how to download and setup the required libraries for your platform.
Skipping registering GPU devices…
解决方法:还是把这些包重新下载下来,然后放进 C:\Windows\System 路径下,注意和上一次错误存放.dll文件的路径是不一样的,链接我放下面了,需要的自行下载
链接:https://pan.baidu.com/s/1oy3_LbpuJ0JiUYk59Qjv9g?pwd=6666
提取码:6666
然后你就能看到都开始显示successfully打开了,为True
5. 在juptyter notebook中进行使用
5.1 jupyter notebook中添加Anaconda中的虚拟环境
首先,还是在Anaconda Prompt中打开虚拟环境,忘了怎么进入虚拟环境的翻看上面1.3,进入虚拟环境之后输入下面代码,等待安装完成就行
pip install ipykernel ipython -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
继续输入下面代码,大概意思就是将内核装填进tensorflow这个虚拟环境中
ipython kernel install --user --name tensorflow
当出现一个C盘路径的时候就是添加成功了
5.2 配置Anaconda的环境变量(如果你已经配置过,跳过这条即可)
鼠标右键 我的电脑 =》属性 =》在右边鼠标往下滑选择 高级系统设置 =》高级 =》环境变量
选择path进行编辑
找到你安装的Anaconda的位置,将Anaconda文件中 Library\bin 目录和 Scripts 目录复制下来,点击新建复制上去,一路确定就OK了(我的路径看起来是notebook其实是当时命名错了,就是Anaconda)
5.3 进入jupyter notebook查看
首先,还是在虚拟环境中,输入jupyter notebook
jupyter notebook
下面可以看出tensorflow的虚拟环境已经加载进去了
输入下面俩行代码,第一行判断是否gpu运行,第二行是查看有几个gpu可用,我这显示有一个设备可用
print(tf.test.is_gpu_available())
tf.config.list_physical_devices('GPU')
可能出现的错误:
你可能会出现在jupyter notebook中检测gpu为false,但是在刚才的Anaconda Prompt 中检测却为true,这是因为你没有配置环境变量导致的,可以看5.2重新配置一下环境变量
四.总结
为了实现这个期间出了各种各样的错误,反反复复弄了一天才弄好,也看了许多的大神笔记,吸取各路经验才把自己的弄好,每个人的情况都是不太一样的,也希望看这篇文章的如果遇到bug也不要灰心,多查查搜一搜总有一个解决办法属于你!
如果你有什么问题也可以探讨一下😊: [email protected]
******************番外:2023/5/22*******************
最近因为跑别人项目,安装了1.x版本的tensorflow,这个搭配毫无问题,用的都是conda install
其实conda install 就是下载到.conda/pkgs包下面,然后在自动移植到你的虚拟环境conda-meta包下面,这样的好处就是在其他虚拟环境你使用conda install如果pkgs包里有的话就不用再下载了,如果你想让你的虚拟环境的python降级,在虚拟环境中使用conda install python=xx,他就会自动将你的包还有一些扩展包降到匹配你python版本的级别了
tensorflow1.8.0 ==>python3.6==> cudnn-7.1.4==>cudatoolkit-9.0==>keras-2.1.6