Theano 配置记(Anaconda+Theano 0.7+GPU加速+VS2010)

来源:互联网 发布:陈浩民 妻子 知乎 编辑:程序博客网 时间:2024/06/10 10:56
 终于配置好Theano ,以后可以开始跑实验了 ,写一篇日志记录一下,以防重装系统(这种事经常发生 )不记得怎么配置了。Theano官网上的配置比较杂,我就选了其中一种进行配置。

主要材料:VS2010,Anaconda,Theano,CUDA

首先下载Anaconda,不过最好下载python2.7的(python3.4的配置没有试过)
安装好
Anaconda后,点击下图第一个

进入控制台,输入conda install mingw libpython  ,敲个回车就好
 
关于mingw,详见百度百科,安装好mingw之后,就要去下载Theano

下载好Theano-master之后,解压文件,位置不限,以D盘根目录为例。再通过
控制台进入Theano的目录下,输入以下指令(PS:由于我把Anaconda安装在D盘根目录下,实际上的指令还是根据具体的安装路径来
 
敲个回车,等待安装完成:

安装好了之后 ,就可以打开VS2010进行测试了。但是由于Theano是用Python语言写的,而VS2010本身并不支持Python,需要下载插件PTVS,下载完插件之后双击安装就行。
 安装好PTVS之后就可以运行Theano官网上的测试例程了:
import numpy as npimport timeimport theanoA = np.random.rand(1000,10000).astype(theano.config.floatX)B = np.random.rand(10000,1000).astype(theano.config.floatX)np_start = time.time()AB = A.dot(B)np_end = time.time()X,Y = theano.tensor.matrices('XY')mf = theano.function([X,Y],X.dot(Y))t_start = time.time()tAB = mf(A,B)t_end = time.time()print "NP time: %f[s], theano time: %f[s] (times should be close when run on CPU!)" %(                                           np_end-np_start, t_end-t_start)print "Result difference: %f" % (np.abs(AB-tAB).max(), )
 
运行结果如下:
 
 运行成功,Theano已经配置成功。
如果光用CPU跑的话会比较慢,所以一般会启用GPU加速。 
首先得要安装CUDA,在英伟达官网上下载,可能需要注册,CUDA安装比较简单,就跟普通软件安装的过程一样,CUDA安装完成之后,需要进行配置,我是没有找到.theanorc.txt(注意是.theanorc.txt而不是theanorc.txt,有个小数点),不过没事,可以自己创建,最后需要放到C:\users\username文件夹下就可以
以下是我的配置文件:
[global]
device = gpu
floatX = float32
[nvcc]
flags=-LD:\Anaconda\Lib
compiler_bindir=D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin
注意:flags=-LD:\Anaconda\Libs,其中D:\Anaconda\Lib是python的各种库,包括Theano,前面的-L我还不是很清楚是什么意思,如果有高手知道的话,麻烦指点一下可怜,不过必须要加,不加的话会出现下面的错误:



compiler_bindir就是选择编译器的地址。
配置完成之后再测试以下代码:
from theano import function, config, shared, sandboximport theano.tensor as Timport numpyimport timevlen = 10 * 30 * 768  # 10 x #cores x # threads per coreiters = 1000rng = 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 xrange(iters):    r = f()t1 = time.time()print("Looping %d times took %f seconds" % (iters, t1 - t0))print("Result is %s" % (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')
运行成功:

不过并不是很清楚CNMeM是什么东西,有高手知道的话可以指点一下微笑


0 0
原创粉丝点击