安装Windows版的Theano

下面一步一步教你如何用免费的工具和编译器在32位或者64为的操作系统上安装Theano的依赖包。

安装依赖包

Note
下面将会采用Windows命令行来安装,因此必须首先打开命令行窗口。
Windows7以下的操作系统,点击开始菜单然后输入cmd命令,Windows8则在开始屏幕输入cmd。

Theano在windows上运行需要C/C++编译器(对于Python2.7族的需要安装Visual Studio 2008 compiler),CUDA(如果需要支持Visual Studio 2008则需要安装CUDA v5.5),和GCC(编译Theano产生的C代码–无需在GPU上运行的代码)。

Visual Studio与CUDA

微软已经不再发行Visual Studiao Express 2008(它提供Python2.7族的编译器),因此首先需要临时安装Visual Studio Express 2010,然后再安装CUDA,完成后可以把Visual Studio Express 2010卸载掉。目前未发现一种可以不用安装Visual Studio Express 2010再安装CUDA的方法。

首先从Visual Studio Express上下载安装包,然后根据说明安装(请安装Visual C 版本)。下载all-in-one CD,用7zip解压,然后运行VCExpress\setup.exe安装程序。

由于Visual Studio 2010 Express不提供64bit的编译器,所以对于64bit的Python,需要下载并安装Windows Software Development Kit version 7.1。

现在你已经拥有了一个可运行的32bit或者64bit的MVS2010 IDE,可以用于商业和学术研究。

在Visual Studio 安装完毕后就可以开始安装CUDA了。我们建议安装CUDA 5.5,因为它支持MSVC2008。从CUDA archive上下载并安装32bit或者64bit的CUDA。

安装完CUDA后就可以卸载掉Visual Studio Express2010了。

