Win10無痛安裝Tensorflow-gpu(同時安裝tf2.1, tf1.13, tf1.9三版本共存)、CUDA、DNN與Pycharm
誰適合看這篇:
- 剛踏入AI deep learning Tensorflow的新手
- 每次安裝都到了深坑又遇不可抗拒原因再重新安裝的老手
安裝環境是邁入玩AI的第一步,Python的安裝是容易的,但Tensorflow(文章後都以tf簡稱)相對麻煩,不同的tf版本會依賴不同的Python, cuDNN, CUDA版本,亦會影響到GPU driver version的選擇,不小心就會入坑爬不出來@@
Overview一下安裝的流程
Nvidia GPU, Tensorflow與Python的關係如下圖,Pycharm為開發工具,提供友善的程式撰寫環境,Python為主要使用的程式語言,透過Tensorflow的AI框架(或是想成函式庫)進行深度學習,而Tensorflow會與 GPU溝通,將大量的運學運算丟給GPU,而GPU擁有數百個到數千個核心的優勢,在同一時間進行大量的運算,套件CUDA Toolkit與cuDNN就是來協助、加速這工程,讓模型完成數值的最佳化
目前tf僅支援Nvidia GPU,AMD GPU的支援依然不好,若有預算上的考量,可以考慮購買2手的GPU,可以看我的分析影片
安裝時會從接近硬體的開始安裝,順序會是GPU driver→CUDA Toolkit→cuDNN→Python→Tensorflow。這次安裝跟以往安裝有個最大差異,以往會統一安裝1組CUDA toolkit與1組CUDNN的版本,根據這樣的組合再去安裝Tensorflow,我把這樣的安裝稱為"全域式"的安裝;這次安裝會藉由Anaconda open source套件,Anaconda的好處是可以建立不同的環境,安裝不同版本的Tensorflow與相容的合的CUDA Toolkit、CUDNN,這種"區域式"的安裝可以因應與不同團隊合作下使用不同python, Tensorflow版本的需求。

GPU的能力(compute capability)
安裝不同的tf版本將需要不同的計算能力,依照官網說明如下:
- Tensorflow-gpu < 2.0, CUDA compute Capability 3.0
- Tensorflow-gpu >=2.0, CUDA compute Capability 3.5
下圖列出一部分GPU的能力,若沒有看到你的GPU請至Nvidia官網查看;若你是使用筆電,GPU跟我一樣是MX150或是MX系列的,在表中找不到,在Nvidia網站的其他地方也不好找到,只有在他們的討論區有看到提問,我猜想可能是產品線跟網站建置的差異,但有趣的是在wikipedia是找的到喔!


安裝GPU的驅動程式
先根據下表1想安裝的tf版本找到對應的CUDA 版本,下表2從CUDA版本對應到你的GPU驅動程式應該要安裝什麼版本。舉例來說,我想安裝tf2.1版本時,CUDA toolkit為10.1,而下表2中CUDA toolkit 10.1對應到Windows的driver 版本要418.96以上,那我的GPU驅動就要安裝或升級至418.96版以上。


到以下網站填入你的GPU型號、系統規格並按下搜尋

出現了451.67版,該版>418.96,OK,可以下載進行安裝

如果你出自於某種需求不想更新到最新,可以至以下網站搜尋所有的驅動程式版本,按下Start search,會出現很多版本任君挑選,只要大於上述的規格即可

安裝Anaconda
剛有提到本次不安裝"全域式"的CUDA toolkit及CUDNN,而是會透過Anaconda來安裝。Anaconda的好處在於可以建立多個虛擬環境,在不同環境下可以安裝不同版本的Python、不同版本的Tensorflow,更貼心的是在安裝Tensorflow的同時,會依據版本來安裝對應的CUDA toolkit and cuDNN,相當佛心。
請至官網根據自己的系統下載安裝程式

新的anaconda預設是安裝Python3.8,回到表 「Tensorflow版本與CUDA toolkit對應關係」可看到僅能安裝tf2.2,也就是預設的環境就只能使用此版本,其他的版本就建立虛擬環境進行安裝即可。
安裝過程不闡述,安裝時建議選擇將anaconda加入環境變數,若不選擇,在命令提示字元中無法直接使用conda指令,需開啟anaconda prompt中才能執行conda相關指令。
安裝Tensorflow(GPU版本)
開啟命令提示字元

我們要做的事情如下圖所示,建立不同的環境並安裝指定的套件

目前是在預設的環境下,由於python=3.8,anaconda目前還沒有對應的tensorflow-gpu=2.2的版本,建議先不要安裝。
建立新的虛擬環境(new env 1)
我們先建立第1個新環境,如上圖的new env 1,輸入指令conda create --name new_env_1 python=3.6

