Tensorflow-GPU 環境配置

Tensorflow-GPU 環境配置

AuthorWilliam Mou
點我進入個人 Blog

前言

:::info
AI 發展日新月異,各軟硬體更是推陳出新,而其中 Tensorflow 與其依賴的 CUDA 更是當今潮流,但兩者版本卻多不互相兼容,常常有各種 Bug 。

故,今天實作一篇安裝成功的例子,盡可能完整的陳述相關知識,以及所需注意的地方;供大家參考與共同學習。若有任何不恰當或錯誤的地方,都煩請您聯絡作者修改,共同進步。
:::

需求

:::success
安裝前,須先明瞭自己對於開發(潔癖)需求,以個人為例,我希望能夠在 VScode 中用 shift + enter run conda env 裡的 tensorflow-gpu with Cuda9 and Cudnn7


以清單表示:
| |細項|
|—|————–|
|硬體|GeForce GTX 1080Ti|
|系統|Windows10 專業版|
|框架|Tensorlfow-GPU 1.9|
|版本|CUDA 9 & cuDNN 7.5|
|環境|python3.5 conda(Anaconda) env|
|編輯器|Visual Stusio code|
:::

正文

安裝 CUDA

:::info
定義:

CUDA 是由 NVIDIA 所推出的一種整合技術,在其製造的圖形處理單元(GPUs)之上,實現平行計算平臺與程式設計模型。透過這個技術,開發人員可了直接存取 CUDA GPUs 中的虛擬指令集和平行計算元件的記憶體,運用 NVIDIA GeForce 8 以後的 GPU 和較新的 Quadro GPU 進行並行計算。

[name=取自wiki]

作者案:

你可以將它看作是 NVIDIA 顯示卡專用的平台,讓開發者更輕鬆的以 CUDA C 或 OpenCL 撰寫代碼,並透過 CUDA 最終被驅動程式轉換成PTX代碼,交由顯示核心計算。

這種方法與 CPUs 不同的是, GPUs 有著側重以較慢速度執行大量併發執行緒的並行流架構,而非快速執行單一執行緒。擅長運算「小」而「多」的數據資料,尤其是圖像運算更是在行。

但這並不表示在相同的花費下,使用 GPU 訓練 AI 一定會比使用 CPU 來的有效益,端看數據的資料大小及其特性,有時候數台 Xeon 系列的 CPU 多核運算,會比 GPU 來的快或節省經費。
:::

:::success
綜合上述,要在 Windows 平台安裝 CUDA ,我們需要準備一些其所需要的軟體,包括以下:

:::

接著,要來安裝本節主角: CUDAcuDNN
:::danger
CUDA 的版本較多,而每個版本有自己所對應的 cuDNN (將在下節介紹),為此,我們必須選定好適當的版本號,並謹記在心,以對應恰當的 Tensorflow 與 cuDNN。

建議各位在安裝前,可以去搜尋看看他人 Tendsorflow 與 CUDA 配對成功的版本,而這裡提供 其他作者 已經測試成功的案例:

  • tensorflow 1.4 及以下的不支持高於 CUDA 9.0 。
  • tensorflow 1.0 及以上的不支持低於 CUDA 8.0 。
  • tensorflow-gpu 1.5 以上不支持使用 CUDA 8.0。

而本節,以 Tensorflow 1.9 與 CUDA 9.0 做為安裝範例。

:::

:::success
首先,前往 NVIDIA 開發者的官網,下載 CUDA 連結點我

點選相對應的版本後,下載 Base Installer。

雙擊執行檔案 cuda_9.0.176_win10_network.exe 開始安裝

在檢查系統系統相容性與合約後

會進入安裝選項,建議可以直接快速安裝。

作者案

若沒有要使用Visual Studio 2017 編譯 CUDA 的朋友,可以進入自訂安裝中修改設定,將 Visual Studio Integration 關閉,避免報錯。

:::warning
若仍然遇到 安裝失敗的情形

建議可至 這篇博客 依照步驟解決,本文便不多贅述。
:::

安裝 cuDNN

:::info
定義:

cuDNN 全名為:NVIDIACUDA®深度神經網絡庫 是用於 深度神經網絡 的GPU加速庫。 cuDNN為標準例程提供高度調整的實現,例如卷積,池化,規範化和激活層。而 cuDNN 同時也是 NVIDIA 深度學習SDK 的一部分。

全球深度學習研究人員和框架開發人員依靠 cuDNN 實現高性能 GPU 加速。它允許他們專注於訓練神經網絡和開發軟件應用程序,而不是花時間在低級 GPU 性能調適上。 cuDNN 加速了廣泛使用的深度學習框架,包括 Caffe2MATLABMicrosoft Cognitive ToolkitTensorFlowTheanoPyTorch

作者案

