# Tensorflow-GPU 環境配置 ###### tags: `機器學習` `TensorFlow`, `GPU`, `Anaconda`, `VS Code`, `William Mou` `Author`:[William Mou](https://t.me/WilliamMou) [-> 進入個人 Blog](https://william-mou.github.io/) ## 前言 :::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](https://zh.wikipedia.org/wiki/CUDA)] > 作者案: > > 你可以將它看作是 NVIDIA 顯示卡專用的平台,讓開發者更輕鬆的以 CUDA C 或 OpenCL 撰寫代碼,並透過 `CUDA` 最終被驅動程式轉換成PTX代碼,交由顯示核心計算。 > > 這種方法與 `CPUs` 不同的是, `GPUs` 有著側重以較慢速度執行大量併發執行緒的並行流架構,而非快速執行單一執行緒。擅長運算「小」而「多」的數據資料,尤其是圖像運算更是在行。 > > 但這並不表示在相同的花費下,使用 GPU 訓練 AI 一定會比使用 CPU 來的有效益,端看數據的資料大小及其特性,有時候數台 Xeon 系列的 CPU 多核運算,會比 GPU 來的快或節省經費。 ::: :::success 綜合上述,要在 Windows 平台安裝 CUDA ,我們需要準備一些其所需要的軟體,包括以下: * [Visual Studio 2017](https://visualstudio.microsoft.com/zh-hant/?rr=https%3A%2F%2Fwww.google.com%2F) * 用以編寫 CUDA 代碼,若無需求可不安裝。 ![](https://i.imgur.com/tZTiujI.png) * 安裝時,至少勾選 使用 C++ 的桌面開發 ![](https://i.imgur.com/XnI4BLd.png) * 並且安裝位置建議放在 C:\ (系統磁碟機) > 作者案: > > Visual Studio IDE 有時候會有版本未識別錯誤的訊息,例如 [CUDA 9 failed to support the latest Visual Studio 2017 version 15.5](https://devtalk.nvidia.com/default/topic/1027299/cuda-setup-and-installation/cuda-9-failed-to-support-the-latest-visual-studio-2017-version-15-5/) 可透過修改版本代號的方式解決 * [顯示卡驅動程式](http://www.nvidia.com.tw/Download/index.aspx?lang=tw) * 依照自己的顯示卡型號下載 ![](https://i.imgur.com/XP5YraM.png) > 作者案: > > 務必注意自己得硬體型號,若不確定可以使用 NVIDIA 開發的工具 [NVIDIA GPU Reader](http://www.nvidia.com.tw/object/gpureader-faq-tw.html) 辨識 * 以下提供安裝示意圖 ![](https://i.imgur.com/83ajtNT.png) ![](https://i.imgur.com/dRnyRMm.png) ![](https://i.imgur.com/gExA7WB.png) ![](https://i.imgur.com/NMqqrft.png) ![](https://i.imgur.com/U5kyKT9.png) ::: 接著,要來安裝本節主角: `CUDA` 與 `cuDNN` :::danger CUDA 的版本較多,而每個版本有自己所對應的 cuDNN (將在下節介紹),為此,我們必須選定好適當的版本號,並謹記在心,以對應恰當的 Tensorflow 與 cuDNN。 建議各位在安裝前,可以去搜尋看看他人 Tendsorflow 與 CUDA 配對成功的版本,而這裡提供[ 其他作者 ](https://developer.nvidia.com/cuda-90-download-archive?target_os=Windows&target_arch=x86_64&target_version=10&target_type=exenetwork)已經測試成功的案例: * 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 [ 連結點我 ](https://developer.nvidia.com/cuda-90-download-archive?target_os=Windows&target_arch=x86_64&target_version=10&target_type=exenetwork) ![](https://i.imgur.com/xkYZm4J.png) 點選相對應的版本後,下載 Base Installer。 雙擊執行檔案 `cuda_9.0.176_win10_network.exe` 開始安裝 ![](https://i.imgur.com/r6R9Mml.png) ![](https://i.imgur.com/ibn7qDE.png) 在檢查系統系統相容性與合約後 ![](https://i.imgur.com/2rKFFGp.png) ![](https://i.imgur.com/rABqW3n.png) 會進入安裝選項,建議可以直接快速安裝。 ![](https://i.imgur.com/kIauEYD.png) > 作者案 > > 若沒有要使用Visual Studio 2017 編譯 CUDA 的朋友,可以進入自訂安裝中修改設定,將 Visual Studio Integration 關閉,避免報錯。 ![](https://i.imgur.com/kBdt4uo.png) :::warning 若仍然遇到 安裝失敗的情形 ![](https://i.imgur.com/1ArZxqd.png) 建議可至 [這篇博客](https://blog.csdn.net/zzpong/article/details/80282814) 依照步驟解決,本文便不多贅述。 ::: ### 安裝 cuDNN :::info 定義: `cuDNN` 全名為:`NVIDIACUDA®深度神經網絡庫` 是用於 [`深度神經網絡` ](https://developer.nvidia.com/deep-learning)的GPU加速庫。 cuDNN為標準例程提供高度調整的實現,例如卷積,池化,規範化和激活層。而 cuDNN 同時也是 NVIDIA [`深度學習SDK`](https://developer.nvidia.com/deep-learning-sdk) 的一部分。 全球深度學習研究人員和框架開發人員依靠 `cuDNN` 實現高性能 GPU 加速。它允許他們專注於訓練神經網絡和開發軟件應用程序,而不是花時間在低級 GPU 性能調適上。 `cuDNN` 加速了廣泛使用的深度學習框架,包括 `Caffe2`,`MATLAB`,`Microsoft Cognitive Toolkit` , `TensorFlow` , `Theano` 和 `PyTorch` 。 > 作者案 > > 作為 CUDA 的一個深度學習加速庫, cuDNN 的版本必須配合 CUDA 才能正常運行。下面我們將演示如何正確的安裝 cuDNN 。 ::: :::success 首先,前往 NVIDIA DEVELOPER 官網,點擊下載 cuDNN。 ![](https://i.imgur.com/ax7yK8d.png) 註冊或登入 ![](https://i.imgur.com/71PUOCC.png) ![](https://i.imgur.com/tFAZcmn.png) 跳轉至下載頁面 ![](https://i.imgur.com/J1kMlp3.png) 勾選同意後,會跳出版本選擇 ![](https://i.imgur.com/qDuWVWk.png) 此處,我們可以選擇適合的 CUDA 版本、與作業系統進行下載 ![](https://i.imgur.com/XW0Nim8.png) > 作者案 > > 此處選擇 CUDA 9.0 ,以應對上方我們所安裝的版本。 下載後開啟 ![](https://i.imgur.com/0lPKvVp.png) 解壓縮檔案 ![](https://i.imgur.com/O1NN2Bx.png) 之後會得到一個 CUDA 資料夾,分別含有 `bin` 、 `include` 、 `lib` 三個資料夾 ![](https://i.imgur.com/jWvCji7.png) 將其內部的檔案,分別移至 `C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0` 路徑下的對應資料夾中 ![](https://i.imgur.com/skQndsU.png) 例如: `bin` 裡面,需包含 `cudnn64_7.dll` ![](https://i.imgur.com/sZQryQw.png) 再分別將三個資料夾的檔案拖移至對應的位置後, 我們要將下列路徑加入環境變數中,以利將來調用 * C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\bin ![](https://i.imgur.com/njhoU1h.png) * C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\lib\x64 ![](https://i.imgur.com/YgUysjH.png) 打開控制台→系統及安全性→進階系統設定→進階→環境變數(或是直接在控制台中搜尋 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 ![](https://i.imgur.com/56azOht.png) 到此為止, cuDNN 的安裝就到一段落了 ::: ### 安裝 Anaconda :::info Anaconda 是一種 Python 語言的免費增值開源發行版,用於進行大規模數據處理, 預測分析, 和科學計算, 致力於簡化包的管理和部署。Anaconda 使用 軟體包管理系統 Conda 進行包管理。 > [name=[取自wiki](https://zh.wikipedia.org/wiki/Anaconda_(Python%E5%8F%91%E8%A1%8C%E7%89%88))] > 編者案 > > 使用 Anaconda 的好處是他擁有豐富的套件包與良好的套件管理,在資源(硬碟)足夠的情況下,安裝它可以為我們省去很多套件相關的麻煩。 > > 而其安裝過程較為簡單,唯一需要的注意的是,關於 Python 的 PATH 是否與電腦內存在的(例如:Visual Studio 自帶的 Python、 或是原生的 Python)產生衝突,若為第一次安裝則沒有這個問題。 而關於使用方式, wiki 寫得相當清楚,下方引用列出。 * 使用時,可以點擊啟動相應的編程環境: ``` 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 ``` * 安裝包管理: ``` 列出已經安裝的包:在命令提示符中輸入pip list或者用conda list 安裝新包:在命令提示符中輸入「pip install 包名」,或者「conda install 包名」 更新包: conda update package_name 升級所有包: conda upgrade --all 卸載包:conda remove package_names 搜索包:conda search search_term ``` * 管理環境: ``` 安裝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 官方網站](https://anaconda.org/),並點擊右上方的 [Download Anaconda](https://www.anaconda.com/downloads)。 ![](https://i.imgur.com/zrtBsB7.png) 選擇 Python3.6 64-bit版本 ![](https://i.imgur.com/0ZlZeVf.png) 下載完成後雙擊安裝,以下為安裝過程截圖 ![](https://i.imgur.com/MohCChL.png) ![](https://i.imgur.com/9i8xbDT.png) ![](https://i.imgur.com/VybIu3w.png) ![](https://i.imgur.com/zqy3Zxq.png) ![](https://i.imgur.com/iGTNwAt.png) 可將兩者一併勾選,省去設定的麻煩 ![](https://i.imgur.com/L7bxcrW.png) 安裝完成後,我們可以打開 Anaconda prompt 創建環境 ![](https://i.imgur.com/X04H5Zp.png) 前面`()`表示我們當前的環境,我們需要創造一個專屬於 tensorflow 的環境,以免套件彼此間相互干擾,連跟新個版本都要綁手綁腳的。 ![](https://i.imgur.com/tBq18aX.png) 依照 wiki 所說,我們可以使用 `conda create -n env_name package_names[=ver]` 來創建一個環境。 > 編者案 > > 由於電腦已創建過 tensorflow 環境,所以截圖中的命名會多一個 -t 避免衝突 輸入 ```shell= $ conda create -n tensorflow python=3.5 ``` ![](https://i.imgur.com/8eoOPt7.png) 他會提示你你的環境將放在何處。 ![](https://i.imgur.com/qKDX0jp.png) 輸入 Y 進行環境創建,他會預先幫你安裝一些套件 ![](https://i.imgur.com/4DOCufs.png) 環境創建完成,依照命令行提示,你的環境被套件被放在 `C:\Users\willi\Anaconda3\pkgs\wheel-0.31.1-py35_0` ,可以輸入 `conda activate` 指令來進入環境,輸入 `conda deactivate` 來離開環境 ![](https://i.imgur.com/b1YWVuT.png) 接著我們進入環境 ```shell= $ conda activate tensorflow ``` ![](https://i.imgur.com/s126Kvn.png) 使用以下指令來安裝 tensorflow ```shell= $ pip install tensorflow # 或者 $ conda install tensorflow ``` > 編者案 > > 若有開發需求,可以如以下方式指定 tensoeflow 版本 >```shell= ># 移除舊有版本 >$ pip uninstall tensorflow-gpu==1.3.0 ># 安裝指定版本 >$ pip install tensorflow-gpu==1.5.0 >``` 安裝完成 ![](https://i.imgur.com/LFL5aag.png) 使用 import 來檢驗是否安裝正確 ```shell= $ python # 進入 python 互動介面後 >>> import tensorflow as tf ``` ![](https://i.imgur.com/vxx6bb3.png) 隨後逐行複製以下代碼,檢測是否正常運行 GPU ```python 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)) ``` 運行成功應該如圖,輸出運行之顯示卡序號 ``` GPU 0 ``` 與運算結果 ``` [[22. 28.] [49. 64.]] ``` ![](https://i.imgur.com/UUCdhsb.png) ::: ### 安裝 Visual Stduio Code :::info Visual Studio Code(簡稱VS Code)是一個由微軟開發的,同時支援Windows、Linux和macOS作業系統且開放原始碼的文字編輯器。它支援偵錯,並內建了Git 版本控制功能,同時也具有開發環境功能,例如代碼補全(類似於 IntelliSense)、代碼片段、代碼重構等。該編輯器支援用戶自訂配置,例如改變主題顏色、鍵盤捷徑、編輯器屬性和其他參數,還支援擴充功能程式並在編輯器中內建了擴充功能程式管理的功能。 > [name=[取自wiki](https://zh.wikipedia.org/wiki/Visual_Studio_Code)] > 作者案 > > 作為一門編輯器, VS Code 具有跨平台、輕量、擴展性高等優點,使用容易上手,功能雖多卻不會像 Visual Studio 般繁亂,是個老少咸宜的好軟體。 ::: :::success 首先,前往 [VS Code官網](https://code.visualstudio.com/) 下載之 ![](https://i.imgur.com/FNMsK22.png) 之後全勾安裝後打開,可以得到如下畫面 ![](https://i.imgur.com/dK5QRKC.png) 我們可以先至你想要編輯的資料夾,此處以這個 `ai` 資料夾為例 ![](https://i.imgur.com/c8baJoW.png) 右鍵點擊 Open with Code ![](https://i.imgur.com/J88XiPS.png) 之後 VS Code 就會將此資料夾作為一個工作區,在 VS Code 中開啟 ![](https://i.imgur.com/qkFRkWC.png) 之後點擊紅框處的新增檔案,創建一個測試用的 .py 檔。 ![](https://i.imgur.com/TpontF8.png) 接著,將以下 tensorflow 官方測試代碼複製到檔案內。 ```python= 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 套件,所以會報錯。 ![](https://i.imgur.com/B7Yhl5I.png) 我們可以點選左下角的選項,以察看與切換環境 ![](https://i.imgur.com/khsatxX.png) 點擊後,我們可以切換到到方才設定的環境 `tensorflow` ![](https://i.imgur.com/txN496l.png) 此時,我們可以注意到右下角的 `pylint` 以及諸如此類的提示,可以選擇安裝他們,讓開發更加順利。 ![](https://i.imgur.com/DJPVpvE.png) 下方命令行會自動打開,並顯示已成功安裝。 ![](https://i.imgur.com/ncoTa19.png) 接著,點選左邊的紅框處,然後按下綠色三角形箭頭偵錯 ![](https://i.imgur.com/xnUzPAV.png) 選擇 Python ![](https://i.imgur.com/j9tAa0i.png) 若得到以下畫面則代表設定與安裝順利 ![](https://i.imgur.com/6JsdFE1.png) 之後也可以使用 F5 來偵錯。 但若有其他慣用偵錯快捷鍵,可以透過 `Ctrl` + `Shift` + `P` ,搜尋開啟鍵盤快速鍵 ![](https://i.imgur.com/DU6BhQV.png) 或是使用 `Ctrl` + `K` 緊接著按 `Ctrl` + `s` 來開啟 ![](https://i.imgur.com/q8PEtym.png) 接著上方欄位中搜尋 F5 ![](https://i.imgur.com/TVSrbti.png) 點選左邊的小鉛筆,再輸入你想要的鍵盤快捷鍵後按 `Enter` 就大功告成囉。 ![](https://i.imgur.com/IjnukA4.png) ::: ## 結語 希望讀者都能夠在本筆記中學到想學習的東西,也恭喜您成功設定完成 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