tensorflow官网中提示Anaconda安装tensorflow的GPU版本的时候需要安装CUDA和cuDNN,安装步骤如下:
-
查看自己显卡算力,推荐算力大于3.5以上安装gpu版本
-
注意CUDA版本与显卡的对应关系,tensorflow-gpu和cuDNN之间版本的对应。版本对应关系具体请参考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 -
创建虚拟环境:
conda create -n tensorflow_gpu python=3.8
-
在我们的具体使用中,其实真正需要的并不是整个CUDA,而是cudatoolkit,所以我们在这里直接安装cudatoolkit,不需要再下载3个多G的CUDA来本地安装。
> conda activate tensorflow_gpu > conda install cudatoolkit=11.0
-
安装cuDNN,注意查看cuDNN与CUDA对应的版本关系。
> conda install cudnn=8
这里有个问题,通过之前安装的CUDA是11.0,然后查的cuDNN版本应该是8.0。本来应该安装8.0的,问题是安装8.0时候提示错误。找不到这个对应的软件包。解决方案就是不加点后面的小版本号,直接安装当前大版本(8)的最新版本。
(这里有两个推测,一种是由于我更改了国内源,可能国内源没有这个安装包,又可能是真的没有这个版本的软件包。)
conda search cudnn
查看一下有哪些版本。发现只有8.2.1版本的,所以使用8.0发现根本找不到。 -
安装tensorflow-gpu。这里通过conda安装找不到,网上说通过pip安装。之前对应的cudnn与CUDA版本对应的gpu版本为2.4.0
pip install tensorflow-gpu==2.4.0
-
查看自己的tensorflow的gpu版本是否安装成功:
# 在新的tensorflow版本中,这里会有警告,说这个函数将要被淘汰 > import tensorflow as tf # 导入tensorflow包,并命名为tf > tf.test.is_built_with_cuda() # 判断是否可以调用CUDA > tf.test.is_gpu_available() # 判断是否可以调用GPU # 上面代码实现可能会出现很多提示,提示说函数将淘汰啥的,可以直接输出看看效果。 > print(tf.test.is_gpu_available()) # 对于新版本中,提示使用tf.config.list_physical_devices()和tf.config.list_logical_devices()来查看是否有GPU > tf.config.list_physical_devices() Out[]: [PhysicalDevice(name='/physical_device:CPU:0', device_type='CPU'), PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU')]
与keras的关系
谷歌在2019年6月发布TensorFlow2.0时,宣布Keras是TensorFlow的官方高级API,用于快速简单的模型设计和训练。并随着Keras2.3.0的发布,其声明该版本是Keras首个与tf.keras同步的版本。
也就是说在Tensorflow2.0版本中,其Keras
与tf.keras
是同步的。那么对于TensorFlow2.0版本中,更推荐使用tf.keras
首先了解一下Keras与TensorFlow的历史。Keras最初是由GoogleAI开发人员/研究人员FrancoisChollet创建并开发的。开发Keras是为了方便他自己的研究和实验。但是,随着深度学习的普及,许多开发人员、程序员和机器学习从业人员都因其易于使用的API而涌向Keras。当时没有太多的深度网络可用,Keras为了训练自己的自定义神经网络,需要一个用于构建网络的图和拓扑结构,运行优化器,并执行具体的数字运算的计算引擎(称为后端)。对于Keras而言,在v1.1.0之前,Keras的默认后端都是Theano。与此同时,Google发布了TensorFlow,用于机器学习和神经网络训练的符号数学库。这时候,Keras开始支持TensorFlow作为后端。渐渐地,TensorFlow成为最受欢迎的后端,这也就使得TensorFlow从Kerasv1.1.0发行版开始成为Keras的默认后端。一般来说,一旦TensorFlow成为了Keras的默认后端,TensorFlow和Keras的使用量会一起增长,也就是如果没有TensorFlow的情况下就无法使用Keras,所以如果在系统上安装了Keras,那么也就必须安装TensorFlow。同样的,TensorFlow用户也越来越被高级KerasAPI的简单易用所吸引。tf.keras是在TensorFlowv1.10.0中引入的,这是将keras直接集成到TensorFlow包中的第一步。这时候,f.keras软件包与你通过pip安装的keras软件包(即pipinstallkeras)是分开的。为了确保兼容性,原始的keras包没有被包含在tensorflow中,因此它们的开发都很有序。
因此这段时间内开发的keras版本与TensorFlow版本需要有个对应关系,否则可能会报错
。然而在2019年6月谷歌发布的TensorFlow2.0,宣称Keras是TensorFlow的官方高级API。并随着Keras2.3.0的发布,宣称该版本是Keras首个与tf.keras同步的版本。并且对于该版本,Francois 声明:
- 这是 Keras 首个与 tf.keras 同步的版本;
这也是 Keras 支持多个后端(即 Theano,CNTK 等)的最终版本。
最重要的是,所有深度学习从业人员都应将其代码转换成 TensorFlow 2.0 和 tf.keras 软件包。
原始的 keras 软件包仍会接收 bug 并修复,但请向前看,你应该开始使用 tf.keras 了。
因此如果是tensorflow2.0入手的Kears模块的话,直接学习就行,但是对于tensorflow1.0就已经学习了深度学习的来说,可以参考自动将代码升级到 TensorFlow 2。当然也有一些不同的地方,可以去官网查找资料。
使用Keras遇到的坑
在我使用Keras过程中,使用的是Tensorflow2.6.0版本的,在使用from tensorflow.keras.applications.resnet50 import ResNet50
的时候,报错cannot import name 'dtensor' from 'tensorflow.compat.v2.experimental
。该问题是由于tensorflow与Keras版本不兼容所导致的。那么解决方案也就立竿见影了,将版本对应即可。
# 首先查看一下tensorflow的版本
import tensorflow as tf
print(tf.__version__)
# 查看一下keras版本
import tensorflow.keras as keras
print(keras.__version__)
在版本2.3.0后,Keras与Tensorflow版本是一一对应的,因此,将安装keras版本为tensorflow版本的即可。(当然也可以将tensorflow版本改为Keras版本的,不过要替换的安装包相对替换keras而言大很多)。
安装keras版本为tensorflow的:这里以keras的版本2.6为例
pip install keras==2.6
还有一个问题,在使用keras过程中可能需要下载一些数据集和权重信息等,默认位置是C:\Users\用户名\.keras
目录下。所以当运行比较多的keras模型导致c盘不够的情况下,可以定时清理该目录。