作為 CUDA 的一個深度學習加速庫, cuDNN 的版本必須配合 CUDA 才能正常運行。下面我們將演示如何正確的安裝 cuDNN 。
:::

:::success
首先,前往 NVIDIA DEVELOPER 官網,點擊下載 cuDNN。

註冊或登入


跳轉至下載頁面

勾選同意後,會跳出版本選擇

此處,我們可以選擇適合的 CUDA 版本、與作業系統進行下載

作者案

此處選擇 CUDA 9.0 ,以應對上方我們所安裝的版本。

下載後開啟

解壓縮檔案

之後會得到一個 CUDA 資料夾,分別含有 binincludelib 三個資料夾

將其內部的檔案,分別移至 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0 路徑下的對應資料夾中

例如: bin 裡面,需包含 cudnn64_7.dll

再分別將三個資料夾的檔案拖移至對應的位置後,
我們要將下列路徑加入環境變數中,以利將來調用

  • C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\bin
  • C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\lib\x64

打開控制台→系統及安全性→進階系統設定→進階→環境變數(或是直接在控制台中搜尋 PATH)
尋找「系統變數」中「Path」的部份並用左鍵雙擊,新增下述變數:

  • C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\bin
  • C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\lib\x64

到此為止, cuDNN 的安裝就到一段落了
:::

安裝 Anaconda

:::info
Anaconda 是一種 Python 語言的免費增值開源發行版,用於進行大規模數據處理, 預測分析, 和科學計算, 致力於簡化包的管理和部署。Anaconda 使用 軟體包管理系統 Conda 進行包管理。

[name=取自wiki]

編者案

使用 Anaconda 的好處是他擁有豐富的套件包與良好的套件管理,在資源(硬碟)足夠的情況下,安裝它可以為我們省去很多套件相關的麻煩。

而其安裝過程較為簡單,唯一需要的注意的是,關於 Python 的 PATH 是否與電腦內存在的(例如:Visual Studio 自帶的 Python、 或是原生的 Python)產生衝突,若為第一次安裝則沒有這個問題。

而關於使用方式, wiki 寫得相當清楚,下方引用列出。

  • 使用時,可以點擊啟動相應的編程環境:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    Python(shell) : 標準CPython
    IPython(shell): 相當於在命令窗口的命令提示符後輸入ipython回車。pip install ipython安裝的ipython用法一樣。
    Ipython QTConsole
    IPython Notebook:直接點擊打開,或者在命令提示符中輸入ipython.exe notebook
    Jupyter QTConsole
    Jupyter Notebook:直接點擊打開,或在終端中輸入: jupyter notebook 以啟動伺服器;在瀏覽器中打開notebook頁面地址:http://localhost:8888 。Jupyter Notebook是一種 Web 應用,能讓用戶將說明文本、數學方程、代碼和可視化內容全部組合到一個易於共享的文檔中。
    Spyder:直接點擊打開IDE。最大優點就是模仿MATLAB的「工作空間」
    Anaconda Prompt : 命令行終端
    支持其他IDE,如Pycharm
  • 安裝包管理:

    1
    2
    3
    4
    5
    6
    列出已經安裝的包:在命令提示符中輸入pip list或者用conda list
    安裝新包:在命令提示符中輸入「pip install 包名」,或者「conda install 包名」
    更新包: conda update package_name
    升級所有包: conda upgrade --all
    卸載包:conda remove package_names
    搜索包:conda search search_term
  • 管理環境:

    1
    2
    3
    4
    5
    6
    7
    8
    安裝nb_conda,用於notebook自動關聯nb_conda的環境
    創建環境:在Anaconda終端中 conda create -n env_name package_names[=ver]
    使用環境:在Anaconda終端中 activate env_name
    離開環境:在Anaconda終端中 deactivate
    導出環境設置:conda env export > environmentName.yaml 或 pip freeze > environmentName.txt
    導入環境設置:conda env update -f=/path/environmentName.yaml 或 pip install -r /path/environmentName.txt
    列出環境清單:conda env list
    刪除環境: conda env remove -n env_name

    :::

:::success
首先,我們進入 Anaconda 官方網站,並點擊右上方的 Download Anaconda

選擇 Python3.6 64-bit版本

下載完成後雙擊安裝,以下為安裝過程截圖


可將兩者一併勾選,省去設定的麻煩

安裝完成後,我們可以打開 Anaconda prompt 創建環境

前面()表示我們當前的環境,我們需要創造一個專屬於 tensorflow 的環境,以免套件彼此間相互干擾,連跟新個版本都要綁手綁腳的。

依照 wiki 所說,我們可以使用
conda create -n env_name package_names[=ver]
來創建一個環境。

編者案

由於電腦已創建過 tensorflow 環境,所以截圖中的命名會多一個 -t 避免衝突

輸入

1
$ conda create -n tensorflow python=3.5

