小白Windows7/10 64Bit安装Theano并实现GPU加速(没有MinGw等,详细步骤)

转自:http://blog.csdn.net/niuwei22007

本教程适合最初学习者,高手勿喷。原文地址:http://blog.csdn.net/niuwei22007/article/details/47684673

Ubuntu15.10 64bit成功安装Theano+Cuda7.5,具体教程看这里

经过一段时间的使用,建议安装python2.7,因为大部分的代码都是基于python2.7开发,如果安装python3.4的话,会有很多的语法问题,就是python3.x和python2.x在语法变量函数名上边进行了大的改动,如果基础不好,还是建议使用低版本。

经过实际测试,win10 64位也可以安装成功。win8没试过,应该也可以

网络上有各种各样的win7 64bit安装theano的方法,我也试过好多,各种各样的问题。因为之前没了解过MinGw等东西,所以安装起来比较费劲,经过不断的尝试,最终我按照以下过程安装成功。

其实过程很简单,首先说一下安装条件: 
1. win7 (32和64都可以,下载安装包时一定要选择对应的) 
2. vs2010(不一定非要是vs2010,恰好我有vs2010,应该是配置GPU编程时需要用到vs的编译器) 
3. Anaconda(转到官方下载,打开之后稍微等一会就会出来下载链接了。之所以选择它是因为它内置了python,以及numpy、scipy两个必要库和一些其他库,比起自己安装要省事。至于版本随便选择了,如果想安装python3.4就下载对应的Anaconda3。本教程使用Anaconda,也就是对应的python2.7版本。安装过程无差别。)

安装过程: 
一、卸载之前版本。 
把之前单独安装的python等统统卸载掉。学python的时候直接安装了python2.7,先把他卸载掉,因为Anaconda里边包含了python。

二、安装Anaconda。 
这个超级简单,安装目录我用的默认的 C:\Anaconda 。中间会有360拦截,全部允许即可。

三、安装MinGw。 
其他教程讲在环境变量中添加 path C:\Anaconda\MinGW\bin;C:\Anaconda\MinGW\x86_64-w64-mingw32\lib; ,但是你会发现 C:\Anaconda\ 下面根本没有MinGw这个目录,所以最好的方法就是用命令安装,不需要自己下载什么mingw-steup.exe等。 
安装方法: 
1. 打开CMD(注意是windows命令提示符,并不是进入到python环境下,否则会提示语法错误,因为conda命令就是在windows下面执行的。); 
2. 输入conda install mingw libpython,然后回车,会出现安装进度,稍等片刻即可安装完毕。此时就有C:\Anaconda\MinGw目录了。

四、配置环境变量。 
1. 编辑用户变量中的path变量(如果没有就新建一个,一般会有的),在后边追加C:\Anaconda;C:\Anaconda\Scripts; 不要漏掉分号,此处因为我的Anaconda的安装目录是C:\Anaconda,此处需要根据自己的安装目录填写。 
2. 在用户变量中新建变量pythonpath,变量值为C:\Anaconda\Lib\site-packages\theano; ,此处就是指明安装的theano的目录是哪,但是现在咱们还没有安装,所以不着急,先写完再说。 
3. 打开cmd,会看到窗口里边有个路径,我的是C:\Users\Locked>,根据自己的路径,找到对应的目录,在该目录下新建一个文本文档.theanorc.txt(注意有两个“.”),编辑它,写入以下内容: 
[global] 
openmp=False 
[blas] 
ldflags= 
[gcc] 
cxxflags=-IC:\Anaconda\MinGW 
其中红体字部分是你安装的Anaconda的路径,一定不要弄错。否则找不到MinGw。 
4. 最好重启一下电脑。