最后,获取Microsoft Visual C++ Compiler for Python 2.7。它提供与Python 2.7兼容的老版本Visual Studio 2008编译器。安装时请遵循以下步骤:
1. 用管理员打开一个控制台窗口(打开开始菜单输入cmd,右键点击命令图标,选择以管理员身份运行
2. cd进下载目录执行msiexec /i VCForPython27.msi ALLUSERS=1

安装包会安装到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\stdint.h

GCC

需要安装GCC来编译Theano C代码。我们使用已经编译好的的TDM GCC,它使用32bit和64bit平台。在安装过程中的说明如下:
1. 安装到一个没有空间的目录(我们把它放到C:\SciSoft\TDM-GCC-64)。
2. 如果不希望修改PATH系统环境变量,则不要选中add to path复选框。
3. 选中openmp support option复选框打开对OpenMP的支持。

安装Python发行版

我们高度建议安装WinPython发行版本——它支持32bit和64bit操作系统,通过快速MKL BLAS安装上了链接还可以从Chris Gohlke上安装更多的免费包。

WinPython也运行轻便式安装,这种安装方法不用修改系统环境变量PATH。我们把它安装到c:\SciSoft\WinPython-64bit-2.7.9.4

可选择安装:学术用途安装EPD

如果在学校里工作,一个安装所有依赖包的简便方法是安装Enthought Python Distribution (EPD)。如果你是大学里面的人员(学生或者雇员),你可以免费下载安装。EPD的安装包括,Python(以及开发头),NumPy,SciPy,nose,sphinx,easy_install,pydot(但不是Graphviz),g++,以及blas的实现MKL。

如果你想用iPython shell,首先你需要导入NumPy:

C:\Users\user>ipython
[...]
In [1]: import numpy

如果你看到DLL加载失败的错误信息,那很可能是因为从脚本进入ipython的原因引起的。如果C:\SciSoft\Python27是EPD的安装目录,编辑C:\SciSoft\Python27\Scripts\ipython.bat,文件中应该会存在以下一行信息:

set path="C:\SciSoft\Python27";%path%

删除Python27周围的引号,如下所示:

set path=C:\SciSoft\Python27;%path%

然后,打开一个新的终端。
pip没有包含在EPD中,不过你可以简单地通过以下命令来安装:

easy_install pip

可选择安装:Canopy

Canopy是另一款安装Theano需要的所有依赖包软件,如果你是大学里面的人员(学生或者雇员),你可以免费下载安装。

  • 安装x64Canopy,以及更新值最新版本(help / Software updates…),如果老版本无法安装pip的时候。
  • 然后从Canopy包管理器中安装pip。
  • 在Windows命令行输入pip install theano。
  • 在 Canopy包管理器中所有和安装“mingw 4.5.2” and “libpython 1.2”两个包。
  • (仅Theano 0.6rc3或者早期版本才需要)“libpython 1.2” 包安装libpython27.a and libmsvcr90.a文件到C:\Users\\AppData\Local\Enthought\Canopy\User\libs。复制以上两个包到C:\Users\\AppData\Local\Enthought\Canopy\App\appdata\canopy-1.0.0.1160.win-x86_64libs
  • (仅Theano 0.6rc3或者早期版本才需要)设置Theano标志blas.ldflags=-LC:\Users\<USER>\AppData\Local\Enthought\Canopy\App\appdata\canopy-1.0.0.1160.win-x86_64\Scripts
    -lmk2_core -lmk2_intel_thread -lmk2_rt.

可选择安装: Anacomda

ContinuumIO提供一个免费的32bit和64bit的Windows版本的Python,它已经包含了Theano需要的所有依赖包。如果你为能成功下载EPD或者Canopy(通过商业或者免费授权),这是最简单的安装Thean依赖包的方法。仅仅需要从Anaconda下载页面下载并执行installer即可,接下来在windows命令行执行以下程序:

$ conda install mingw libpython

可选择安装: Python(x,y)

如果你没有EPD的商业授权和免费的学术授权,既没有安装Python也没有安装MinGW,可以通过Python(x,y)安装大多数Theano依赖包。它只有一个安装文件,但是包含了NumPy、SciPy、IPython、Matplotlib、MinGW、Nose等额外的依赖包。但是请注意,目前没有64bit的。在安装的过程中无须改变任何选项,安装路径中不能有空格。

可选择安装:手动安装

以下说明提供了Theano依赖包的手动安装步骤。注意,该方法可以让Theano以Cygwin一起工作而不是MinGW,但是没测试过。
- 对于32bit的MinGW:从the MinGW files上下载MinGW自动安装的最新版本(mingw-get-inst)并安装(除了Objective C和Ada编译器外,其它都可以安装)。
- 对于32bit的MinGW(64bit系统的手动安装已经测试过):从项目的release page下载MinGW-w64 的最新版本,解压到c:\mingw64。同时从这里下载MSYS(虽然它是32bit的,但是不影响使用)。加压MSYS到相同的目录c:\mingw64\msys。在MSYS shell中运行C:\mingw64\msys\msys.bat脚本:

>sh /postinstall/pi.sh

回答几个问题,然后MSYS就恰当地链接到你的MinGW安装。
- 建议设置MSYS主目录与Windows主目录相同。这样可以防止在命令行运行Theano与通过MSYS shell运行Theano命令会出现不一致的行为。在不设置全局的Windows HOME环境变量的条件下,一种设置的方法是编辑msys.bat文件(在C:\MinGW\msys\1.0或者C:\mingw64\msys可找到),第一行加入以下代码:

set HOME=%USERPROFILE%
- 如果你不安装以上方法操作,那么安装Python2.x的最新版本以及对应的NumPy和SciPy程序包(简单地使用可执行的安装文件即可)。注意,没有官方的NumPy和SciPy的64bit发行版,只有非官方版
- 确保Python安装目录和它的Scripts子目录已经加到系统环境变量中。可以通过修改全局PATH环境变量,也可以在MinGW主目录下创建.profile文件,写上一行代码export PATH=$PATH:/c/Python27:/c/Python27/Scripts(注意,仅当你通过MSYS shell运行Theano以上路径才有效)。
- 如果你安装64bit的版本,你需要以下破解能够通过GCC编译Theano文件(如果你使用32bit的版本可以跳过这一步)。复制python27.dll(C:\Windows\System32中)和python27.def到一个临时的工作目录。编辑python27.def文件把Py_InitModule4替换为Py_InitModule4_64。然后打开一个MSYS shell,进入以上临时目录,执行:

dlltool --dllname python27.dll --def python27.def --output-lib libpython27.a

最后复制 以上命令产生的libpython27.a文件到C:\Python27\libs文件夹。
- 执行Theano的test-suite需要nose。 解压它的源代码后,用一下命令编译

python setup.py install

配置Theano环境

到目前为止,你应该安装了所有Theano需要的依赖包。默认情况下,Python、GCC和Visual Studio还没有加入到PATH环境变量。保存以下shell脚本为c:\scisoft\env.bat,执行,设置以上环境变量:

REM configuration of paths
set VSFORPYTHON="C:\Program Files (x86)\Common Files\Microsoft\Visual C++ for Python\9.0"
set SCISOFT=%~dp0REM add tdm gcc stuff
set PATH=%SCISOFT%\TDM-GCC-64\bin;%SCISOFT%\TDM-GCC-64\x86_64-w64-mingw32\bin;%PATH%REM add winpython stuff
CALL %SCISOFT%\WinPython-64bit-2.7.9.4\scripts\env.batREM configure path for msvc compilers
REM for a 32 bit installation change this line to
REM CALL %VSFORPYTHON%\vcvarsall.bat
CALL %VSFORPYTHON%\vcvarsall.bat amd64REM return a shell
cmd.exe /k

以上脚本是在假设你已经安装了WinPython的基础上的。对于32bit的安装,请把指示行改为加载32bit的微软编译器。

通过双击c:\scisoft\env.bat文件,你可以进入Python shell。执行以上操作并且确保以下程序已经存在:

  1. where gcc
  2. where gendef
  3. where cl
  4. where nvcc

最后需要创建一个GCC的链接库。打开Python shell然后cd到 c:\SciSoft,执行

gendef WinPython-64bit-2.7.9.4\python-2.7.9.amd64\python27.dlldlltool --dllname python27.dll --def python27.def --output-lib WinPython-64bit-2.7.9.4\python-2.7.9.amd64\libs\libpython27.a

安装Theano

全部依赖包安装完毕后,你可以下载并安装Theano了。从长远来说,用git来安装是最好的,因为后期你可以简单地通过git pull来更新。当然了,不用git而手动安装也是可以的。

安装git

Theano托管在GitHub上,需要git来下载。对于windows来说,下载并安装MSYSGIT。打开Git shell并进入即将要安装Theano的目录。bleeding-edge版本执行

git clone https://github.com/Theano/Theano.git

最新的0.7稳定版本(2015年3月份)执行:

git clone https://github.com/Theano/Theano.git --branch rel-0.7

两种方法会创建一个Theano目录,并且下载了相关程序库。

手动安装

获取最新的bleeding-edge版本可以访问Theano on GitHub网站下载最新的zip包。然后解压到某目录。
你也可以从https://github.com/Theano/Theano/releases/tag/rel-0.7上检查并下载最新的发行版0.7zip。

配置Theano

一旦安装完Theano后,打开Python shell(如果你安全按照我们的教程来操作的话,脚本文件位于c:\scisoft\env.bat),cd到以上目录执行:

python setup.py develop

以上命令会把Theano路径添加到你地PYTHON_PATH环境变量中。

现在,你可以检查Theano是否能够将以下代码编译成C语言并且成功地执行了:

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: 1.480863[s], theano time: 1.475381[s] (times should be close when run on CPU!)
Result difference: 0.000000

以上结果是正确运行Theano后的输出,它的运行速度可以媲美NumPy的乘法(NumPy和Theano会调用BLAS程序库来运算矩阵乘法)。

配置Theano在GPU上运行

通过.theanorc文件可以配置Theano的各种行为(也可以是.theanorc.txt文件,这样在windows下就很容易创建)。以上文件会在%USERPROFILE%环境变量指向的目录中找到。请注意,WinPython会存放于WinPythonDir\settings目录中。

配置信息如下:

[global]
device = gpu
floatX = float32[nvcc]
flags = --use-local-env  --cl-version=2008

运行简单的测试文件并检查其运行状态。如果你的GPU速度够快,以上Theano函数应该会比在CPU上的NumPy矩阵相乘快得多。更多的测试代码和GPU提示请参考Using the GPU页面。

运行Theano的测试用例

一般情况下,由于windows操作系统内存分段的原因,当使用theano-nose的时候,以上测试用例会在某个时刻异常中断,其报错信息看起来像这样子:DLL load failed: Not enough storage is available to process this command。一种解决办法是运行以下命令:

theano-nose --batch

以上命令会以100个为一批,这样可以防止内错出错。注意,该脚本叫做nosetests,如果你手动安装Nose的话,需要在MSYS shell里运行以上命令。

注意
版本号小于等于0.5的Theano并未包含theano-nose。如果你恰好使用了以上版本的Theano,你可以运行以下命令:
python theano/tests/run_tests_in_batch.py

编译快速的BLAS

如果你通过WinPython或者EPD来安装Python的话,Theano会自动地链接到MKL程序库,因此你无需自己安装BLAS。

注意
以下说明还未在64bit windows下测试过。

如果想要一个快速的多线程BLAS程序库,你可以编译OpenBLAS(ATLAS也可以,但是没测试过,并且在windows上安装会遇到很多麻烦已经运行速度很慢)。可以从它的网站(我们测试过v0.2.6)上下载OpenBLAS的zip压缩包。编译它的时候,你需要MSYS和wget工具(安装步骤如下所示)。

如果你已经安装全部的MinGW组件,MSYS已经被包含在其中,直接调起MinGW shell即可。对于以上情况,你可以跳过接下来的MSYS安装步骤。注意,这些步骤已经写在Python(x,y)中,但是同样适用于像EPD这样的其它Python发行版(根据实际情况更改路径,例如,EPD7.3.2,MinGW路径为EPD7.3.2\EGG-INFO\mingw\usr\i686-w64-mingw32)。安装Python(x,y)里面的MSYS(在MinGW安装向导的顶部),可以查看以下步骤:
- 下载mingw-get命令行安装程序。
- 把它解压到python\mingw目录。
- 在命令行窗口中(cmd)安装MSYS
mingw-get install msys-base
如果mingw-get不能自动找到,进入解压目录(可以在bin子目录中找到)。
- 编辑pythonxy\mingw\msys\1.0\msys.bat文件,在第一行中加入以下命令set HOME=%USERPROFILE%。然后创建一个快捷方式方便以后的访问,在MSYS控制台中运行它:
/postinstall/pi.sh
它会询问你MinGW的安转目录(例如:c:/pythonxy/mingw;)

一旦你安装好MinGW/MSYS shell环境,继续进行下面操作:
1. 从wget 网页上下载并安装wget。注意,以上安装并没有把它加到系统PATH环境变量中,所以你得手动根据实际情况修改PATH环境变量(可以是Windows也可以是MinGW主目录的.profile启动文件)。然后在MingGW shell命令行中输入wget-version来验证其是否安转成功。注意,如果你的电脑设置了代理服务器,你需要设置HTTP_PROXY环境变量,或者使用客户自定义的wgetrc配置文件来让wget能够下载文件。
2. 在MinGW shell命令行中解压OpenBLAS,然后进入对应的目录。
3. 用以下命令变异OpenBLAS:
quickbuild.win32 1>log.txt 2>err.txt
(64位windows系统请使用quickbuild.win64)编译可能会花很长的时间,不妨趁机会休息一下。编译完成后,在OpenBLAS会存在libopenblas.dll文件,否则检查err.txt错误日志文件。
4. 确保libopenblas.dll在PATH环境变量指向的目录里。
5. 修改.theanoc(或者.theanorc.txt)文件,ldflags = -LX:\\YYY\\ZZZ -lopenblas,其中X:\\YYY\\ZZZ就是libopenblas.dll文件所在的文件夹。在python中,以上设置也可以修改来满足测试用途的。
6. 可以通过运行theano/misc/check_blas.py脚本来测试BLAS的表现能力。注意,你可以通过修改OPENBLAS_NUM_THREADS环境变量来控制OpenBLAS所用的线程数量(它默认用使用所有可用的内核)。下面给出OpenBLAS在Intel Core2 Duo 1.86GHz上运行的性能数据,作比较,同时给出在NumPy`s BLAS或者未优化的标准BLAS(手动地从它的源码编译的)上运行的性能数据。注意,我们给出的结果是使用OpenBLAS的最原始版本GotoBLAS2
- GotoBLAS2(2 threads):16s
- NumPy (1 thread):48s
- Standard BLAS (un-optimized, 1 thread): 166s

结论:
- 未优化的标准BLAS运行速度非常慢,不应该使用。
- 用ATLAS相关库编译出来的Windows版NumPy表现出惊人的快。
- 特别地如果你的处理器是多核的,GotoBLAS2会更快。

注意
如果你遇到 DLL load failed错误信息,一般情况下是由于在PATH环境变量中未找到所需要的DLL。如果你使用的是OpenBLAS,缺少的既有可能是 libopenblas.dll 也有可能是它的依赖包。如果是缺少依赖包,你>可以使用 Denpendency Walker 来找出具体缺少哪些包。

Installation of Theano on Windows相关推荐

  1. Windows 10 安装 NVIDIA cuDNN v7.6.0 for CUDA 10.1

    Windows 10 安装 NVIDIA cuDNN v7.6.0 for CUDA 10.1 NVIDIA 引领人工智能计算 - NVIDIA https://www.nvidia.cn/ NVID ...

  2. Windows 7 SDK Fails to Install with Return Code 5100 (GRMSDK_EN_DVD.iso)

    来源:http://support.microsoft.com/kb/2717426/de 不对全文做翻译了,总结一下: 原因:电脑上已经安装了新版本的Visual C++ 2010 Redistri ...

  3. 自己制作 Windows Server 2008中文版

          Windows Server 2008中文版迟迟不肯发布,这让等着用中文版升级Windows Server 2003的我很无奈,虽然可以先安装英文版,再安装多语言包,但这样未免麻烦,而且, ...

  4. ViSP安装之Windows系统基于VS2019编译器编译获得VISP动态库

    Windows系统基于VS2019编译器编译获得VISP动态库 官网地址: Installation from source for Windows with Visual C++ 2019 (vc1 ...

  5. 利用WDS实现零接触部署Windows 7 VHD

    Abner Kou原创,转载请注明出处 利用WDS实现零接触部署Windows 7 VHD 在Windows 7中包含了一项非常强大的功能--native boot,它允许系统从单一的VHD文件启动, ...

  6. 使用高级管理控制台获得对Windows Home Server的扩展访问

    Windows Home Server is easy to setup and use so anyone with basic computer knowledge can operate the ...

  7. 初学者计算机_初学者极客:如何在计算机上重新安装Windows

    初学者计算机 Reinstalling Windows is one of the easiest ways to fix software problems on your computer, wh ...

  8. windows下Call to undefined function curl_init() error问题

    本地项目中使用到curl_init()时出现Call to undefined function curl_init()的错误,去掉php.ini中的extension=php_curl.dll前的分 ...

  9. 安装Microsoft Windows SDK 7.1时出现的错误(附解决办法)

    From: http://blog.sina.com.cn/s/blog_617c05b001015baw.html 错误回放一: A problem occurred while installin ...

最新文章

  1. 《实施Cisco统一通信管理器(CIPT1)》一2.4 使用分布式呼叫处理的多站点WAN部署模型...
  2. puppet之service管理
  3. leetcode算法题--剪绳子
  4. 【NetApp】IO读写和WAFL的工作原理
  5. 2012年I / O之后
  6. error:Assertion failed ((unsigned)i0 (unsigned)size.p[0]) in cv::Mat::at
  7. java : jstack 显示虚拟机的线程快照
  8. 如果你正处于迷茫期,那就来做这份工作吧!
  9. 中one_Chair_One 一号椅
  10. mysql not in 的坑 -- null 值
  11. mysql uuid 索引_Mysql使用Java UUID作为唯一值时使用前缀索引测试
  12. verilog状态机以及编码详解
  13. 绿盾加密导致Visual Stdio无法使用
  14. 逃离996的年轻人却难逃租房的“坑”
  15. Axure RP 8 软件介绍
  16. 哈佛大学公开课《幸福课》笔记
  17. vivo手机怎么安装Android10,首批升级Android 10 Bate教程!vivo手机3步搞定
  18. Javascript 设计模式之外观模式【讲师辅导】-曾亮-专题视频课程
  19. 转:为什么谷歌越来越牛逼,而百度却...
  20. Linux常用命令——lsmod命令

热门文章

  1. 第三章 打造高性能的视频弹幕系统
  2. thinkajax入门------验证ThinkAjax.send 、ajaxReturn
  3. 这四个微信小技巧,职场人一定要学会
  4. LaTeX中的分式及被分式压缩的数学符号
  5. Android文件目录及文件访问权限等详解
  6. 网站访问全过程涉及的网络协议详解
  7. Fast Furious face detection with OpenCV
  8. Android 性能优化(62)---存检测、卡顿优化、耗电优化、APK瘦身——详解篇
  9. 杨澜:25岁后女孩子必需要懂14件事
  10. 如何用钢笔工具抠图ps教程ps学习