标签:
最近几天开始接触深度学习,鉴于深度学习对速度和GPU计算的要求以及在网络层数不断加深后求导计算的复杂度不断增加,打算搭建一个Theano平台(抛弃Matlab),仅供自己娱乐下(花式灌水)。。。
主要步骤:
Theano之CPU计算
搭建CUDA & VS2010
Theano之GPU计算
安装Theano的条件:
[blas]
ldflags =
我是通过pip直接安装gcc编译器的,其他的方法需要多加几句:
[blas]
ldflags =[gcc]
cxxflags = -I{your gcc address}
也就是告诉theano你的gcc编译器在哪里,如果通过pip安装mingw就不需要了。
之后,我们可以开心的安装Theano啦啦啦,只需要在cmd下输入pip install theano就行了。。。。
OK,最后在spyder下测试下,
import numpy as np
import time
import theano
A = 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(), )
结果为
NP time: 0.675000[s], theano time: 0.535000[s] (times should be close when run on CPU!)
Result difference: 0.000000
VS的安装:http://blog.sina.com.cn/s/blog_4f8cdc9e0100kklr.html (会不会被MS拉黑。。。)
CUDA的配置:http://blog.csdn.net/yeyang911/article/details/17450963
照着上面的步骤做就行了,在此强调一点,在安装CUDA之前必须要去NVIDIA官网上下载相应的官方驱动,别用驱动XX的驱动,容易出问题,我第一次安装就把显卡驱动弄没了。。。
还有就是怎么知道自己的显卡到底能不能用cuda并行计算框架呢,https://developer.nvidia.com/cuda-gpus告诉你。
在完成了以上的步骤后,剩下的就很简单了,把home文件夹(C:/user/{your name}).theanorc.txt的内容修改为:
[blas]
ldflags =[nvcc]
fastmath = True
flags = -LH:\Anaconda2\libs
compiler_bindir = D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin[global]
floatX = float32
device = gpu
flags和complier_binder改成你自己的地址就行了,然后test:
在Spyder下运行
from theano import function, config, shared, sandbox
import theano.tensor as T
import numpy
import timevlen = 10 * 30 * 768 # 10 x #cores x # threads per core
iters = 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("It took %f seconds" % (t1 - t0))
if numpy.any([isinstance(x.op, T.Elemwise) for x in f.maker.fgraph.toposort()]):
print(‘Used the cpu‘)
else:
print(‘Used the gpu‘)
以上所做的就是做很多次(10*30*768*1000)次exp计算,用了张量(Tensor)表示。
比较下我的电脑下CPU和GPU计算的差别
CPU:i7-4720HQ
[Elemwise{exp,no_inplace}(<TensorType(float64, vector)>)]
It took 55.188000 seconds
Used the cpu
GPU(GTX 960M)
[GpuElemwise{exp,no_inplace}(<CudaNdarrayType(float32, vector)>), HostFromGpu(GpuElemwise{exp,no_inplace}.0)]
It took 1.817000 seconds
Used the gpu
Using gpu device 0: GeForce GTX 960M
速度竟然提高了30倍。。。。
呵呵,接下来该爽爽了
Theano 学习笔记(1.搭环境 Anaconda + Theano + VS2010 + CUDA)
标签:
原文地址:http://www.cnblogs.com/thkinglee/p/4966176.html