初學DeepLearning,看到TensorFlow和pytorch框架用戶數和討論數比較多,最后選擇上手TensorFlow2.0版本。因為搜索了一圈總結:TensorFlow用戶基數還是比較大;2.0版本也改進了1.0版本代碼編寫、調試困難和API混亂等缺點,使其也有了pytorch好上手的優點。
TensorFlow有cpu和gpu兩個版本,gpu可以並行處理,因此gpu版本運行起來更快,但需要有NVIDIA顯卡,且顯卡算力有一定要求。我的筆記本顯卡是:NVIDIA GeForce MX250。以下是在win10安裝TensorFlow2.0-gpu的步驟:
1、安裝之前需要有anaconda,這個我之前裝了就不寫了;
查看我們機器的NVIDIA顯卡算力是否滿足gpu計算要求:https://www.tensorflow.org/install/gpu

顯卡算力查詢:https://developer.nvidia.com/cuda-gpus
我的MX250在官網沒查到,百度了一下說滿足要求,就繼續安裝了。最后我安裝完成測試時看到了我的顯卡算力是6.1

2、pip安裝TensorFlow-gpu
用阿里雲的鏡像源下載安裝:cmd執行:
pip install --default-timeout=100 --ignore-installed --upgrade tensorflow-gpu -i https://mirrors.aliyun.com/pypi/simple/
3、https://www.tensorflow.org/install/source_windows查看CUDA、cuDNN要下載的版本

我的python版本是Python 3.7.6,可以安裝2.0版本,另外需要安裝cuDNN7.4,CUDA10,中間的編譯器和構建工具不知道是什么沒理,最后也不影響。
#python版本查詢:python -V
#python安裝路徑:where ipython
4、https://developer.nvidia.com/cuda-toolkit-archive,下載對應版本的CUDA,我下載的是10.2版本,安裝過程就是一直點點點,如果你不放心的話可以找別的資料參照下具體過程。另外,我搜到有人裝的10.0版本的,不知道區別大不大。我選擇的是默認安裝路徑:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2
5、https://developer.nvidia.com/cudnn,下載對應版本的cuDNN,我下載的是cudnn-10.2-windows10-x64-v8.0.2.39.zip。這里我下錯了,導致后面運行時候有點小問題(具體下面說),我下成8.0版本了。下載前需要進行注冊賬戶和填寫問卷。

我只看到“for CUDA 10.2”就下了,其他歷史版本在Archived cuDNN Releases里可以找到。下載得到的壓縮包,就地解壓后將里面的bin、include、lib里邊的文件放到CUDA的對應文件夾下(我的是C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2)。
6、添加環境變量:電腦 -> 右鍵 屬性 -> 高級系統設置 -> 環境變量 -> 系統變量里找到Path -> 編輯 -> 新建,將以下4個分別加上去。
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\bin
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\libnvvp
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\lib
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\include
7、測試:
一、cmd中測試:
activate tensorflow
ipython
import tensorflow as tf //結果不報錯即正常
tf.test.is_gpu_available() //最后結果顯示True即gpu可以使用
二、pycharm中測試:
(1)加法測試,不要用1.x版本的session方式來測試,因為還要通過import tensorflow.compat.v1 as tf tf.disable_v2_behavior()來啟用1.x版本的代碼編寫方式,這就是2.x想解決的一個TensorFlow缺點,直接用以下代碼即可:
1 import tensorflow as tf 2 3 a = tf.constant(1.) 4 b = tf.constant(2.) 5 c = tf.add(a,b) 6 7 print(float(c))
(2)矩陣相乘測試,cpu和gpu分別計算10000×1000矩陣和1000×2000矩陣相乘的結果,輸出2個運算的時間。
1 import tensorflow as tf 2 import timeit 3 4 with tf.device('/cpu:0'): 5 cpu_a = tf.random.normal([10000, 1000]) 6 cpu_b = tf.random.normal([1000, 2000]) 7 print(cpu_a.device, cpu_b.device) 8 9 with tf.device('/gpu:0'): 10 gpu_a = tf.random.normal([10000, 1000]) 11 gpu_b = tf.random.normal([1000, 2000]) 12 print(gpu_a.device, gpu_b.device) 13 14 def cpu_run(): 15 with tf.device('/cpu:0'): 16 c = tf.matmul(cpu_a, cpu_b) 17 return c 18 19 def gpu_run(): 20 with tf.device('/gpu:0'): 21 c = tf.matmul(gpu_a, gpu_b) 22 return c 23 24 25 cpu_time = timeit.timeit(cpu_run, number=10) 26 gpu_time = timeit.timeit(gpu_run, number=10) 27 print('warmup:', cpu_time, gpu_time) 28 29 30 cpu_time = timeit.timeit(cpu_run, number=10) 31 gpu_time = timeit.timeit(gpu_run, number=10) 32 print('run time:', cpu_time, gpu_time)
輸出結果:

8、測試時遇到的問題:
Could not load dynamic library ‘cudart64_101.dll’; dlerror: cudart64_101.dll not found,還有個是沒找到cudart64_7什么的文件
解決:在CUDA安裝路徑下(我的是C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2)搜索缺失的dll文件,將搜到的cudart64_102.dll改為cudart64_101.dll,另一個cudart64_7的也同理。