他會提示你你的環境將放在何處。

輸入 Y 進行環境創建,他會預先幫你安裝一些套件

環境創建完成,依照命令行提示,你的環境被套件被放在 C:\Users\willi\Anaconda3\pkgs\wheel-0.31.1-py35_0 ,可以輸入 conda activate 指令來進入環境,輸入 conda deactivate 來離開環境

接著我們進入環境

1
$ conda activate tensorflow

使用以下指令來安裝 tensorflow

1
2
3
$ pip install tensorflow
# 或者
$ conda install tensorflow

編者案

若有開發需求,可以如以下方式指定 tensoeflow 版本

1
2
3
4
># 移除舊有版本
>$ pip uninstall tensorflow-gpu==1.3.0
># 安裝指定版本
>$ pip install tensorflow-gpu==1.5.0

安裝完成

使用 import 來檢驗是否安裝正確

1
2
3
$ python
# 進入 python 互動介面後
>>> import tensorflow as tf

隨後逐行複製以下代碼,檢測是否正常運行 GPU

1
2
3
4
5
6
7
8
9
import tensorflow as tf
# 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))

運行成功應該如圖,輸出運行之顯示卡序號

1
GPU 0

與運算結果

1
2
[[22. 28.]
[49. 64.]]

:::

安裝 Visual Stduio Code

:::info
Visual Studio Code(簡稱VS Code)是一個由微軟開發的,同時支援Windows、Linux和macOS作業系統且開放原始碼的文字編輯器。它支援偵錯,並內建了Git 版本控制功能,同時也具有開發環境功能,例如代碼補全(類似於 IntelliSense)、代碼片段、代碼重構等。該編輯器支援用戶自訂配置,例如改變主題顏色、鍵盤捷徑、編輯器屬性和其他參數,還支援擴充功能程式並在編輯器中內建了擴充功能程式管理的功能。

[name=取自wiki]

作者案

作為一門編輯器, VS Code 具有跨平台、輕量、擴展性高等優點,使用容易上手,功能雖多卻不會像 Visual Studio 般繁亂,是個老少咸宜的好軟體。
:::

:::success
首先,前往 VS Code官網 下載之

之後全勾安裝後打開,可以得到如下畫面

我們可以先至你想要編輯的資料夾,此處以這個 ai 資料夾為例

右鍵點擊 Open with Code

之後 VS Code 就會將此資料夾作為一個工作區,在 VS Code 中開啟

之後點擊紅框處的新增檔案,創建一個測試用的 .py 檔。

接著,將以下 tensorflow 官方測試代碼複製到檔案內。

1
2
3
4
5
6
7
8
9
10
11
import tensorflow as tf

class SquareTest(tf.test.TestCase):
def testSquare(self):
with self.test_session():
x = tf.square([2, 3])
self.assertAllEqual(x.eval(), [4, 9])

if __name__ == '__main__':
tf.test.main()

此時,因為你所處的環境是 Anaconda 預設的環境中,並不包含 tensorflow 套件,所以會報錯。

我們可以點選左下角的選項,以察看與切換環境

點擊後,我們可以切換到到方才設定的環境 tensorflow

此時,我們可以注意到右下角的 pylint 以及諸如此類的提示,可以選擇安裝他們,讓開發更加順利。

下方命令行會自動打開,並顯示已成功安裝。

接著,點選左邊的紅框處,然後按下綠色三角形箭頭偵錯

選擇 Python

若得到以下畫面則代表設定與安裝順利

之後也可以使用 F5 來偵錯。
但若有其他慣用偵錯快捷鍵,可以透過 Ctrl + Shift + P ,搜尋開啟鍵盤快速鍵

或是使用 Ctrl + K 緊接著按 Ctrl + s 來開啟

接著上方欄位中搜尋 F5

點選左邊的小鉛筆,再輸入你想要的鍵盤快捷鍵後按 Enter 就大功告成囉。

:::

結語

希望讀者都能夠在本筆記中學到想學習的東西,也恭喜您成功設定完成 Tensorflow 的基礎設定,但 AI 的學習如同汪洋大海般,遠不只如此,僅此希望能夠帶給您一個好的開始與學習體驗,持之以恆,努力前進。共勉之。

:::warning
若對於此筆記有任何錯誤、或是沒有詳盡提到的地方,都非常期待您與我聯絡,能與您的共筆是我的榮幸。歡迎將更多的建議寫在其他 HackMD 中,我將以連結的方式將其引入;或是將建議寄送到我的信箱: william.mou960174@gmail.com
:::

其他參考資料

https://blog.csdn.net/LOVE1055259415/article/details/80343932
https://zhuanlan.zhihu.com/p/30324113
https://rreadmorebooks.blogspot.com/2017/04/win10cudacudnn.html
https://zhuanlan.zhihu.com/p/37086409