輸入y進行安裝
接著,進入該虛擬環境,輸入指令activate new_env_1,當進入環境時,最前面會有(new_env_1),表示目前你正在此環境裡
確認python version及其他已經安裝的套件,輸入指令conda list

安裝tensorflow1.13版本,輸入指令conda install tensorflow-gpu=1.13
確認Tensorflow, CUDA toolkit, cudnn版本,輸入指令conda list

測試安裝是否成功
一樣在命令提示字元下
輸入python
輸入from tensorflow.python.client import device_lib
輸入print(device_lib.list_local_devices())
此時會看到是否有列出GPU的資訊(如下圖所示),若有表示安裝成功
測試完後,按Ctrl + z離開python coding環境(有時會忘了,然後就打甚麼指令都是錯誤的@@)
離開環境new_env_1,輸入指令deactivate,準備繼續建構下一個虛擬環境

建立新的虛擬環境(new env 2)
建立第2個新環境,輸入指令conda create --name new_env_2 python=3.7

輸入y進行安裝

進入該虛擬環境,輸入指令activate new_env_2
安裝tensorflow2.1版本,輸入指令conda install tensorflow-gpu=2.1
確認Tensorflow, CUDA toolkit, cudnn版本,輸入指令conda list

測試是否安裝成功,方式如第一個虛擬環境的測試方法,測試結果如下

測試完後,按Ctrl + z離開python coding環境
離開環境new_env_2,輸入指令deactivate
建立新的虛擬環境(new env 3)
最後要建立第3個虛擬環境(new_env_3),作法與上述一樣,細節就不闡述,僅貼出結果,如下圖所示.

安裝Pycharm
Pycharm有結合Anaconda的版本,直接在Google輸入pycharm for anaconda


但這個版本是professional version,需要付費或是試用30天,不是我們要的
Google pycharm直接到官網,直接按Download

選擇other versions

選擇windows with Anaconda plugin(exe),下載並安裝,安裝過程總是”下一步”,不闡述

安裝成功後,開啟pycharm,按下create new project

1.輸入想要儲存此專案的資料夾與名稱
2.選擇existing interpreter,就是要選擇我們剛剛安裝的環境
3.但預設不是我們要的,因此點下圖中的第三步驟進行選擇

選擇你要的環境,這裡選擇new_env_2為例,按下ok

按下create,專案便開始創建

那……平常要更換環境怎麼做呢?
請前往File →settings → Project→Project interpreter,如下圖所示,就可以清楚看到目前的環境名稱以及所有套件名稱與版本


如果Project interpreter的選單裡沒有你剛剛創建的環境,請按最底下的Show All

按下’+’,選擇Existing environment,在interpreter的下拉式選單選擇虛擬環境,我們選擇new_env_3,按下ok

此時,Interpreter就有new_env_3的環境了


若要選擇new_env_1也是一樣的做法,就不再闡述
程式驗證
新建python的檔案,在test資料夾處(下圖紅框處)按下滑鼠右鍵,建立新的.py file

測試程式來源:tensorflow官網教學的Basic Image classification,濃縮後的程式如下,請直接複製貼上
from __future__ import absolute_import, division, print_function, unicode_literals
# TensorFlow and tf.kerasimport tensorflow as tffrom tensorflow import keras
# Helper librariesimport numpy as np# import matplotlib.pyplot as plt
print(tf.__version__)
fashion_mnist = keras.datasets.fashion_mnist
(train_images, train_labels), (test_images, test_labels) = fashion_mnist.load_data()
train_images = train_images / 255.0
test_images = test_images / 255.0
model = keras.Sequential([ keras.layers.Flatten(input_shape=(28, 28)), keras.layers.Dense(128, activation='relu'), keras.layers.Dense(10, activation='softmax')])
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
model.fit(train_images, train_labels, epochs=10)
test_loss, test_acc = model.evaluate(test_images, test_labels, verbose=2)
print('\nTest accuracy:', test_acc)
執行程式時,console會出現如下的畫面

順利跑完程式,但不要問我為何準確率這麼低@@

未來心得
安裝環境是第一步,不要第一步就跌到坑裡起不來,希望這篇安裝文章能夠讓你順利安裝成功,繼續往AI的下一步邁進
這是我第三次更新這篇文章的內容,因軟體的更迭很快,我希望內容還能與時俱進,若你喜歡這篇,歡迎留言給我,很矯情的也沒關係,哈哈~
我是JohnnyAI,也歡迎來我的頻道晃晃