天天看點

windows下theano開發環境搭建(實作了GPU加速) 安裝環境

       因為之後要弄深度學習方面的東西,是以這幾天把theano的開發環境搭建了下,原本以為很簡單,但實際安裝的時候,由于自己電腦之前裝過一些東西産生了幹擾,幾乎把網上所有的教程參考了一遍,足足折騰了三天才真正完整地安裝好,實作了GPU加速。

安裝環境

  • 64位win7系統,顯示卡:GT 720;
  • Visual Studio 2013 ;
  • 因為用的師兄傳下來的電腦,已經安裝了CUDA,是以此處不會講到CUDA的安裝,具體安裝可以參考其他部落格。

1.安裝Anaconda

因為Anaconda中內建了很多python的庫,一些常用的庫基本都在裡面,是以通過安裝Anaconda來搭建theano的環境是最友善的,而且網上關于這個的資料也是最多的。

我選擇的Anaconda版本是Windows64位python2.7,Anaconda2-4.1.1-Windows-x86_64.exe。下載下傳之後直接安裝即可,建議下載下傳之前最好把以前裝過的python解除安裝了,不然後面裝其他東西的時候會産生幹擾!路徑可以自己選擇,我的路徑是D:\Anaconda2。Anaconda安裝完成後會自動添加環境變量。(如果你在安裝過程中除了改路徑其他都是預設安裝的話)

下載下傳位址:https://www.continuum.io/downloads

2.安裝mingw

這裡有巨坑!

  • 安裝完Anaconda之後,打開cmd,直接輸入Anaconda的安裝指令

             conda install mingw libpython

  • 安裝成功之後,Anaconda檔案夾下就會出現MinGW檔案夾。然後需要手動添加環境變量,在path下添加“D:\Anaconda2\MinGW\bin;D:\Anaconda2\MinGW\x86_64-w64-mingw32\lib;”這兩個路徑。

這一步一般不會出錯,但是很坑的一個就是,如果你之前裝過mingw,而且還配置了環境變量的話,會和這Anaconda下安裝的MinGW産生沖突,導緻在安裝theano的時候看似安裝成功了,一import theano就出現各種奇怪的字元,或者說不能import theano中的gof,然而明明在theano下又能找到gof檔案,陷入這種崩潰的局面,我當初就是被這個問題坑的不行。

3.安裝theano

  • 通過cmd直接輸入

pip install theano

        這是最簡單的方法,看到有教程說是可以自己單獨下載下傳再解壓,那種麻煩不說,而且據說會産生各種問題。

        安裝成功之後,需要添加theano的環境變量,建立一個“PYTHONPATH”的變量,路徑設定為“D:\Anaconda2\Lib\site-packages\theano;”

        需要說明的是,這些環境變量都要根據實際檔案夾所在位置來寫,在設定之前最好先看看是否存在這個檔案夾。

4.設定.theanorc.txt 檔案

在你打開cmd指令行視窗的時候會顯示一個路徑(通常為“C:\Users\Administrator”),在這個路徑下建立一個.theanorc.txt 檔案,在其中輸入:

[global]

device = gpu

floatX = float32

openmp=False

[blas]

ldflags =

[gcc]

cxxflags = -ID:\Anaconda2\MinGW 

[nvcc]

fastmath = True

flags = -LD:\Anaconda2\libs

compiler_bindir = D:/zj/zj-study/vs2013/program/VC/bin

[lib]

cnmem=1

由于CPU模式網上很多教程都已經講過了,我這裡直接貼出我的GPU模式下的.theanorc.txt 。

這裡需要注意的是最後一個“[lib] cnmem=1”,如果不加這一條,在測試的時候,輸入import theano 會顯示:Using gpu device 0: GeForce GT 720(CNMeM is disabled,CuDNN not available),而加了這一條之後會顯示:Using gpu device 0: GeForce GT 720 (CNMeM is enabled with initial size: 95.0% of memory, CuDNN not available)

然後重新開機電腦。

5.測試

首先在cmd指令行輸入

python

import theano

如果安裝成功的話,會顯示Using gpu device 0: GeForce GT 720 (CNMeM is enabled with initial size: 95.0% of memory, CuDNN not available),沒有其他的報錯什麼的。

打開Spyder,這是Anaconda內建的一個IDE(直接在開始菜單欄那可能點了沒有反應,不行的話得去Spyder的路徑下打開:D:\Anaconda2\Scripts)。

在裡面運作以下代碼:

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 = 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 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('Used the cpu')

else:

    print('Used the gpu')

如果輸出結果顯示是GPU,那麼OK,已經實作了GPU加速了,但是我在這顯示的是CPU,因為我的電腦上雖然裝了CUDA,卻并沒有裝cudnn,在官網上下載下傳cudnn的包,将生成的bin,include,lib下的檔案分别拷貝到CUDA對應的檔案下,這時再運作上面這個程式應該就會顯示是GPU了。

另外還有一個關于blas加速的測試:

import numpy

id(numpy.dot) == id(numpy.core.multiarray.dot)

如果結果為False,表示成功依賴了BLAS加速,如果是TRUE則表示用的是python自己的實作,并沒有加速。

我重裝了很多次,每一次輸出結果都是true,身邊的同學安裝後測試的時候顯示的也是true,後面發現這好像有一個專門的子產品,

應該是沒有添加這個子產品的緣故,可能按照網上的方法安裝下來的theano環境blas測試應該都是true。

參考

http://blog.csdn.net/churximi/article/details/51627849

https://groups.google.com/forum/#!topic/theano-users/qWeDhMVQy0I

http://www.cnblogs.com/hanahimi/p/4127026.html

另外還有很多,這裡就不一一列舉了。

這裡貼一張最後的結果圖

windows下theano開發環境搭建(實作了GPU加速) 安裝環境

繼續閱讀