有一种论点认为GPU比CPU的速度更快。
如果电脑是NVIDIA显卡并且计算能力>=3.5,则使用GPU。(根据TensorFlow官网会变)
- 查看自己显卡型号(右键:NVIDIA控制面板——>系统信息)
- 查询对应的计算能力
- 到TensorFlow官网查询发布的GPU支持,查看硬件要求和软件要求:https://www.tensorflow.org/install/gpu
驱动程序一般电脑上都会带,重点是安装 CUDA toolkit 和 cuDNN - 安装CUDA toolkit
- 根据显卡驱动的版本选择CUDA toolkit 版本,参见https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html
我的驱动版本是442,所以选择了CUDA 10.0.130 - 下载对应的CUDA版本,下载链接
- 安装CUDA
这里也有坑,安装时默认安装选项提示我“系统缺少Visual Studio支持,要下载安装Visual Studio”,于是我又去下载VS 2019 pro,只选了最必要的C++功能,但是也足足10个G,吐血的是安装完了重启之后CUDA仍然报相同的错。
解决:根据网上一些答案,不选用默认安装,而是选择自定义安装,去掉VS选项,则CUDA安装成功。
- 安装cuDNN
NVIDIA cuDNN is a GPU-accelerated library of primitives for deep neural networks.
- 根据CUDA版本选择cuDNN版本,各版本下载链接
貌似会提示需要注册NVIDIA developer,根据系统提示走就可以。
- 安装完后,将CUDA 和 cuDNN 的bin目录都添加到系统的环境变量
- 将cuDNN目录下的三个文件夹复制到CUDA文件夹下
文件夹直接覆盖就可以。
注意:不管是否指定了CUDA的安装路径,最后都只在C盘中的C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0中有,所以需要复制到这里面。
- 安装对应版本的TensorFlow,之前有的可以先卸载
- 想创建虚拟环境也可以,具体操作百度。我没有创建虚拟环境
- 查看需要的TensorFlow版本,GPU版的拉到网页最下面看,我选择2.0.0版本
- 理论上直接 pip install tensorflow-gpu==2.0.0即可,但是需要使用最新的pip。在安装的时候由于我不是最新的pip,系统uninstall了我的pip,但是没有装上最新的,导致我没有pip库了。
连续报错:
pip升级时报错— No module named ‘pip._internal’;
ModuleNotFoundError: No module named ‘pip._internal.cli.main’
网上也有人说重装tensorflow的过程中pip命令无法使用,出现ModuleNotFoundError: No module named 'pip._internal.cli.main’的报错,是因为pip的版本更新到20.0后都会抛出异常。
不管原因是什么,解决方法如下:强制重新安装pip3
系统cmd下,输入如下命令:
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python get-pip.py --force-reinstall
则能重装pip
第二种方法才可以,因为安装了最新版的pip。
- 由于直接pip太慢了,所以采用清华大学镜像源
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ tensorflow-gpu==2.0
注意是==,我一开始写成了-- 就会报错 “没有这个版本”。
最后还报错了,但是最后还说成功安装了这这这,经测试代码测试也没有问题,为了保险起见,还是解决一下错误。
错误二:grpcio版本过低
解决,更新grpcio库
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ --upgrade grpcio
错误一:ERROR: After October 2020 you may experience errors when installing or updating packages. This is because pip will change the way that it resolves dependency conflicts.
第二段红字就是解决方法,在命令后加上–use-feature=2020-resolver
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ tensorflow-gpu==2.0 --use-feature=2020-resolver
再运行就没有问题了。
这样GPU版的TensorFlow就安装好了,使用测试代码测试一下。
- 测试代码
写一个py文件,然后在jupyter命令行里进入到py文件存放路径去运行:python 文件名.py,或者直接运行全路径下的文件也可以。
import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()
# Creates a graph.
a = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[2, 3], name='a')
b = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[3, 2], name='b')
c = tf.matmul(a, b)
# Creates a session with log_device_placement set to True.
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
# Runs the op.
print(sess.run(c))
注意:网上的直接import tensorflow as tf会报错。
因为 tf.Session() 是TensorFlow 1.0 的语法,2.0已经不能这样用了,一种解决方法是
要获得TF 2.0中类似TF 1.x的行为,可以运行如下,也就是文件开头的那两句(来自Stack Overflow)
import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()
还有个警告是跟AVX2有关的,类似这种
Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX AVX2
Advanced Vector Extensions(AVX)是Intel在2008年3月提出的针对Intel和AMD微处理器的x86指令集体系结构的扩展,并由Intel首先在2011年第一季度发布的Sandy Bridge处理器中得到支持,随后由AMD在Bulldozer处理器中发布。在2011年第三季度发布。AVX提供了新功能,新指令和新编码方案。
特别是,AVX引入了融合乘法累加(FMA)运算,从而加快了线性代数的计算速度,即点积,矩阵乘法,卷积等。几乎每个机器学习训练都涉及大量这些运算,因此将在支持AVX和FMA(最高300%)的CPU上速度更快。该警告指出您的CPU确实支持AVX(万岁!)。
这仅与CPU有关。
那为什么不使用呢?
由于tensorflow默认发行版是在没有CPU扩展的情况下构建的,例如SSE4.1,SSE4.2,AVX,AVX2,FMA等。默认构建(从中为pip install tensorflow)旨在与尽可能多的CPU兼容。另一个论点是,即使有了这些扩展,CPU也比GPU慢很多,并且期望在GPU上进行中型和大型的机器学习训练。
你该怎么办?
如果您有GPU,则不必在意AVX的支持,因为大多数昂贵的操作都会在GPU设备上调度(除非明确设置为不这样做)。在这种情况下,您可以通过以下方式忽略此警告
# Just disables the warning, doesn't enable AVX/FMA
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
…或者如果您在Unix上,则设置export TF_CPP_MIN_LOG_LEVEL = 2。 无论如何,Tensorflow都运行良好,但是您不会看到这些烦人的警告。
如果您没有GPU并希望尽可能多地利用CPU,则应从启用了AVX,AVX2和FMA的CPU优化源中构建张量流(如果您的CPU支持)。 这个问题以及GitHub问题都对此进行了讨论。 Tensorflow使用一个称为bazel的临时构建系统,构建它并不是那么简单,但是肯定是可行的。 此后,不仅警告会消失,而且tensorflow性能也应提高。
测试结果如下:
证明使用的是GPU运行。
- 查看显卡利用率
系统cmd中:
简单查看
nvidia-smi
每隔1秒刷新一次
nvidia-smi -l 1