Tensorflow2疑難問題---2、tensorflow2.3的GPU版本安裝
一、總結
一句話總結:
安裝tensorflow的gpu的版本的時候,要特別注意CUDA、cuDNN、tensorflow版本的一致性,在tensorflow官網可以查看對應版本關系
二、tensorflow2.3的GPU版本安裝
博客對應課程的視頻位置:
2、tensorflow2.3的GPU版本安裝(一)-范仁義-讀書編程筆記
https://www.fanrenyi.com/video/37/336
2、tensorflow2.3的GPU版本安裝(二)-范仁義-讀書編程筆記
https://www.fanrenyi.com/video/37/337
一、准備資料
需要顯卡,還需要安裝CUDA和cuDNN
1、顯卡
比如我這台機器,顯卡就是 NVIDIA GTX 1060,顯存6GB
2、CUDA(Compute Unified Device Architecture):統一計算架構
是顯卡廠商NVIDIA推出的運算平台。
CUDA是一種由NVIDIA推出的通用並行計算架構,該架構使GPU能夠解決復雜的計算問題。
3、CUDNN:NVIDIA cuDNN是用於深度神經網絡的GPU加速庫。
The NVIDIA CUDA® Deep Neural Network library (cuDNN) is a GPU-accelerated library of primitives for deep neural networks.
4、CUDA和CUDNN的關系
CUDA看作是一個工作台,上面配有很多工具,如錘子、螺絲刀等。
cuDNN是基於CUDA的深度學習GPU加速庫,有了它才能在GPU上完成深度學習的計算。
二、安裝CUDA和cuDNN
特別注意:
當配置CUDA、cuDNN、tensorflow時,要確保這三者之間的版本對應一致
在tensorflow官網可以查看這些軟件版本對應信息
2、安裝cuDNN
cuDNN各個版本的下載網址:
https://developer.nvidia.com/rdp/cudnn-archive#a-collapse51b
這個下載要注冊,太太太麻煩,
所以我們可以直接復制鏈接地址,迅雷下載即可,不要點進去,點進去要注冊麻煩
3、配置系統變量
4、驗證是否安裝成功
配置完成后,我們可以驗證是否配置成功,主要使用CUDA內置的deviceQuery.exe 和 bandwithTest.exe:
首先win+R啟動cmd,cd到安裝目錄下的 ...\extras\demo_suite,然后分別執行bandwidthTest.exe和deviceQuery.exe,
如果以上兩步都返回了Result=PASS,那么就算成功啦。
三、安裝tensorflow
如果安裝了tensorflow-cpu版本,可以先把cpu版本先卸了
pip uninstall tensorflow-cpu
然后再安裝gpu版本
pip install tensorflow-gpu
四、驗證tensorflow是否成功用gpu加速
In [2]:
import tensorflow as tf print("GPU:",tf.test.is_gpu_available())
In [3]:
tf.config.list_physical_devices('GPU')
Out[3]:
五、卷積神經網絡中GUP和CPU性能對比
In [5]:
import os os.environ['TF_CPP_MIN_LOG_LEVEL']='2' import tensorflow as tf from tensorflow.keras import layers, optimizers, datasets, Sequential # 按需分配GPU # from tensorflow.compat.v1 import ConfigProto # from tensorflow.compat.v1 import InteractiveSession # config = ConfigProto() # config.gpu_options.allow_growth = True # session = InteractiveSession(config=config) tf.random.set_seed(2345) # 卷積層 conv_layers = [ # 5 units of conv + max pooling # 5個單元 # unit 1 layers.Conv2D(64, kernel_size=[3, 3], padding="same", activation=tf.nn.relu), layers.Conv2D(64, kernel_size=[3, 3], padding="same", activation=tf.nn.relu), layers.MaxPool2D(pool_size=[2, 2], strides=2, padding='same'), # unit 2 layers.Conv2D(128, kernel_size=[3, 3], padding="same", activation=tf.nn.relu), layers.Conv2D(128, kernel_size=[3, 3], padding="same", activation=tf.nn.relu), layers.MaxPool2D(pool_size=[2, 2], strides=2, padding='same'), # unit 3 layers.Conv2D(256, kernel_size=[3, 3], padding="same", activation=tf.nn.relu), layers.Conv2D(256, kernel_size=[3, 3], padding="same", activation=tf.nn.relu), layers.MaxPool2D(pool_size=[2