环境:win7+64位系统
相关安装软件: Anaconda2-4.0.0-Windows-x86_64.exe
visual_studio_ultimate_2013
cuda_7.5.18_windows.exe
硬件:联想Y480笔记本电脑, 显卡型号: NVIDIA
1、安装Anconda。
因为如果安装纯净版Python,还需要自己安装其它的numpy、matpolt等库,挺麻烦的。所以我直接安装集成的Anaconda ,这个软件包含了Ipython,还有许多python的计算库。
因为我是64位系统,因此选择64位的版本,下载后文件为:Anaconda2-4.0.0-Windows-x86_64.exe,下载完成后,就直接双击开始安装,全部都选取默认的就可以了,默认会安装到:C:\Anconda2
2、安装mingw、theano。
(1)mingw 安装
在Anaconda命令窗口中,输入mingw的安装命令:conda install mingw libpython
mingw安装完后,在C:\Anconda2文件下会出现:名为MinGW的文件夹。
(2)theano 安装
与mingw的安装类似,直接在anaconda的命令窗口中输入命令:pip install theano。接着会自动进行在线安装。
(3)配置环境变量
步骤一、在系统环境变量中选择“变量path”,在后面加入值:“C:\Anaconda2\MinGW\bin;C:\Anaconda2\MinGW\x86_64-w64-mingw32\lib;”
步骤二、新建环境变量。变量名为“PYTHONPATH”,变量值为“C:\Anaconda2\Lib\site-packages\theano;”
步骤三、打开C盘-》用户-》Adminstrator。在用户Adminstrator下面创建文件名为:“.theanorc.txt”,文件内容为:
“[blas]
ldflags=
[gcc]
cxxflags =-IC:\Anaconda2\MinGW\x86_64-w64-mingw32\include”
到了这里我们已经完成了theano配置的上半部分,这个时候theano已经可以用了,接着需要做个测试,测试一下自己上面的配置有没有问题。
(4)测试配置是否有误
测试开始前,需要重启电脑,因为我们上面配置了环境变量,系统的环境变量设置完了需要重启电脑才能有效果。
测试方案一
测试代码:
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(), ))
用python运行一下结果如下:
runfile('C:/Users/Administrator/.spyder2/temp.py', wdir='C:/Users/Administrator/.spyder2')
NP time: 0.593000[s], theano time: 0.596000[s] (times should be close when run on CPU!)
Result difference: 0.000000
如果上面的np time 和theano time 差不多,那就代表你上面的配置没有问题了,这个有的时候电脑还有其他的任务,也有可能导致运行的时间不一致。
测试方案二
在python命令窗口中输入:
import theano
print theano.config.blas.ldflags
没有出错(没有返回值)则说明已经配置成功。
测试方案三、验证BLAS是否安装成功。由于numpy是依赖BLAS的,如果BLAS没有安装成功,虽然numpy亦可以安装,但是无法使用BLAS的加速。验证numpy是否真的成功依赖BLAS编译,用以下代码试验:
>>> import numpy
>>> id(numpy.dot) == id(numpy.core.multiarray.dot)
False
结果为False表示成功依赖了BLAS加速,如果是Ture则表示用的是python自己的实现并没有加速。
3、安装CUDA
上面的theano配置只是完成了上半部分,这个时候还不能进行gpu加速。这个时候我们可以用如下命令:
>>import
>>theano.test()
这个时候会跳出PyCUDA的相关错误信息,因为我们还没有安装CUDA。
安装CUDA,具体步骤如下:
(1)安装vs2013
我安装的是visual_studio_ultimate_2013
(2)安装CUDA
cuda的安装文件cuda_7.5.18_windows.exe
安装时推荐自定义安装,全选相关组件。
(3)配置cuda的环境变量
默认安装好后,他会自动帮你设置好2个环境变量,但是最好还自己添加下其他的几个,方便配置vs使用
CUDA_PATH=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.5
CUDA_PATH_V7_5=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.5
CUDA_SDK_PATH = C:\ProgramData\NVIDIA Corporation\CUDA Samples\v7.5
CUDA_LIB_PATH = %CUDA_PATH%\lib\x64
CUDA_BIN_PATH = %CUDA_PATH%\bin
CUDA_SDK_BIN_PATH = %CUDA_SDK_PATH%\bin\x64
CUDA_SDK_LIB_PATH = %CUDA_SDK_PATH%\common\lib\x64
然后,在系统变量 PATH 的末尾添加:
;%CUDA_LIB_PATH%;%CUDA_BIN_PATH%;%CUDA_SDK_LIB_PATH%;%CUDA_SDK_BIN_PATH%;
(4)重启计算机以使环境变量生效。
(5) 接下来是cuda的安装成功与否的监测了,这个步骤我们用到两个东西,这两个东西,都是cuda为我们准备好的。deviceQuery.exe 和 bandwithTest.exe
在命令提示符窗口中输入:nvcc -V,回车查看是否有版本信息。若出现版本信息,则证明nvcc安装成功。
在C:\ProgramData\NVIDIA Corporation\CUDA Samples\v7.5\1_Utilities下找到这两个例程运行
结果为Result=PASS代表安装成功。
4、配置vs2013环境
打开VS2013并建立一个空的win32控制台项目
a.右键源文件 -> 添加 -> 新建项
b.右键工程 -> 生成自定义,选择CUDA 7.5
c.右键项目 -> 属性 -> 配置属性 -> VC++目录,添加以下两个包含目录:
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.5\include
C:\ProgramData\NVIDIA Corporation\CUDA Samples\v7.5\common\include
再添加以下两个库目录:
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.5\lib\x64
C:\ProgramData\NVIDIA Corporation\CUDA Samples\v7.5\common\lib\x64
d.右键项目 -> 属性 -> 配置属性 ->链接器 -> 常规 -> 附加库目录,添加以下目录:
$(CUDA_PATH_V7_5)\lib\$(Platform)
e.右键项目 -> 属性 -> 配置属性 ->链接器 -> 输入 -> 附加依赖项,添加以下库:
其实就是
cublas.lib
cublas_device.lib
cuda.lib
cudadevrt.lib
cudart.lib
cudart_static.lib
cufft.lib
cufftw.lib
curand.lib
cusolver.lib
cusparse.lib
nppc.lib
nppi.lib
npps.lib
nvblas.lib
nvcuvid.lib
nvrtc.lib
OpenCL.lib
f.在工具-》选项-》文本编辑器-》文件扩展名-》添加cu \cuh两个文件扩展名
g. 右键test.cu-》属性-》选择cuda c/c++编译器
h. 打开配置管理器将平台改为x64
5. 下载并安装Microsoft Visual C++ Compiler for Python 2.7。下载到的文件为:VCForPython27.msi。
接着在dos命令窗口中,cd到VCForPython27.msi所在的目录,然后输入安装命令: msiexec /i VCForPython27.msi ALLUSERS=1
接着会进行安装VCForPython27.msi。其将被安装到: C:\Program Files (x86)\Common Files\Microsoft\Visual C++ for Python\9.0.目录下
安装完后,可以到这个目录下看看有没有上面这个目录。
安装完了以后,然后将stdint.h文件放到目录:
C:\Program Files (x86)\Common Files\Microsoft\Visual C++ for Python\9.0\VC\include下面。
6.完整测试
测试的python代码如下:
from theano import function, config, shared, sandbox
import theano.tensor as T
import numpy
import time
vlen = 10 * 30 * 768
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 xrange(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'
(1)CPU测试
.theanorc.txt内容
[blas]
ldflags=
[gcc]
cxxflags = -IC:\Anaconda2\MinGW\x86_64-w64-mingw32\include
CPU下运行结果:
runfile('C:/Users/Administrator/Desktop/untitled0.py', wdir='C:/Users/Administrator/Desktop')
[Elemwise{exp,no_inplace}()]
Looping 1000 times took 15.3100001812 seconds
Result is [ 1.23178032
1.62323285]
Used the cpu
(2)GPU测试
.theanorc.txt内容改为:
[blas]
ldflags=
[global]
device = gpu
floatX = float32
[nvcc]
fastmath=True
flags =-LC:\Anaconda2\libs
compiler_bindir=C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin
[gcc]
cxxflags = -IC:\Anaconda2\MinGW\x86_64-w64-mingw32\include
用GPU加速的运行结果:
runfile('C:/Users/Administrator/Desktop/untitled0.py', wdir='C:/Users/Administrator/Desktop')
[GpuElemwise{exp,no_inplace}(), HostFromGpu(GpuElemwise{exp,no_inplace}.0)]
Looping 1000 times took 0.842000007629 seconds
Result is [ 1.23178029
1.62323296]
Used the gpu
如上运行结果可见在CPU下运行时间约为15.3 seconds,在GPU加速下运行时间约为0.84 seconds,速度提升了18倍。