Win7配置theano+cuda8+cudnn實現gpu加速及遇到問題的解決方法

之前一直使用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後問題得到解決!




















發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章