关于 Theano 的安装,这里其实有一份比较详细的 Wiki 了。但是在使用 GPU 的时候,不出所料,又遇到坑了。

CNMeM is disabled, CuDNN not available.

AttributeError: ‘module’ object has no attribute ‘tests’

ERROR (theano.sandbox.cuda): ERROR: Not using GPU. Initialisation of device 0 failed: initCnmem: cnmemInit call failed! Reason=CNMEM_STATUS_OUT_OF_MEMORY.

环境说明

  1. OS Platform: Windows 10 Pro Insider Preview, Build 14971;
  2. System Type: 64 bit, x64 based processor;
  3. Display Adapters: NVIDIA GeForce GTX TITAN X;
  4. Python: 2.7.12, 64 bit;
  5. Python IDE: Sublime Text 3, Build 3126;
  6. Microsoft Visual Studio: 11.0.

准备工作

MinGW 配置

MinGW, a contraction of “Minimalist GNU for Windows”, is a minimalist development environment for native Microsoft Windows applications.

安装 Theano 的时候会用到 MinGW, 同时为了避免后续产生编译错误,MinGW 不仅仅是 C / C++ 编译器,而是一套 GNU 工具集合。除了 GCC (GNU 编译器集合),MinGW 还包含有一些其他的 GNU 程序开发工具,安装和配置 MinGW 可以参考这篇博文。我的 MinGW 安装在 C:\MinGW, 下文会用到。

如果之前已经安装 MinGW, 可能需要更新 gcc / g++. 打开 cmd, 依次输入如下命令

1
2
3
> mingw-get update
> mingw-get upgrade gcc
> mingw-get upgrade g++

Python 安装

两种选择:

  1. 单独安装

    • 安装 Python 比较简单,直接到官网下载,然后一路 Next 就行;
    • 安装 Python 包管理工具 pip;
    • 安装必要的 Python 第三方库,例如 scipy, numpy, pycuda 等,推荐到这里下载相应的库,然后定位到存放下载的库的位置,打开 cmd, 用下述命令安装下载的库

      1
      > pip install <package-name>
  2. 安装 Python 其他发行版(强烈推荐)。如果你之前没有接触过 Python,比较推荐安装其他 Python 的发行版,例如 Anaconda, 类似的发行版可以让你免去 Python 包管理和环境管理的烦恼。作为 Python 的一个发行版,Anaconda 打包了很多 Python 第三方库,支持 virtualenv, pyenv 等虚拟工作环境。

Theano 安装和配置

Theano 基础版安装

由于我没有使用 Anaconda, 而是使用单独安装的 Python, 因此需要使用 pip 来安装 Theano,在 cmd 输入命令

1
> pip install theano

Theano 开发版安装

后面在调试的时候遇到某些奇怪的坑,将 Theano 升级到开发版可以解决。有相关的 issue 和问题讨论,直接安装或者更新基础版到开发版的命令如下

1
> pip install --upgrade --no-deps git+git://github.com/Theano/Theano.git

Theano 配置

在系统用户根目录,例如 C:\Users\<UserName> 下创建一个名为 .theanorc 或者 .theanorc.txt 的文件,编辑其内容为

1
2
3
4
5
6
7
[blas]
ldflags =
# ldflags = -lopenblas # placeholder for openblas support
[gcc]
cxxflags = -IC:\MinGW
### 路径不要填错,否则会被坑

在 Theano 中使用 GPU

CUDA 安装

官网下载相应平台上的 CUDA 并安装,我安装的是 CUDA 7.5 64 bit for Windows 10.

Microsoft Visual Studio 安装

官网下载并安装,下面会用到。我安装的是 Visual Studio 2012 64 bit 版本,位置默认是 C:\Program Files (x86)\Microsoft Visual Studio 11.0

Theano 中的 GPU 配置

在上文提到的文件 .theanorc 或者 .theanorc.txt 中追加如下内容

1
2
3
4
5
6
7
8
9
[nvcc]
fastmath = True
flags = -LC:\Python27\libs
compiler_bindir = C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin
[global]
device = gpu0
floatX = float32
optimizer = fast_run

测试 & 填坑

打开 cmd, 进入 Python 环境,输入

1
>>> import theano

输出

1
Using gpu device 0: GeForce GTX TITAN X (CNMeM is disabled, CuDNN not available)
  1. 在 Theano 配置文件中追加

    1
    2
    [lib]
    cnmem = 1.0
  2. 配置 CuDNN

    官网注册并下载与 CUDA 版本匹配的 cuDNN 的压缩包,解压之后,将 bin 目录添加到系统环境变量 PATH 中,将 libinclude 目录中的文件分别复制到 CUDA 安装目录的对应 libinclude 目录中,我的目录是 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.5

重新打开 cmd, 进入 Python 环境,再次运行

1
>>> import theano

可能有类似提示

1
2
ERROR (theano.sandbox.cuda): ERROR: Not using GPU. Initialisation of device 0 failed:
initCnmem: cnmemInit call failed! Reason=CNMEM\_STATUS\_OUT\_OF\_MEMORY.

这时候,将配置文件中的 cnmem = 1.0 值调小一些即可。

后面再测试,遇到类似提示

1
AttributeError: 'module' object has no attribute 'tests'

这个时候,根据提示用 pip 安装缺少的模块,或者更新一下 Theano 通常可以解决。

最后输出如下

配置成功后的 Theano 测试输出

后记

没想到调个 GPU 还能搞出这么多事来,感觉深度学习结合 GPU 编程相关的配置还是很原始啊,给无脑调库增加了一些难度。

Lucille is THIRSTY

Lucille is THIRSTY

不好意思,走错片场。

好了,TITAN X 已经饥渴难耐 (ง •_•)ง

工作中的 TITAN X

参考资料

  1. Theano Windows Installation
  2. Theano 中文安装指南