TensorFlow使用GPU

有一种论点认为GPU比CPU的速度更快。
如果电脑是NVIDIA显卡并且计算能力>=3.5,则使用GPU。(根据TensorFlow官网会变)

  1. 查看自己显卡型号(右键:NVIDIA控制面板——>系统信息)
    在这里插入图片描述
  2. 查询对应的计算能力
    在这里插入图片描述
  3. 到TensorFlow官网查询发布的GPU支持,查看硬件要求和软件要求:https://www.tensorflow.org/install/gpu
    在这里插入图片描述
    驱动程序一般电脑上都会带,重点是安装 CUDA toolkit 和 cuDNN
  4. 安装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安装成功。
  1. 安装cuDNN

NVIDIA cuDNN is a GPU-accelerated library of primitives for deep neural networks.

  • 根据CUDA版本选择cuDNN版本,各版本下载链接
    在这里插入图片描述
    貌似会提示需要注册NVIDIA developer,根据系统提示走就可以。
    在这里插入图片描述
  1. 安装完后,将CUDA 和 cuDNN 的bin目录都添加到系统的环境变量
  2. 将cuDNN目录下的三个文件夹复制到CUDA文件夹下
    在这里插入图片描述
    在这里插入图片描述
    文件夹直接覆盖就可以。

注意:不管是否指定了CUDA的安装路径,最后都只在C盘中的C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0中有,所以需要复制到这里面。

  1. 安装对应版本的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就安装好了,使用测试代码测试一下。

  1. 测试代码
    写一个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运行。

  1. 查看显卡利用率
    系统cmd中:
    简单查看
    nvidia-smi
    每隔1秒刷新一次
    nvidia-smi -l 1
    在这里插入图片描述
  • 32
    点赞
  • 235
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值