在 Windows 8 上导入 theano (0.6) with device= gpu (and visual studios 12.0)

import theano (0.6) on Windows 8 with device= gpu (and visual studios 12.0)

当我尝试将 Theano 与 GPU 设备一起使用时遇到编译问题(它在 CPU 上运行良好)。我遇到的问题与已经报告的 here 几乎完全相同,但是遵循提供的解决方案对我不起作用。按照原来的方案,我已经可以验证pycuda已经安装成功,但是导入theano还是报同样的错误:

c:\python\python27\include\pymath.h(22): warning: dllexport/dllimport conflict with "round"
c:\program files\nvidia gpu computing toolkit\cuda\v6.5\include\math_functions.h(2455): here; dllimport/dllexport dropped

mod.cu(954): warning: statement is unreachable
mod.cu(1114): error: namespace "std" has no member "min"

... *lots more of the same error at different lines* ...

mod.cu(4604): error: namespace "std" has no member "min"

31 errors detected in the compilation of "C:/Users/Zehan/AppData/Local/Temp/tmpxft_0000317c_00000000-10_mod.cpp1.ii".
ERROR (theano.sandbox.cuda): Failed to compile cuda_ndarray.cu: ('nvcc return status', 2, 'for cmd', 'nvcc -shared -g -O3 --compiler-bindir C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin -Xlinker /DEBUG -m32 -Xcompiler -LC:\Python\Python27\libs,-DCUDA_NDARRAY_CUH=d67f7c8a21306c67152a70a88a837011,/Zi,/MD -IC:\Python\Python27\lib\site-packages\theano\sandbox\cuda -IC:\Python\Python27\lib\site-packages\numpy\core\include -IC:\Python\Python27\include -o C:\Users\Zehan\AppData\Local\Theano\compiledir_Windows-8-6.2.9200-Intel64_Family_6_Model_60_Stepping_3_GenuineIntel-2.7.8-32\cuda_ndarray\cuda_ndarray.pyd mod.cu -LC:\Python\Python27\libs -LNone\lib -LNone\lib64 -LC:\Python\Python27 -lpython27 -lcublas -lcudart')

我有 Python 2.7.8 32 位和 MinGW 设置以及 CUDA 6.5。我正在使用以下 .theanorc 配置:

[global]
device = gpu
floatX = float32

[nvcc]
compiler_bindir=C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin

为了使 pycuda 示例正常工作,我必须将 visual studio 12.0 C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin 添加到我的用户路径中。由于某种原因,它不适用于 visual studios 10.0,尽管使用 visual studio 10 命令提示符构建 pycuda。

顺便说一句,如果我尝试 compiler_bindir=C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin,我会收到一条错误消息,指出 visual studio 的版本不好:

nvcc fatal: nvcc cannot find a supported version of Microsoft Visual Studio. Only the versions 2010, 2012, and 2013 are supported

(我安装了 visual studio express 2010 和 2013)

据我所知,Theano+GPU 对 Windows 的支持仍处于试验阶段,但似乎对某些人来说确实有效。关于接下来的尝试有什么建议吗?

我找到了一些技巧来修复它 here

本质上它需要在 <install-dir>/andbox\cuda 中找到 cuda_ndarray.cuh 文件并添加 #include <algorithm>.

它仍然留下警告warning C4273: 'round' : inconsistent dll linkage

根据 this reported issue,这是由于 Python 和 CUDA 之间存在冲突,两者都提供 round 功能。这也许可以通过在与 CUDA 链接时定义宏 HAVE_ROUND 来告诉 Python 不要尝试重新定义 round.

来解决。

不确定这是否是适用于所有人的一般修复,但似乎对我有用 - 就使我能够将 GPU 与 theano 一起使用而言。