2019年10月3日 星期四

Win10 搭建Tensorflow-GPU 環境(GeForce MX150 + py3.6 + Tensorflow-GPU2.0+ CUDA10.0+ cuDNN7.6)

某日瀏覽youtube網站時受到啟發


一直有在追蹤John Fish的影片,他是一個哈佛大二學生,目前休學一年在加拿大持續自己的資工領域工作,時常發影片分享他生活中的事情,主題都蠻值得看的,I Decorated My Apartment Using AI這個影片其實是業配,但他竟然可以把業配拍成這樣真的很強。

現在機器學習超級夯,到處都可以聽到AI、Deep learning的關鍵字,網路上也有超級多開源程式碼可以下載,也有一大堆免費學習網站,只要註冊帳戶就可以免費學習,只是對於程式新手來說,一個人單打獨鬥還是很不容易,尤其是程式這個領域,每個人、每台電腦碰上的問題都不一樣,跟著教學步驟操作還是很容易會遇到無法自己解決的問題,這是一個不怕沒有東西學的時代,只怕東西太多不知從何學起。

開頭廢話好多,總之,影片為了業配,John用LG筆電DEMO了一個2015年很夯的論文成果,A Neural Algorithm of Artistic Style,用神經網絡將畫作改變風格,整篇論文的實作有開源程式碼在Github當中。看完當下我覺得這實在太酷了,所以也想自己來實作看看。
但我想要馬上看到成果,所以就搜尋了一下有沒有中文的教學網站,很不意外的英文教學有很多,中文也有,Day 11:風格轉換(Style Transfer) -- 人人都可以是畢卡索,直接照著步驟做可以會有錯,因為之前不曾安裝過相關套件,摸索一陣子放入過去的照片,加上19世紀的畫作,兩張融合之後成果不錯。 補充:使用的是anaconda python環境
Mt. Bromo @印尼

The Heart of the Andes

融合後成果

完成後突然覺得神經網絡太酷了,就跟著系列文章從頭學起,Day 01:以100張圖理解 Neural Network -- 觀念與實踐,這是入坑的開始,Day 02:撰寫第一支 Neural Network 程式 -- 阿拉伯數字辨識,第二篇開始教怎麼建置環境,雖然過去曾經甚麼都有機會碰過一點點(神經網路的概念上過一堂課、python上過三堂課、機器學習也有皮毛認識),但非常不專精,所以可以說是從頭開始,直接按照Day2的步驟做下來遇到了一大堆問題,大概花了兩天時間才安裝好整個環境。

過程中爬了很多文,大家的大架構都大同小異,只是程式版本與時俱進,例如在我開始學的第一天(2019/10/1)Tensorflow剛好推出2.0版本,此時照著步驟做也可能會出錯,這邊就貼兩篇我覺得比較清楚的步驟教學:

主要步驟跟著:Day 02:撰寫第一支 Neural Network 程式 -- 阿拉伯數字辨識
沒有任何基礎的人會需要:在Nvidia MX150的Win10安裝CUDA Toolkit, cuDNN, python(anaconda), and Tensorflow輔助操作

之所以安裝環境會如此複雜,因為需安裝套件多,且不同版本之間不一定相容,通常沒有事先查的話,會直到安裝好後才發現版本不相容而全部重來。

首先 要先確認自己的電腦有沒有GPU,我一開始在一台沒有GPU的電腦上跑完所有步驟,最後才發現原來我的桌電上沒有GPU😂

➤對沒有GPU的電腦,CPU電腦建置步驟:
1. 安裝 Anaconda: 它包含 Python 及常用的套件(Packages),例如NumPy、Pandas等矩陣運算的套件,Python V2 與 V3 不相容,我們選 V3,除非你以前曾大量使用 V2。
2. 安裝 Tensorflow:安裝CPU版,直接在 DOS 下,輸入 pip install tensorflow。
3. 安裝 Keras:在 DOS 下,輸入 pip install keras。 Day02裡面的步驟
可同時參考:http://fugjo16.blogspot.com/2018/04/tensorflow-windows-tensorflow.html

➤GPU電腦建置步驟(較為繁雜):
需要安裝 CUDA, cuDNN, tensorflow-gpu(假設已經安裝好Anaconda了)

1. 確認顯示卡支援CUDA
在桌面按右鍵-NVIDA控制面板-系統資訊  可以看到電腦顯卡資訊,我的型號是GeForce MX150,另外也會顯示驅動程式版本,建議先去更新驅動程式版本(我自己沒有更新就驅動程式結果安裝失敗,更新後顯卡版本436.48),這裡可以查詢GPU型號及其對應的驅動程式版本載點
系統資訊-元素內可以看到GPU對應的CUDA版本,我的顯示10.1
由於我的CUDA顯示10.1所以我就很高興的去下載CUDA Toolkit 10.1版本,但安裝完後卻遇到Could not load dynamic library 'cudart64_100.dll'; dlerror: cudart64_100.dll not found的問題,後來根據網友說法卸載10.1版,安裝10.0版就能正常運作

2. 下載CUDA Toolkit 載點
留意GPU對應的下載版本,最新版並不一定試用,下載完後,進入命令提示字元 (放大鏡搜尋 cmd) 輸入 nvcc -V
有成功的話會出現這樣的回傳,畫面上是10.1版本的CUDA

3. 下載cuDNN 載點
下載 v7.6.3 for CUDA 10.1
解壓縮後的三個資料夾 bin, include, lib的內容物移到
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1內
詳細作法:
cudnn64_7.dll 複製到C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\bin;
cudnn.h 複製到C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\include;
cudnn.lib 複製到C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\lib\x64;

4. 加入環境變數
本機(右鍵)-內容-進階系統設定-進階-環境變數-系統變數內的path(是下面那格,上面是使用者變數)(雙擊新增路徑)
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\bin(可能已經存在)
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\lib\x64
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\libnvvp(可能已經存在)

5. Anaconda新增虛擬環境並裝tensorflow-gpu
直接在放大鏡搜尋anaconda prompt
>conda create -n tensorflow-gpu pip python=3.6
>activate tensorflow-gpu
>pip install --ignore-installed --upgrade tensorflow-gpu 大約跑10分鐘

6. 輸入以下指令 檢查是否安裝成功 
在anaconda prompt中
>python (進入python指令,若要出來則輸入quit( )  )
>from tensorflow.python.client import device_lib
>print(device_lib.list_local_devices())
有跑出GPU算是成功
注意:有些教學文的測試方法是
import tensorflow as tf
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
如果是安裝tensorflow 2的版本會報錯
TF 2.0 does not have tf.Session.改版之後的TF2似乎有改指令的撰寫方式,因此舊版的撰寫方式不再適用

tensorflow-gpu這個步驟我安裝了良久,一直失敗,後來看到這篇文章Tensorflow GPU Installation Made Easy: Use conda instead of pip [Updated]說只需要輸入conda install tensorflow-gpu的指令即可安裝,但我有試過還是失敗,雖然教學文中提到
*雖然tensorflow官網有說明對於anaconda沒有正式支持,建議使用pip來安裝tensorflow,而測試幾次後,確定使用conda installl亦可成功安裝
*conda install好處在於會把相關的套件一併下載與安裝 
但這個方式對我的電腦來說是不行的

最終我回到第一步中提到的,重新安裝CUDA 10.0版本,再跑所有流程一次就成功了

最終版本
GeForce MX150
python 3.6.9
CUDA 10.0
cuDNN v7.6.3.30
tensorflow-gpu 2.0

成功後終於可以開始執行網路上各式神經網絡的程式碼了!😭


0 意見 :

張貼留言