之前一直使用python2.7,但是最新的tensorflow官方教程(1.0版本)在Windows上只支持python3和CUDA8,所以卸載python2.7並重新安裝python3.6並配置theano和tensorflow,實現GPU加速。
Tensorflow、theano和Keras都是支持Python接口的。Keras和Tensorflow還有theano的關係如下:
Keras是對Tensorflow或者Theano的再次封裝,也就是以Tensorflow或Theano爲後端,默認的後端是tensorflow,如果你想使用theano爲後端,可以更改爲theano。
Tesorflow與theano是可以使用Nvidia GPU進行加速的。如果你的GPU支持CUDA,速度往往會快個10~20倍。
目前NVIDIA的gpu計算能力:https://developer.nvidia.com/cuda-gpus
可以看到,gtx1060的計算能力媲美目前最厲害的gtx1080了,並且價錢只有他的1/3,於是就跟導師申請了一塊gtx1060。
1、電腦配置
我的實驗室電腦具體配置如下:
Win7,i7,內存16G,顯卡GTX1060...
以下在上述配置下實現GPU加速。
2、安裝Anaconda
在官網https://www.continuum.io/downloads#_windows
中下載相應版本的anaconda安裝包.我電腦是64位的,故下載的64位的Python 3.6 version,直接安裝即可.我是安裝在C:\Anaconda3目錄下。
安裝好Anaconda後,在cmd.exe(命令提示符)中輸入python命令查看安裝結果。
可以看到,python3已結安裝好。
注意,最新版的tensorflow在Windows下面只支持python3和Cuda8。3、安裝Theano
直接在cmd.exe中輸入命令:pip install theano,安裝成功後會在 C:\Anaconda\Lib\site-packages中出現於theano相關的兩個目錄。Anaconda版本底下沒有MinGW包,這時可以:CMD輸入 condainstall mingw libpython, MinGW會自動裝到Anaconda下(C:\Anaconda3\MinGW)。
然後在 C:\Users\**\ 目錄(**指用戶名)下新建.theanorc.txt文件(注意文件名最前面有”.”),在文件中配置如下:
[global]
openmp = False
[blas]
ldflags =
[gcc]
cxxflags = -IC:\Anaconda3\MinGW #這裏是你安裝Mingw的位置
測試theano是否安裝好:只需打開控制檯,然後輸入:python回車,再輸入import theano回車,若沒有其他錯誤信息輸出這表明theano配置正確。如下圖
注意:我這裏由於已經配置好了CUDA,所以輸入import theano回車後有信息輸出,在沒有配置CUDA之前,輸入import theano回車後是沒有信息輸出的。
至此,大家就可以利用theano框架來編寫深度學習的代碼,在CPU上面運行了
4、C++環境安裝
C++環境的安裝,建議直接安裝一套微軟的Visual Studio環境,建議Visual Studio 2010或更高版本。我安裝的是Visual Studio 2013,能夠支持CUDA編程。不過MicrosoftVisual Studio 2013,這一版本的VS體積太過於龐大了,完全安裝後將近有10G+。如果大家不從事其他語言開發,可以考慮在安裝VS的時候只選擇C++,其他語言如VB,C#,F#都可以不用安裝(已試過,沒有任何問題,因爲CUDA只需C++的支持),這樣就能夠減少硬盤的使用量。
在安裝VS2013時,會提示你安裝IE10,按照他提示的鏈接下載最新的IE11安裝即可再次安裝VS2013。
5、安裝cuda_8.0
官網:https://developer.nvidia.com/cuda-downloads
選擇自己對應的版本下載Cuda8.0,然後一路安裝即可。
6、設置環境變量
安裝完畢後,在計算機上點右鍵,打開屬性->高級系統設置->環境變量,可以看到系統中多了CUDA_PATH和CUDA_PATH_V8_0兩個環境變量,接下來,還要在系統中添加以下幾個環境變量:
CUDA_SDK_PATH = C:\ProgramData\NVIDIA Corporation\CUDASamples\v8.0
CUDA_LIB_PATH = %CUDA_PATH%\lib\x64
CUDA_BIN_PATH = %CUDA_PATH%\bin
CUDA_SDK_BIN_PATH = %CUDA_SDK_PATH%\bin\win64
CUDA_SDK_LIB_PATH =%CUDA_SDK_PATH%\common\lib\x64
我的安裝路徑是默認的,所以添加的路徑分別是下面這樣的:
CUDA_PATH
C:\Program Files\NVIDIA GPU ComputingToolkit\CUDA\v8.0
CUDA_PATH_V8_0
C:\Program Files\NVIDIA GPU ComputingToolkit\CUDA\v8.0
CUDA_SDK_PATH
C:\ProgramData\NVIDIA Corporation\CUDASamples\v8.0
CUDA_LIB_PATH
C:\Program Files\NVIDIA GPU ComputingToolkit\CUDA\v8.0\lib\x64
CUDA_BIN_PATH
C:\Program Files\NVIDIA GPU ComputingToolkit\CUDA\v8.0\bin
CUDA_SDK_BIN_PATH
C:\ProgramData\NVIDIA Corporation\CUDASamples\v8.0\bin\win64
CUDA_SDK_LIB_PATH
C:\ProgramData\NVIDIA Corporation\CUDA Samples\v8.0\common\lib\x64
然後,在系統變量 PATH 的末尾添加:
;%CUDA_LIB_PATH%;%CUDA_BIN_PATH%;%CUDA_SDK_LIB_PATH%;%CUDA_SDK_BIN_PATH%;
;C:\Program Files\NVIDIA GPU ComputingToolkit\CUDA\v8.0\lib\x64;C:\Program Files\NVIDIA GPU ComputingToolkit\CUDA\v8.0\bin;C:\ProgramData\NVIDIA Corporation\CUDASamples\v8.0\common\lib\x64;C:\ProgramData\NVIDIA Corporation\CUDASamples\v8.0\bin\win64;
重新啓動計算機。
至此,cuda的安裝就搞定了。
檢查是否安裝正確。在安裝結束後,你會發現在系統環境裏面新添加了兩個環境變量:CUDA_PATH_V8_0和CUDA_PATH。
現在,打開cmd控制檯命令行,輸入命令nvcc –V回車(注意是大寫V喲)就可以參考版本信息,如果安裝正確則出現圖4所示的結果。
7、監測cuda安裝成功與否
這個步驟用到兩個東西,都是cuda爲我們準備好的:deviceQuery.exe 和 bandwithTest.exe
首先啓動cmd DOS命令窗口,默認進來的是c:\users\Admistrator>路徑,輸入 cd .. 兩次,來到c:目錄下 。找到安裝的cuda文件夾。 我電腦上該文件的路徑:C:\Program Files\NVIDIA GPUComputing Toolkit\CUDA\v8.0\extras\demo_suite。直接執行bandwidthTest.exe :
Rsult=PASS及說明,都通過了。如果Rsult=Fail 那不好意思,重新安裝吧。
不要在環境變量添加PYTHONPATH變量,否則容易在import theano後出現configparser找不到或沒有這個組件這個問題(在我這裏是這樣的);
8、安裝cudnn
到網上搜索cudnn下載下來(官網下載要註冊才行)。將下載來的文件解壓,解壓出cuda文件夾,裏面包含3個文件夾。將設三個文件夾替換掉系統裏面的對應文件,進行覆蓋替換即可。C:\ProgramFiles\NVIDIA GPU Computing Toolkit\CUDA\v8.0
覆蓋掉後面導入theano時會就不會出現CuDNN not available提示了。
最後是這樣的Using gpu device 0: GeForce GTX 1060 3GB (CNMeMis enabled with initial size: 80.0% of memory, cuDNN 5110)
發現有警告,解決方法參考後面問題處理。
9、測試GPU加速
運行以下測試代碼:
# -*- coding: utf-8 -*-
"""
Created on Mon Mar 13 09:31:19 2017
@author: RL.King
"""
from theano import function, config, shared, sandbox
import theano.tensor as T
import numpy
import time
vlen = 10 * 30 * 768 # 10 x #cores x # threads per core
iters = 10000
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 i in range(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 x in f.maker.fgraph.toposort()]):
print ('My lab computer used the cpu')
else:
print ('My lab computer with high efficiency used the gpu')
下面三個測試分別是cpu運行,安裝Cuda進行GPU加速運行,安裝cuDNN運行的結果:
使用上述測試代碼,以上結果分別是測試代碼在cpu運行,cuda加速和cudnn加速結果,發現gpu上運行提升45.6倍!!!
10、出現的問題以及解決方法
1、不要在環境變量添加PYTHONPATH變量,否則容易在import theano後出現configparser找不到或沒有這個組件這個問題(在我這裏是這樣的)。
2以下報錯:
由於我是卸載了之前的python2再安裝python3,所以把原來的環境變量中Anaconda的相關刪除即可。
3、以下報錯:
測試theano。打開命令行,輸入python,在輸入importtheano,如果出現UnicodeDecodeError:'utf-8' codec can't decode byte 0xd5 in position 11: invalid continuation byte這種編碼問題,這是因爲掉用nvcc返回的字符串是使用的cwindows默認的默認編碼,按照提示路徑,直接找到theano中對應的報錯文件,把源碼出錯的地方改爲 *.decode("GBK")就可以。比如我的是在theano\compact下的__init__.py出現的編碼問題,則修改爲:
4、以下報錯
這裏提示警告,我的cuDNN版本過高,目前安裝的theano只支持到5版本的,而我是5.1版本的,要麼升級theano要麼降級cuDNN.
這裏選擇安裝cuDNN5,後來發現還是會有警告,雖然不影響實際使用,可以通過升級theano版本得到解決:pip install --upgrade --no-deps git+git://github.com/Theano/Theano.git
可以看到,更新之後還存在警告,提示cuda後端不可用了,要使用gpuarray後端。
https://github.com/Theano/Theano/wiki/Converting-to-the-new-gpu-back-end%28gpuarray%29
可以看到,theano和cuda支持並不好,在我寢室的cuda7.5就未出現這樣的警告。
5、
排除上面的問題後,發現運行EEG程序會報錯:
…puDn ConvDesc{border_mode='half', subsample=(1, 1), conv mode='conv', precision='float32'}(MakeVector{dtype='int64'}.0, MakeVector{dtype='int64'}.0)…
這裏根本Google不到解決方案,感覺還是因爲theano和cudnn版本的問題,發現安裝cudnn4後問題得到解決!