Win7配置CUDA並搭建基於Theano框架的GPU加速環境
今天終於買回來了一塊算是較好的顯示卡,渴望已久的GPU加速終於實現了,於是進行了下面的一系列配置。
一、 硬體環境資訊
臺式電腦:ThinkCentre M8400t(i7 3770/32GB/1TB),CPU 3.4GH 四核8執行緒
顯示卡:NVIDIA GEFORCE GTX 970
注意:機器原來的顯示卡是AMD Radeon HD 7450,不支援CUDA加速,所以這次花了點小血本買了一塊NVIDIA的顯示卡(如圖A),由於新購的NVIDIA GEFORCE GTX 970顯示卡功率有W,需要單獨供電,而原來的主機電源功率比較弱,所以還一併換了一個的Antec 700W超靜音主機電源(如圖B)。拿到電源與顯示卡後,突然發現ThinkCentre
M8400t這款電腦主機板也是比較雞肋,居然是Intel Q77(這款主機板的電源線是14P的,如圖D),而新電源只支援20P或24P(如圖C),頓時石化了。跑遍了中關村電子市場都沒有買到20P或24P轉14P的轉接線,最後在萬能的淘寶上面花了15¥買到了一根轉接線,為主機成功裝上了電源和顯示卡。
圖A NVIDIA GEFORCE GTX 970顯示卡
圖B Antec 700W超靜音主機電源
圖C Antec電源線20P或24P
圖D 裝好後的整機內部
二、 軟體環境資訊
【1】作業系統:Windows 7 (64位)Professional旗艦版。
【2】Python環境及相關依賴包:Anaconda-1.9.2-Windows-x86_64。
【3】Theano包安裝:直接利用pipinstall theano命令即可完成安裝。
【4】檢查電腦顯示卡是否支援GPU加速。如果顯示卡不支援GPU加速,到此就沒有必要進行下面兩步配置操作了。
【5】C++環境安裝:直接安裝微軟的VisualStudio環境。
【6】平行計算架構安裝:直接安裝CUDA。
三、 詳細配置流程
GPU加速環境的配置流程可以簡單總結為:配置開始→作業系統安裝→Python環境及相關依賴包→Theano包安裝→檢查顯示卡是否支援GPU加速→C++環境安裝→平行計算架構安裝→配置結束,總共可計6個主要步驟。下面就對每個步驟進行詳細描述。
【1】 作業系統安裝
一般情況下大家都已經安裝了作業系統,這一步基本都不用多大麻煩,這裡的配置過程描述均是基於Windows作業系統。但須得注意自己的作業系統是32位還是64位,以下【2】—【6】步驟的配置過程所對應的軟體最好是與作業系統的位數保持一致,對於沒有保持一致的配置過程沒有親自嘗試過。若有同學能夠配置成功可以告訴一下。以下的配置過程均是採用的Windows7
【2】 Python環境及相關依賴包安裝
目前Python的版本主要分為Python 2.x和Python 3.x,至於這兩種版本的區別在此處就不用過多介紹,可以找度娘。
由於Theano採用的Pyhton 2.x進行編寫的,所以在這裡安裝Python環境的時候建議安裝Python2.x,至於具體的何種Python 2.x,建議安裝較高的2.x即可。除了安裝最基本的Python環境,還應該安裝一些其他的依賴包以供Theano使用。在安裝Python環境極其相關依賴包的過程中,如果一個一個的安裝其他依賴包,這樣顯得較為麻煩,這裡建議安裝一個Python整合開發包,Python整合開發包種類較多,我這裡安裝的Anaconda(版本為Anaconda-1.9.2-Windows-x86_64,下載地址:https://repo.continuum.io/archive/,該地址包含了所有的Anaconda歷史版本),用起來沒有任何問題,對Theano的支援很好。在安裝Anaconda時建議直接安裝在盤的根目錄下,如D:\Anaconda。
在安裝完Python後,開啟控制檯,輸入>>python命令,即可看到所安裝Python版本及其相關資訊,這表明Python已經正確安裝。如果沒有看到任何資訊,怎新增環境變數path = D:\Anaconda;D:\Anaconda\Scripts即可。
注意:本人第一次安裝了個Anaconda-2.2.0(當時最新版),發現沒有MinGW,然後自己另外單獨安裝了MinGW,但是配置了很久都沒有配置成功(如有配置成功的可以告訴我),於是換成了Anaconda-1.9.2版本(自帶MinGW)。因為theano的執行需要gcc,所以才會去折騰安裝一個MinGW,如果在Linux平臺上就不用折騰這一番了。有了Anaconda,其裡面的Python包已經足夠支援theano的運行了。
【3】 深度學習框架Theano安裝
在確保第【2】步中Python環境已經正確配置後就可以安裝Theano了。由於Anaconda中的Python依賴包集中已經有了pip工具包,因此在安裝Theano時,只需保證網路暢通的前提下,開啟控制檯,然後輸入>>pipinstall theano命令並回車,然後稍等片刻即可自動安裝上最新版的Theano深度學習框架。這時可到D:\Anaconda\Lib\site-packages目錄下檢視是否已經有theano和Theano-0.7.0-py2.7.egg-info兩個資料夾,若有則表明已經安裝成功。一般情況下,這一步不會出錯,很容易操作。
安裝結束後,檢查當前使用者目錄下是否有.theanorc.txt檔案(這是theano的一些初始設定資訊檔案,如不知道當前使用者目錄位置,可以開啟控制檯視窗,該窗口裡面第一個命令提示行所示的目錄位置就是當前使用者目錄位置,如圖1所示中的C:\Users\Mag即為當前使用者目錄),如果沒有可以手動建立一個,然後在檔案裡面寫入下面內容:
[global]
openmp = False
[blas]
ldflags =
[gcc]
cxxflags = -IC:\MinGW\include
輸入完畢後儲存.theanorc.txt檔案即可。
現在檢查theano是否配置成功,只需開啟控制檯,然後輸入:python回車,再輸入import theano回車,若沒有其他錯誤資訊輸出這表明theano配置正確。如下圖1所示。
圖1 theano配置正確執行截圖
注意:我這裡由於已經配置好了CUDA,所以輸入import theano回車後有資訊輸出,在沒有配置CUDA之前,輸入import theano回車後是沒有資訊輸出的。
至此,大家就可以利用theano框架來編寫深度學習的程式碼,在CPU上面執行了。
【4】 檢查電腦顯示卡是否支援GPU加速
這一步至關重要,在確定了電腦顯示卡支援GPU加速後,再進行後面【5】【6】步操作,不然費時費力而且還沒有結果。就目前而言,似乎只有NVIDIA的GF8級別以上的顯示卡才能支援physx物理加速(即GPU加速,這裡所說的GPU加速均預設是CUDA程式設計),ATI的顯示卡不支援。
如何確認自己電腦的GPU是否支援CUDA程式設計?在裝置管理器中找到顯示介面卡(Display adapters),找到自己電腦的顯示卡型號,然後到http://www.nvidia.com/object/cuda_gpus.html列表(如圖2所示)中進行比對,若在列表中則支援CUDA程式設計,否則就利用Theano框架所編寫深度網路就只能在CPU上面運行了。
圖2 支援CUDA程式設計的顯示卡型號
【5】 C++環境安裝
在電腦顯示卡支援GPU加速(即CUDA程式設計)後,就可以進行【5】和【6】步操作了。
C++環境的安裝,建議直接安裝一套微軟的Visual Studio環境,建議Visual Studio 2010或更高版本。本人安裝Visual Studio 2010與Microsoft Visual Studio 2012兩個版本,均能夠支援CUDA程式設計。不過MicrosoftVisual Studio 2012,這一版本的VS體積太過於龐大了,完全安裝後有10G+。如果大家不從事其他語言開發,可以考慮在安裝VS的時候只選擇C++,其他語言如VB,C#,F#都可以不用安裝(已試過,沒有任何問題,因為CUDA只需C++的支援),這樣就能夠減少硬碟的使用量。至於VS的具體安裝過程這裡就不再論述了,有問題找度娘。
【6】 平行計算架構CUDA的安裝
在安裝CUDA之前最好檢查一下自己電腦的顯示卡驅動版本,版本過老的話,需要更新。有時候安裝完畢CUDA之後,執行CUDA所提供的案例程式中的deviceQuery會出錯,請優先考慮顯示卡驅動的問題。這裡建議安裝NIVDIA官方釋出的針對自己顯示卡型號的驅動。安裝CUDA的詳細步驟如下:
(1) 下載NVIDIA CUDA toolkit,SDK等軟體包,由於CUDA 5.0以上版本已經將ToolKit和SDK等整合在一起了,因此只需下載一個安裝檔案即可。在顯示卡型號允許的條件下,建議下載CUDA 5.0以上版本,這樣比較省事。本人安裝的是CUDA 6.5版本。CUDA各版本下載地址:https://developer.nvidia.com/cuda-toolkit-archive。注意,下載的時候有些版本需要區分desktop(桌上型電腦)和 notebook(筆記本)。
(2) 下載好了後就可以直接安裝了,CUDA的預設安裝目錄為:C:\Program Files\NVIDIA GPU Computing Toolkit\ 這裡推薦使用預設的安裝路徑,不需更改。安裝過程和普通軟體沒有什麼區別。在安裝結束時將會出現一個介面(如圖3),這表明已經成功安裝,從圖3可以看出似乎CUDA 6.5至少都需要Visual Studio 2010的C++環境。
圖3 CUDA6.5成功安裝結束介面
(3) 檢查是否安裝正確。在安裝結束後,你會發現在系統環境裡面新添加了兩個環境變數:CUDA_PATH_V5_0和CUDA_PATH。
現在,開啟cmd控制檯命令列,輸入命令nvcc –V回車(注意是大寫V喲)就可以參考版本資訊,如果安裝正確則出現圖4所示的結果。
圖4 nvcc –V命令執行結果
在測試CUDA是否能夠正確執行時,進入到下面所述目錄下,雙擊執行其目錄下的.exe程式即可。不同的版本估計執行案例的路徑有所差異,不過可以通過搜尋關鍵字“CUDASamples”或者“particles.exe”就能夠找到案例所在目錄。
<1> WindowsXP平臺:
C:\Documents and Settings\All Users\ApplicationData\NVIDIA Corporation\CUDASamples\v5.0\C\bin\win32\Release
<2> WindowsVista, Windows 7, Windows 8, Windows Server 2003, and Windows Server2008平臺:
C:\Program Files\NVIDIACorporation\Installer2\CUDASamples_6.5\bin\win64\Release
如果CUDA安裝正確,則所有案例都是能夠執行的。在本人電腦上,大部分案例都是一閃而過,只有particles.exe這個案例才能看得到絢麗的動畫,如圖5所示。
圖5 particles.exe案例執行結果
(4) 如果案例執行正確,可以考慮手動配置環境變數。在系統環境變數中新建如下項(針對win32平臺上的CUDA 5.0):
CUDA_SDK_PATH = C:\ProgramData\NVIDIA Corporation\CUDASamples\v5.0\common
CUDA_LIB_PATH = %CUDA_PATH%\lib\Win32
CUDA_BIN_PATH = %CUDA_PATH%\bin
CUDA_SDK_LIB_PATH = %CUDA_SDK_PATH%\common\lib\Win32
CUDA_SDK_BIN_PATH = %CUDA_SDK_PATH%\bin\Win32
然後在系統環境變數Path 後新增內容:;%CUDA_LIB_PATH%;%CUDA_BIN_PATH%;%CUDA_SDK_LIB_PATH%;%CUDA_SDK_BIN_PATH%
當然不同版本的CUDA,估計路徑有所差異,上述配置資訊是win32版本的CUDA,僅僅作為參考。本人在配置過程中,沒有進行這一步手動配置環境變數。
(5) CUDA配置結束。若以上案例都執行正常,說明CUDA安裝成功。現在就可以利用Theano框架編寫深度學習程式碼,並將程式碼進行GPU加速了。
【7】 測試Theano框架是否可以利用所安裝的CUDA6.5進行GPU加速
在前面第【2】步中,已經通過安裝Anaconda將python環境裝好,其中Anaconda本身自帶了一個稱作Spyder的圖形介面IDE(如圖6所示)。在進行Theano GPU加速測試之前,還得需要配置一下.theanorc.txt檔案裡面的資訊,紅色字型資訊是為了實現GPU加速而增加的配置資訊,如下:
[global]
openmp = False
device = gpu
floatX = float32
allow_input_downcast=True
[blas]
ldflags =
[gcc]
cxxflags = -IC:\MinGW\include
[nvcc]
flags = -LC:\Anaconda\libs #此處一定要和你安裝的Python的路徑保持一致
compiler_bindir = D:\Program Files(x86)\Microsoft Visual Studio 10.0\VC\bin #此處一定要和你安裝的VS的路徑保持一致
fastmath = True
flags = -arch=sm_30#這裡最初設定為sm_52報錯,後設為30或50都沒問題,不清楚這是幹啥的,有誰知道了可以告訴我
現在可以啟動Spyder,輸入表1中的Theano GPU加速測試案例程式碼並執行,將會出現圖7所示的執行結果,其中有一條“Used the gpu”資訊輸出,表明Theano GPU加速測試成功。
圖6 Anaconda自帶Python圖形介面IDE
fromtheanoimport function, config, shared, sandbox importtheano.tensorasT importnumpy importtime vlen =10*30*768# 10 x #cores x # threads per core iters =1000 rng = numpy.random.RandomState(22) x = shared(numpy.asarray(rng.rand(vlen), config.floatX)) f = function([], T.exp(x)) print f.maker.fgraph.toposort() t0 = time.time() for iinxrange(iters): r= f() t1 = time.time() print'Looping%d times took'% iters, t1- t0,'seconds' print'Result is', r if numpy.any([isinstance(x.op, T.Elemwise)for xin f.maker.fgraph.toposort()]): print'Used the cpu' else: print'Used the gpu' |
表1 Theano GPU加速測試程式碼
圖7 Spyder IDE
【8】 到此,基於CUDA的Theano GPU加速環境已經配置成功。
四、 測試GPU加速與沒有GPU加速時的演算法執行速度
利用Theano框架構建一個深度網路,其層次結構為:Layers = [784, 1050, 4901, 500, 10];訓練配置:Input_Layer =784,Out_Put = 10,Batch_Size = 500,Epoch = 150,網路每一層詳細訓練速度對比如表2所示。
訓練型別 |
層次 |
無GPU加速(單位:分鐘) |
有GPU加速(單位:分鐘) |
加速比(單位:倍) |
預訓練(Pre-training) |
1050 |
55.5 |
3.8 |
14.6 |
4901 |
196.7 |
8.1 |
24.3 |
|
500 |
252.8 |
19.6 |
12.9 |
|
全域性調優(Finetunning) |
[784, 1050, 4901, 500, 10] |
182.1 |
6.3 |
28.9 |
總耗時間 |
687.1 |
37 |
18.6 |
表2 GPU加速對比
五、 總結
GPU加速果然名不虛傳,終於找到提升演算法速度的又一大神器啊….