首先我们需要知道gpu不是我们想调用就可以直接调用的,我们需要安装一个cuda工具包以及其对应的cudnn(cuDNN 是用于配置深度学习使用),当我们安装好这两个时才能利用机器学习来进行训练,其次我们的gpu驱动要足够新,他会对版本更低的cuda工具包进行兼容,但更高的不行(不需要降级gpu驱动),最后便是最复杂的问题:版本对应,可以去官网,我使用的是python 3.6.13、tensorflow-gpu 1.15.0(它与numpy也有对应可以卸载重装numpy)、cuda 10.0、cudnn 7.6(cudnn问题不大,可以在官网找适合自己cuda版本的就行,他有提示)、gtx 1660ti驱动版本512.59、
首先你需要确定你需要的tensorflow版本,
若对tensorflow版本没有要求,那么就下一个比你gpu的cuda版本低的就行(NVIDIA控制面板->帮助-> 系统信息->组件 ->3D设置里可以看到)
如果对tensorflow版本有要求,那么需要查看对应关系:
版本 | Python 版本 | 编译器 | 构建工具 | cuDNN | CUDA |
---|---|---|---|---|---|
tensorflow_gpu-2.6.0 | 3.6-3.9 | MSVC 2019 | Bazel 3.7.2 | 8.1 | 11.2 |
tensorflow_gpu-2.5.0 | 3.6-3.9 | MSVC 2019 | Bazel 3.7.2 | 8.1 | 11.2 |
tensorflow_gpu-2.4.0 | 3.6-3.8 | MSVC 2019 | Bazel 3.1.0 | 8.0 | 11.0 |
tensorflow_gpu-2.3.0 | 3.5-3.8 | MSVC 2019 | Bazel 3.1.0 | 7.6 | 10.1 |
tensorflow_gpu-2.2.0 | 3.5-3.8 | MSVC 2019 | Bazel 2.0.0 | 7.6 | 10.1 |
tensorflow_gpu-2.1.0 | 3.5-3.7 | MSVC 2019 | Bazel 0.27.1-0.29.1 | 7.6 | 10.1 |
tensorflow_gpu-2.0.0 | 3.5-3.7 | MSVC 2017 | Bazel 0.26.1 | 7.4 | 10 |
tensorflow_gpu-1.15.0 | 3.5-3.7 | MSVC 2017 | Bazel 0.26.1 | 7.4 | 10 |
tensorflow_gpu-1.14.0 | 3.5-3.7 | MSVC 2017 | Bazel 0.24.1-0.25.2 | 7.4 | 10 |
tensorflow_gpu-1.13.0 | 3.5-3.7 | MSVC 2015 update 3 | Bazel 0.19.0-0.21.0 | 7.4 | 10 |
tensorflow_gpu-1.12.0 | 3.5-3.6 | MSVC 2015 update 3 | Bazel 0.15.0 | 7.2 | 9.0 |
tensorflow_gpu-1.11.0 | 3.5-3.6 | MSVC 2015 update 3 | Bazel 0.15.0 | 7 | 9 |
tensorflow_gpu-1.10.0 | 3.5-3.6 | MSVC 2015 update 3 | Cmake v3.6.3 | 7 | 9 |
tensorflow_gpu-1.9.0 | 3.5-3.6 | MSVC 2015 update 3 | Cmake v3.6.3 | 7 | 9 |
tensorflow_gpu-1.8.0 | 3.5-3.6 | MSVC 2015 update 3 | Cmake v3.6.3 | 7 | 9 |
tensorflow_gpu-1.7.0 | 3.5-3.6 | MSVC 2015 update 3 | Cmake v3.6.3 | 7 | 9 |
tensorflow_gpu-1.6.0 | 3.5-3.6 | MSVC 2015 update 3 | Cmake v3.6.3 | 7 | 9 |
tensorflow_gpu-1.5.0 | 3.5-3.6 | MSVC 2015 update 3 | Cmake v3.6.3 | 7 | 9 |
tensorflow_gpu-1.4.0 | 3.5-3.6 | MSVC 2015 update 3 | Cmake v3.6.3 | 6 | 8 |
tensorflow_gpu-1.3.0 | 3.5-3.6 | MSVC 2015 update 3 | Cmake v3.6.3 | 6 | 8 |
tensorflow_gpu-1.2.0 | 3.5-3.6 | MSVC 2015 update 3 | Cmake v3.6.3 | 5.1 | 8 |
tensorflow_gpu-1.1.0 | 3.5 | MSVC 2015 update 3 | Cmake v3.6.3 | 5.1 | 8 |
tensorflow_gpu-1.0.0 | 3.5 | MSVC 2015 update 3 | Cmake v3.6.3 | 5.1 | 8 |
https://img-blog.csdnimg.cn/20200504171706707.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTI4NDgwMQ==,size_16,color_FFFFFF,t_70#pic_center
对应关系官网路径:在 Windows 环境中从源代码构建 | TensorFlow (google.cn)
现在想必你已经确定需要安装的CUDA版本号,本文以CUDA 10为例进行教学,其实一开始准备使用CUDA 9的,但是安装完成后利用nvcc -V
进行检查时检查不到,环境变量也添加完成的,后面装CUDA 10的时候安装文件夹下文件多很多,反正我是妥协了。
现在首先需要得到一个CUDA XX的安装包,其官网网址为:CUDA Toolkit Archive | NVIDIA Developer
选择一个版本点击会跳转到下载,会有几个选项选择操作系统之类的,其中 Installer Type为安装程序类型,我下载的exe文件,到时候只需要双击运行安装。
然后便是双击exe文件安装CUDA,它的安装路径我都没有进行更改,后面设置环境变量可以复制网上的,此时记得选择自定义安装,简洁安装就是全部装,然后其他的博主说安装的时候不要选择一些组件(第一次安装全选,多次就只选择CUDA组件)
此时便可以利用nvcc -V
来检查是否安装成功,若显示非本地命令之类的,很可能是环境变量未进行配置,可以看((16条消息) cuda安装完输入nvcc -V显示不是内部或外部的命令(添加cuda环境变量)_plastic time的博客-CSDN博客_cuda添加环境变量)
如果修改完环境变量还是显示不是内部命令的话咱就换一个版本吧,我也是卡到这里换的,若有好兄弟解决了或解决过欢迎评论区指出!谢谢您!
CUDNN配置较为简单,在下载压缩包之前需要注册一个账号,注册便是。
官网网址:cuDNN Download | NVIDIA Developer
点击下方Archived cuDNN Releases查看历史版本,然后就只需要查看最后for CUDA XXX部分是自己安装的CUDA版本就行,前面表格里说10对应的是7.4,但我下7.6还是没有问题的
那么我们现在就得到了一个压缩包,解压后里面有三个文件夹和一个txt,很显然txt我不会看
将三个文件夹内的内容 拷贝到cuda的安装目录对应文件夹下。例如bin里的就放C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\bin里面,v10.0是我的版本号,如果是默认安装你也可以找到你的。
这个博主讲得也很详细,且有图片教程:(16条消息) CUDA安装教程(超详细)_Billie使劲学的博客-CSDN博客_如何安装cuda
在anaconda中打开命令行或在系统命令行中安装即可:
#这里使用了豆瓣源
pip install tensorflow-gpu==1.15.0 -i “https://pypi.doubanio.com/simple/”
#系统命令行直接装,但是需要激活环境,python36为我的环境名,若无anaconda用前面的方法,在pycharm终端中也可以
activate python36
conda install tensorflow-gpu==1.15.0
安装我所遇到的问题有:
numpy版本不匹配
pip uninstall numpy #卸载numpy
pip install numpy #重新安装
这里安装好了之后可以尝试导入tensorflow包,在python环境中import tensorflow as tf
这里也可能导入失败,需要查看是否有重复的tensorflow包,因为tensorflow-gpu 和 tensorflow的导入方式都一样,但他们又能够同时安装到环境中,所以可能会导致报错,需要删除一个pip uninstall tensorflow
验证tensorflow是否安装成功:
import tensorflow as tf
a = tf.constant([1.0,2.0,3.0],shape = [3], name='a')
b = tf.constant([1.0,2.0,3.0], shape = [3], name='b')
c = a +b
sess = tf.Session(config = tf.ConfigProto(log_device_placement =True))
print(sess.run(c))
在python环境中:
import tensorflow as tf
print("tf version",tf.__version__)
print("use GPU:",gpu_ok)
有True就好了
最后选择gpu来训练
import os
os.environ["CUDA_DEVICE_ORDER"]="PCI_BUS_ID"
os.environ['CUDA_VISIBLE_DEVICES'] = '0'