五、安装Theano。 
不需要手动下载zip等压缩包,直接用命令安装最简单。 
1. 打开CMD,方法和安装MinGw一样,不要进入python。 
2. 输入pip install theano,回车后就是赏心悦目的下载进度条,这个很小,所以安装的比较快。 
3. 在cmd中,输入python 进入到python环境下,然后先输入import theano回车,需要等一段时间。 
4. 继续输入theano.test()。又会输出好长一段信息,只要没有error就说明安装成功了。我安装时等了一段时间还在输出,我就ctrl+c退出了。(其实我发现,有部分error信息也没有关系,theano的功能也可以正常使用,包括theano.function(),所以如果有同学无论如何配置还是有error信息的话,可以暂时忽略掉,直接跑一段程序试一下,可以去测试一下卷积操作运算代码。

GPU加速已经配置完成,环境win7 64bit 显卡GetForce GT425M 显卡不是很好,过程也不是很难,但是也是弄了好好几天才可以,原来用的win10,怎么配置都失败,换成win7后,一次性搞定。下面简单提示几点,具体的按照一个教程来就行了。

配置GPU加速之前先按照本教程安装好theano。

  1. 要装一个vs2010,或者其他的版本,但是不要是vs2015,具体的版本要看你安装的cuda版本。建议装vs2010,能支持大部分的cuda版本。
  2. 装vs2010的时候,可以只选择装C++语言就够。
  3. 下载cuda,如果你的Anaconda(python)是64位的,那就下载cuda64bit的;否则下载32bit的。其次,如果你的是笔记本,那就选择notebook,否则选择桌面版。下载地址:https://developer.nvidia.com/cuda-toolkit-archive
  4. 至于cuda的版本,有的说要和对应的显卡版本匹配,我的按照列表中的版本是2.1,太老了,现在都出到7.0了,所以我就安装了6.5,实验来看,cuda版本和显卡型号貌似关系不是很大。
  5. 安装Cuda6.5,安装的时候,选择“自定义安装”,安装全部功能,还有要安装到默认位置最好,安装很简单,可能需要点时间。
  6. 安装完后,打开环境变量应该会多出来2个变量,CUDA_PATH_V6_5和CUDA_PATH.
  7. 打开cmd控制台命令行,输入命令nvcc –V回车(注意是大写V)就可以查看版本信息,如果安装正确会显示Cuda的版本号。

      E:\Program_Projects\py\cnn01>nvcc -V 
      nvcc: NVIDIA (R) Cuda compiler driver 
      Copyright (c) 2005-2014 NVIDIA Corporation 
      Built on Fri_Jul_25_06:28:08_CDT_2014 
      Cuda compilation tools, release 6.5, V6.5.13

  8. (这一步不是必须得,而且这一步是和cuda的版本有关系的,不是所有的版本都有这个程序,或者即使有也不一定是类似的文件夹。所以直接下一步也可以。可以确定cuda6.5是有的。)运行C:\Program Files\NVIDIACorporation\Installer2\CUDASamples_6.5\bin\win64\Release下边的particles.exe,如果能正常打开,就说明安装没问题了。

  9. 配置.theanorc.txt,如下: 
    [global] 
    openmp=False 
    device = gpu 
    floatX = float32 
    allow_input_downcast=True
     
    [blas] 
    ldflags= 
    [gcc] 
    cxxflags=-IE:\Anaconda\MinGW 
    [nvcc] 
    flags = -LE:\Anaconda\libs #此处是Anaconda的路径 
    compiler_bindir = E:\VS2010\VC\bin #此处一定要和你安装的VS的路径保持一致,如果是默认安装的,应该是C:\Program Files(x86)\Microsoft Visual Studio 10.0\VC\bin 
    fastmath = True 
    flags=-arch=sm_30 #我的加入这句话会报错,去掉就好了

  10. 然后就测试一下就行了,这样应该能安装成功。 
    测试代码:

<code class="hljs php has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">from theano import <span class="hljs-function" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">function</span>, <span class="hljs-title" style="box-sizing: border-box;">config</span>, <span class="hljs-title" style="box-sizing: border-box;">shared</span>, <span class="hljs-title" style="box-sizing: border-box;">sandbox</span>
<span class="hljs-title" style="box-sizing: border-box;">import</span> <span class="hljs-title" style="box-sizing: border-box;">theano</span>.<span class="hljs-title" style="box-sizing: border-box;">tensor</span> <span class="hljs-title" style="box-sizing: border-box;">as</span> <span class="hljs-title" style="box-sizing: border-box;">T</span>
<span class="hljs-title" style="box-sizing: border-box;">import</span> <span class="hljs-title" style="box-sizing: border-box;">numpy</span>
<span class="hljs-title" style="box-sizing: border-box;">import</span> <span class="hljs-title" style="box-sizing: border-box;">time</span>

<span class="hljs-title" style="box-sizing: border-box;">vlen</span> = 10 * 30 * 768  # 10 <span class="hljs-title" style="box-sizing: border-box;">x</span> #<span class="hljs-title" style="box-sizing: border-box;">cores</span> <span class="hljs-title" style="box-sizing: border-box;">x</span> # <span class="hljs-title" style="box-sizing: border-box;">threads</span> <span class="hljs-title" style="box-sizing: border-box;">per</span> <span class="hljs-title" style="box-sizing: border-box;">core</span>
<span class="hljs-title" style="box-sizing: border-box;">iters</span> = 1000

<span class="hljs-title" style="box-sizing: border-box;">rng</span> = <span class="hljs-title" style="box-sizing: border-box;">numpy</span>.<span class="hljs-title" style="box-sizing: border-box;">random</span>.<span class="hljs-title" style="box-sizing: border-box;">RandomState</span><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">22</span>)</span>
<span class="hljs-title" style="box-sizing: border-box;">x</span> = <span class="hljs-title" style="box-sizing: border-box;">shared</span><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(numpy.asarray<span class="hljs-params" style="box-sizing: border-box;">(rng.rand<span class="hljs-params" style="box-sizing: border-box;">(vlen)</span>, config.floatX)</span>)</span>
<span class="hljs-title" style="box-sizing: border-box;">f</span> = <span class="hljs-title" style="box-sizing: border-box;">function</span><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">([], T.exp<span class="hljs-params" style="box-sizing: border-box;">(x)</span>)</span>
<span class="hljs-title" style="box-sizing: border-box;">print</span> <span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(f.maker.fgraph.toposort<span class="hljs-params" style="box-sizing: border-box;">()</span>)</span>
<span class="hljs-title" style="box-sizing: border-box;">t0</span> = <span class="hljs-title" style="box-sizing: border-box;">time</span>.<span class="hljs-title" style="box-sizing: border-box;">time</span><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">()</span>
<span class="hljs-title" style="box-sizing: border-box;">for</span> <span class="hljs-title" style="box-sizing: border-box;">i</span> <span class="hljs-title" style="box-sizing: border-box;">in</span> <span class="hljs-title" style="box-sizing: border-box;">range</span><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(iters)</span>:
    <span class="hljs-title" style="box-sizing: border-box;">r</span> = <span class="hljs-title" style="box-sizing: border-box;">f</span><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">()</span>
<span class="hljs-title" style="box-sizing: border-box;">t1</span> = <span class="hljs-title" style="box-sizing: border-box;">time</span>.<span class="hljs-title" style="box-sizing: border-box;">time</span><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">()</span>
<span class="hljs-title" style="box-sizing: border-box;">print</span> <span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'Looping %d times took'</span> % iters, t1 - t0, <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'seconds'</span>)</span>
<span class="hljs-title" style="box-sizing: border-box;">print</span> <span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'Result is'</span>, r)</span>
<span class="hljs-title" style="box-sizing: border-box;">if</span> <span class="hljs-title" style="box-sizing: border-box;">numpy</span>.<span class="hljs-title" style="box-sizing: border-box;">any</span><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">([isinstance<span class="hljs-params" style="box-sizing: border-box;">(x.op, T.Elemwise)</span> for x in f.maker.fgraph.toposort<span class="hljs-params" style="box-sizing: border-box;">()</span>])</span>:
    <span class="hljs-title" style="box-sizing: border-box;">print</span> <span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'Used the cpu'</span>)</span>
<span class="hljs-title" style="box-sizing: border-box;">else</span>:
    <span class="hljs-title" style="box-sizing: border-box;">print</span> <span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'Used the gpu'</span>)</span></span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li></ul>

配置GPU参考资料:http://blog.csdn.net/m624197265/article/details/45700619

5
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值