天天看点

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加速) 安装环境

继续阅读