CPU
版本和GPU
版本的区别主要在于运行速度,GPU
版本运行速度更快,所以如果电脑显卡支持cuda
,推荐安装gpu
版本的。
CPU版本,无需额外准备,CPU
版本一般电脑都可以安装,无需额外准备显卡的内容,(如果安装CPU版本请参考网上其他教程!
)
GPU版本,需要提前下载 cuda
和 cuDNN
。(本文为GPU版本安装教程。
)
重要的事说三遍:
安装前 一定 要查看自己电脑的环境配置,然后查询Tensorflow-gpu
、Python
、 cuda
、 cuDNN
版本关系,要 一 一对应!
安装前 一定 要查看自己电脑的环境配置,然后查询Tensorflow-gpu
、Python
、 cuda
、 cuDNN
版本关系,要 一 一对应!
安装前 一定 要查看自己电脑的环境配置,然后查询Tensorflow-gpu
、Python
、 cuda
、 cuDNN
版本关系,要 一 一对应!
Tensorflow-gpu 与 Python、 cuda、cuDNN 版本关系查询
我的安装环境为:
操作系统 | 显卡 | Python |
---|---|---|
win11 | NVIDIA GeForce RTX2050 | 3.9.13 |
我的tensorflow-gpu
安装版本为:
tensorflow-gpu | cuda | cuDNN |
---|---|---|
tensorflow-gpu 2.7.0 | cuda 11.5.2 | cuDNN 8.3.2 |
注: 我这个对应关系是在网上查询别人安装成功的案例,不要自己随意组合,不然很容易安装失败,或者就按官网查询的组合安装,安装过程是一样的!
1)、右键此电脑
→右键选管理
→设备管理器
→显示适配器
主要看独显:GeForce RTX 2050
可以看到点击出现了NVIDIA GeForce ...
,即你的电脑显卡型号。
Tensorflow-gpu
版本,如果没有的就只能老老实实安装CPU版咯。我的型号没有查到,NVIDIA近几年显卡的算力一般是够的。
2)、右键显卡
→属性
→驱动程序
,可以查看显卡的驱动程序:
3)、查看GPU驱动版本,也就是我们“CUDA Version”,Windows 11 版本中一般是12.0版本,键盘上同时按win
+r
,输入cmd
,打开命令窗口,在命令窗口输入:
nvidia-smi
安装tensorflow
提前安装好Anaconda
。这里我也不重点介绍了,我之前也重点详细地写过相关文章:
Anaconda安装-超详细版(2023)
Anaconda
安装成功后,进入下面tensorflow
的安装!
后面tensorflow
的安装可成三步:
cuda
的安装cuDNN
的神经网络加速库安装下载cuda
和cuDNN
。在官网上下载对应的cuda
和cuDNN
,版本可以低于上面查到的CUDA
版本但不能高于电脑支持的版本。
1)、下载:
我下载的是CUDA Toolkit 11.5.2
, 点击前面的 CUDA Toolkit 11.5.2
选择相应的系统、版本等选项,点击Download下载:
2)、安装
a、 双击安装包,此时会出现一个提示框,让你选择临时解压位置(该位置的内容在你安装完cuda之后会自动删除),这里默认即可,点击ok。
b、点击同意并继续:
c、完成上一步后,选择自定义,然后点下一步:
d、完成上一步,这里CUDA一定要勾选上,下面的可选可不选,对后续没有影响。
e、这个安装位置可以自己改。要截图记录一下你装到哪里了,后面要用到!我选择了默认安装位置。
f、正在安装
g、安装成功!
点击关闭即可!
检查环境变量:
完成安装后,检查一下环境变量是否存在,一般安装完成会自动配置好环境变量,若是没有,则需手动配置,具体过程如下。
打开 电脑属性,找到 高级系统设置,选择 环境变量 打开。
查看是否有以下系统变量,没有则需要自行添加,对应图片上的名称和值,配置你电脑CUDA
安装所在的位置。
配置好环境变量后,我们检查下CUDA是否安装成功。
nvcc -V
nvcc --version
set cuda
CUDA的安装就结束了,接下来下载解压cuDNN文件。
CUDA
并不是实现GPU
的神经网络加速库,如果希望针对的是神经网络进行加速,我们还需要安装cuDNN
神经网络加速库。
cuDNN
并非是应用程序,而是几个文件包,下载后把它复制到CUDA
的目录下即可。
下载地址:cuDNN Archive | NVIDIA Developer。
第一次单击下载时,会让你先注册登录,然后再进行下载,注册过程认真填写内容就没问题,此处略过,接下来进入下载环节。
1)、下载:
下载对应版本的cuDNN
。这里选择的是cuDNN v8.3.2 for CUDA 11.5
。
3)、教程的这一步要格外注意!
cudnn
文件中的对应文件夹下的所有文件复制 到对应的安装目录中,cudnn
文件中的文件夹复制过去。eg:复制的不是cudnn
中的bin
文件夹,而是bin
文件夹下的所有文件。(有重复的文件是正常的,覆盖掉就好!)cudnn
文件中的bin
文件夹,将该文件夹中所有的 文件 复制粘贴 到CUDA\v11.5\bin
文件夹中:cudnn
文件中的include
文件夹,将该文件夹中所有的 文件 复制粘贴 到CUDA\v11.5\include
文件夹中:cudnn
文件中的lib
文件夹,将该文件夹中所有的 文件 复制粘贴 到CUDA\v11.5\lib\x64
文件夹中:cudnn
文件中的剩下的文件, 复制粘贴 到CUDA\v11.5
文件夹中:
cuDNN
其实就是CUDA
的一个补丁而已,专为深度学习运算进行优化的,然后我们再添加环境变量!继续往下走。
Path
,在系统变量的path
路径下添加以下路径:(具体要根据自己的安装路径下做调整)C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.5\bin
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.5\libnvvp
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.5
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.5\lib\x64
添加好后是这样的:
2)、配置好环境后,我们需要验证环境变量是否配置成功:
打开cmd
,进入自己CUDA的安装下路径...\CUDA\v11.5\extras\demo_suite
:,我是默认路径,所以我的是:
cd \Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.5\extras\demo_suite
然后分别执行以下两个命令:
.\bandwidthTest.exe
.\deviceQuery.exe
如果Result
都为PASS
的话则配置成功!
3)、都安装好之后,我们可以继续输入nvidia-smi
查看CUDA
的信息,然后根据安装版本的信息再去实现其他的库(环境)安装和使用!
nvidia-smi
如图所示,可以看到驱动的版本是527.41
;最高支持的CUDA
版本是12.0
版本。
我这里是使用Anaconda
(如果选择这一步,就不需要额外下载python
,以及各种常用工具包,它会打包下载好)
1)、打开anaconda prompt
2)、创建tensorflow
环境,输入命令:conda create -n tensorflow python=3.9
,表示创建一个名字为tensorflow
的环境,这个环境用的python
版本是3.9
版本的,如果默认创建,会在C盘
!
w11下载anaconda在d盘,新建的虚拟环境总是在c盘怎么解决
conda create -n tensorflow python=3.9
3)、创建成功后,输入命令:conda env list
,可以看到tensorflow
环境已经创建,星号为当前所在环境(基础环境base
)。
conda env list
4)、进入环境,输入命令:activate tensorflow
,就可以进入tensorflow
环境中
conda activate tensorflow
如果要退出环境,输入:
conda deactivate
5)、因为我的conda
环境在D盘中,所以将路径改了以下。如果anaconda
安装的时候是默认路径,这一步不需要。
d:
cd \WorkSoftware\Install\Anaconda3\envs\tensorflow\
6)、 安装指定版本的tensorflow-gpu
,,我安装的是2.7.0
,根据你自己的配套版本安装,输入命令:
pip install tensorflow-gpu==2.7.0 -i https://pypi.mirrors.ustc.edu.cn/simple
7)、打开python
环境,导入tensorflow
包进行测试 ,查看tensorflow
的版本信息, 输入命令:
import tensorflow as tf
(tensorflow) C:\Users\Rmzh>python
Python 3.9.16 | packaged by conda-forge | (main, Feb 1 2023, 21:28:38) [MSC v.1929 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow as tf
Traceback (most recent call last):
File "" , line 1, in <module>
File "D:\WorkSoftware\Install\Anaconda3\envs\tensorflow\lib\site-packages\tensorflow\__init__.py", line 41, in <module>
from tensorflow.python.tools import module_util as _module_util
File "D:\WorkSoftware\Install\Anaconda3\envs\tensorflow\lib\site-packages\tensorflow\python\__init__.py", line 41, in <module>
from tensorflow.python.eager import context
File "D:\WorkSoftware\Install\Anaconda3\envs\tensorflow\lib\site-packages\tensorflow\python\eager\context.py", line 33, in <module>
from tensorflow.core.framework import function_pb2
File "D:\WorkSoftware\Install\Anaconda3\envs\tensorflow\lib\site-packages\tensorflow\core\framework\function_pb2.py", line 16, in <module>
from tensorflow.core.framework import attr_value_pb2 as tensorflow_dot_core_dot_framework_dot_attr__value__pb2
File "D:\WorkSoftware\Install\Anaconda3\envs\tensorflow\lib\site-packages\tensorflow\core\framework\attr_value_pb2.py", line 16, in <module>
from tensorflow.core.framework import tensor_pb2 as tensorflow_dot_core_dot_framework_dot_tensor__pb2
File "D:\WorkSoftware\Install\Anaconda3\envs\tensorflow\lib\site-packages\tensorflow\core\framework\tensor_pb2.py", line 16, in <module>
from tensorflow.core.framework import resource_handle_pb2 as tensorflow_dot_core_dot_framework_dot_resource__handle__pb2
File "D:\WorkSoftware\Install\Anaconda3\envs\tensorflow\lib\site-packages\tensorflow\core\framework\resource_handle_pb2.py", line 16, in <module>
from tensorflow.core.framework import tensor_shape_pb2 as tensorflow_dot_core_dot_framework_dot_tensor__shape__pb2
File "D:\WorkSoftware\Install\Anaconda3\envs\tensorflow\lib\site-packages\tensorflow\core\framework\tensor_shape_pb2.py", line 36, in <module>
_descriptor.FieldDescriptor(
File "D:\WorkSoftware\Install\Anaconda3\envs\tensorflow\lib\site-packages\google\protobuf\descriptor.py", line 561, in __new__
_message.Message._CheckCalledFromGeneratedFile()
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).
More information: https://developers.google.com/protocol-buffers/docs/news/2022-05-06#python-updates
exit()
退出python
环境导入以下包:pip install protobuf==3.19.0 -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghua.edu.cn
然后重新进入python
环境,查看tensorflow
的版本信息, 输入命令:
import tensorflow as tf
tf.__version__
退出tensorflow
环境:
conda deactivate
同时,conda
控制台是默认打开base
环境的,如果想管理这一设置
conda config --set auto_activate_base false / true
Anaconda
,选择tensorflow
环境,打开spyder
,第一次打开需要安装Spyder
,直接点下方的install
即可。import tensorflow as tf
print(tf.__version__)
print(tf.test.gpu_device_name())
print(tf.config.experimental.set_visible_devices)
print('GPU:', tf.config.list_physical_devices('GPU'))
print('CPU:', tf.config.list_physical_devices(device_type='CPU'))
print(tf.config.list_physical_devices('GPU'))
print(tf.test.is_gpu_available())
# 输出可用的GPU数量
print("Num GPUs Available: ", len(tf.config.experimental.list_physical_devices('GPU')))
# 查询GPU设备
tensorflow
的版本以及一些其他信息,我的版本是2.7.0
,True
, 那就表明我们的tensorflow-gpu
已经成功的安装好并且能够正常使用了!GPU
的运算速度吧!import tensorflow as tf
import timeit
#指定在cpu上运行
def cpu_run():
with tf.device('/cpu:0'):
cpu_a = tf.random.normal([10000, 1000])
cpu_b = tf.random.normal([1000, 2000])
c = tf.matmul(cpu_a, cpu_b)
return c
#指定在gpu上运行
def gpu_run():
with tf.device('/gpu:0'):
gpu_a = tf.random.normal([10000, 1000])
gpu_b = tf.random.normal([1000, 2000])
c = tf.matmul(gpu_a, gpu_b)
return c
cpu_time = timeit.timeit(cpu_run, number=10)
gpu_time = timeit.timeit(gpu_run, number=10)
print("cpu:", cpu_time, " gpu:", gpu_time)
gpu
的速度比cpu
还是要快上不少的!注:个人安装过程,仅供学习参考,如有不足,欢迎指正!