Instalación de theano en Windows 8 con GPU habilitada
Entiendo que el soporte de Theano para Windows 8.1 se encuentra solo en una etapa experimental, pero me pregunto si alguien tuvo suerte al resolver mis problemas. Dependiendo de mi configuración, obtengo tres tipos distintos de errores. Supongo que la resolución de cualquiera de mis errores solucionaría mi problema.
Instalé Python usando el sistema WinPython de 32 bits, usando MinGW como se describe aquí . El contenido de mi .theanorc
archivo es el siguiente:
[global]
openmp=False
device = gpu
[nvcc]
flags=-LC:\TheanoPython\python-2.7.6\libs
compiler_bindir=C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\
[blas]
ldflags =
Cuando ejecuto import theano
el error es el siguiente:
nvcc fatal : nvcc cannot find a supported version of Microsoft Visual Studio.
Only the versions 2010, 2012, and 2013 are supported
['nvcc', '-shared', '-g', '-O3', '--compiler-bindir', 'C:\\Program Files (x86)\\
Microsoft Visual Studio 10.0\\VC\\bin# flags=-m32 # we have this hard coded for
now', '-Xlinker', '/DEBUG', '-m32', '-Xcompiler', '-DCUDA_NDARRAY_CUH=d67f7c8a21
306c67152a70a88a837011,/Zi,/MD', '-IC:\\TheanoPython\\python-2.7.6\\lib\\site-pa
ckages\\theano\\sandbox\\cuda', '-IC:\\TheanoPython\\python-2.7.6\\lib\\site-pac
kages\\numpy\\core\\include', '-IC:\\TheanoPython\\python-2.7.6\\include', '-o',
'C:\\Users\\Matej\\AppData\\Local\\Theano\\compiledir_Windows-8-6.2.9200-Intel6
4_Family_6_Model_60_Stepping_3_GenuineIntel-2.7.6-32\\cuda_ndarray\\cuda_ndarray
.pyd', 'mod.cu', '-LC:\\TheanoPython\\python-2.7.6\\libs', '-LNone\\lib', '-LNon
e\\lib64', '-LC:\\TheanoPython\\python-2.7.6', '-lpython27', '-lcublas', '-lcuda
rt']
ERROR (theano.sandbox.cuda): Failed to compile cuda_ndarray.cu: ('nvcc return st
atus', 1, 'for cmd', 'nvcc -shared -g -O3 --compiler-bindir C:\\Program Files (x
86)\\Microsoft Visual Studio 10.0\\VC\\bin# flags=-m32 # we have this hard coded
for now -Xlinker /DEBUG -m32 -Xcompiler -DCUDA_NDARRAY_CUH=d67f7c8a21306c67152a
70a88a837011,/Zi,/MD -IC:\\TheanoPython\\python-2.7.6\\lib\\site-packages\\thean
o\\sandbox\\cuda -IC:\\TheanoPython\\python-2.7.6\\lib\\site-packages\\numpy\\co
re\\include -IC:\\TheanoPython\\python-2.7.6\\include -o C:\\Users\\Matej\\AppDa
ta\\Local\\Theano\\compiledir_Windows-8-6.2.9200-Intel64_Family_6_Model_60_Stepp
ing_3_GenuineIntel-2.7.6-32\\cuda_ndarray\\cuda_ndarray.pyd mod.cu -LC:\\TheanoP
ython\\python-2.7.6\\libs -LNone\\lib -LNone\\lib64 -LC:\\TheanoPython\\python-2
.7.6 -lpython27 -lcublas -lcudart')
WARNING (theano.sandbox.cuda): CUDA is installed, but device gpu is not availabl
e
También lo probé usando Visual Studio 12.0
el que está instalado en mi sistema con el siguiente error:
mod.cu
nvlink fatal : Could not open input file 'C:/Users/Matej/AppData/Local/Temp/tm
pxft_00001b70_00000000-28_mod.obj'
['nvcc', '-shared', '-g', '-O3', '--compiler-bindir', 'C:\\Program Files (x86)\\
Microsoft Visual Studio 12.0\\VC\\bin\\', '-Xlinker', '/DEBUG', '-m32', '-Xcompi
ler', '-LC:\\TheanoPython\\python-2.7.6\\libs,-DCUDA_NDARRAY_CUH=d67f7c8a21306c6
7152a70a88a837011,/Zi,/MD', '-IC:\\TheanoPython\\python-2.7.6\\lib\\site-package
s\\theano\\sandbox\\cuda', '-IC:\\TheanoPython\\python-2.7.6\\lib\\site-packages
\\numpy\\core\\include', '-IC:\\TheanoPython\\python-2.7.6\\include', '-o', 'C:\
\Users\\Matej\\AppData\\Local\\Theano\\compiledir_Windows-8-6.2.9200-Intel64_Fam
ily_6_Model_60_Stepping_3_GenuineIntel-2.7.6-32\\cuda_ndarray\\cuda_ndarray.pyd'
, 'mod.cu', '-LC:\\TheanoPython\\python-2.7.6\\libs', '-LNone\\lib', '-LNone\\li
b64', '-LC:\\TheanoPython\\python-2.7.6', '-lpython27', '-lcublas', '-lcudart']
ERROR (theano.sandbox.cuda): Failed to compile cuda_ndarray.cu: ('nvcc return st
atus', 1, 'for cmd', 'nvcc -shared -g -O3 --compiler-bindir C:\\Program Files (x
86)\\Microsoft Visual Studio 12.0\\VC\\bin\\ -Xlinker /DEBUG -m32 -Xcompiler -LC
:\\TheanoPython\\python-2.7.6\\libs,-DCUDA_NDARRAY_CUH=d67f7c8a21306c67152a70a88
a837011,/Zi,/MD -IC:\\TheanoPython\\python-2.7.6\\lib\\site-packages\\theano\\sa
ndbox\\cuda -IC:\\TheanoPython\\python-2.7.6\\lib\\site-packages\\numpy\\core\\i
nclude -IC:\\TheanoPython\\python-2.7.6\\include -o C:\\Users\\Matej\\AppData\\L
ocal\\Theano\\compiledir_Windows-8-6.2.9200-Intel64_Family_6_Model_60_Stepping_3
_GenuineIntel-2.7.6-32\\cuda_ndarray\\cuda_ndarray.pyd mod.cu -LC:\\TheanoPython
\\python-2.7.6\\libs -LNone\\lib -LNone\\lib64 -LC:\\TheanoPython\\python-2.7.6
-lpython27 -lcublas -lcudart')
WARNING (theano.sandbox.cuda): CUDA is installed, but device gpu is not availabl
e
En el último error, varias ventanas emergentes me preguntan cómo me gustaría abrir el archivo (.res) antes de que se produzca el error.
cl.exe
está presente en ambas carpetas (es decir, VS 2010 y VS 2013).
Finalmente, si configuro VS 2013 en la ruta del entorno y configuro .theanorc
el contenido de la siguiente manera:
[global]
base_compiledir=C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin
openmp=False
floatX = float32
device = gpu
[nvcc]
flags=-LC:\TheanoPython\python-2.7.6\libs
compiler_bindir=C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\
[blas]
ldflags =
Obtuve el siguiente error:
c:\theanopython\python-2.7.6\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"
mod.cu(1145): error: namespace "std" has no member "min"
mod.cu(1173): error: namespace "std" has no member "min"
mod.cu(1174): error: namespace "std" has no member "min"
mod.cu(1317): error: namespace "std" has no member "min"
mod.cu(1318): error: namespace "std" has no member "min"
mod.cu(1442): error: namespace "std" has no member "min"
mod.cu(1443): error: namespace "std" has no member "min"
mod.cu(1742): error: namespace "std" has no member "min"
mod.cu(1777): error: namespace "std" has no member "min"
mod.cu(1781): error: namespace "std" has no member "min"
mod.cu(1814): error: namespace "std" has no member "min"
mod.cu(1821): error: namespace "std" has no member "min"
mod.cu(1853): error: namespace "std" has no member "min"
mod.cu(1861): error: namespace "std" has no member "min"
mod.cu(1898): error: namespace "std" has no member "min"
mod.cu(1905): error: namespace "std" has no member "min"
mod.cu(1946): error: namespace "std" has no member "min"
mod.cu(1960): error: namespace "std" has no member "min"
mod.cu(3750): error: namespace "std" has no member "min"
mod.cu(3752): error: namespace "std" has no member "min"
mod.cu(3784): error: namespace "std" has no member "min"
mod.cu(3786): error: namespace "std" has no member "min"
mod.cu(3789): error: namespace "std" has no member "min"
mod.cu(3791): error: namespace "std" has no member "min"
mod.cu(3794): error: namespace "std" has no member "min"
mod.cu(3795): error: namespace "std" has no member "min"
mod.cu(3836): error: namespace "std" has no member "min"
mod.cu(3838): error: namespace "std" has no member "min"
mod.cu(4602): error: namespace "std" has no member "min"
mod.cu(4604): error: namespace "std" has no member "min"
31 errors detected in the compilation of "C:/Users/Matej/AppData/Local/Temp/tmpxft_00001d84_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 -Xlinker /DEBUG -m32 -Xcompiler -DCUDA_NDARRAY_CUH=d67f7c8a21306c67152a70a88a837011,/Zi,/MD -IC:\\TheanoPython\\python-2.7.6\\lib\\site-packages\\theano\\sandbox\\cuda -IC:\\TheanoPython\\python-2.7.6\\lib\\site-packages\\numpy\\core\\include -IC:\\TheanoPython\\python-2.7.6\\include -o C:\\Users\\Matej\\AppData\\Local\\Theano\\compiledir_Windows-8-6.2.9200-Intel64_Family_6_Model_60_Stepping_3_GenuineIntel-2.7.6-32\\cuda_ndarray\\cuda_ndarray.pyd mod.cu -LC:\\TheanoPython\\python-2.7.6\\libs -LNone\\lib -LNone\\lib64 -LC:\\TheanoPython\\python-2.7.6 -lpython27 -lcublas -lcudart')
ERROR:theano.sandbox.cuda:Failed to compile cuda_ndarray.cu: ('nvcc return status', 2, 'for cmd', 'nvcc -shared -g -O3 -Xlinker /DEBUG -m32 -Xcompiler -DCUDA_NDARRAY_CUH=d67f7c8a21306c67152a70a88a837011,/Zi,/MD -IC:\\TheanoPython\\python-2.7.6\\lib\\site-packages\\theano\\sandbox\\cuda -IC:\\TheanoPython\\python-2.7.6\\lib\\site-packages\\numpy\\core\\include -IC:\\TheanoPython\\python-2.7.6\\include -o C:\\Users\\Matej\\AppData\\Local\\Theano\\compiledir_Windows-8-6.2.9200-Intel64_Family_6_Model_60_Stepping_3_GenuineIntel-2.7.6-32\\cuda_ndarray\\cuda_ndarray.pyd mod.cu -LC:\\TheanoPython\\python-2.7.6\\libs -LNone\\lib -LNone\\lib64 -LC:\\TheanoPython\\python-2.7.6 -lpython27 -lcublas -lcudart')
mod.cu
['nvcc', '-shared', '-g', '-O3', '-Xlinker', '/DEBUG', '-m32', '-Xcompiler', '-DCUDA_NDARRAY_CUH=d67f7c8a21306c67152a70a88a837011,/Zi,/MD', '-IC:\\TheanoPython\\python-2.7.6\\lib\\site-packages\\theano\\sandbox\\cuda', '-IC:\\TheanoPython\\python-2.7.6\\lib\\site-packages\\numpy\\core\\include', '-IC:\\TheanoPython\\python-2.7.6\\include', '-o', 'C:\\Users\\Matej\\AppData\\Local\\Theano\\compiledir_Windows-8-6.2.9200-Intel64_Family_6_Model_60_Stepping_3_GenuineIntel-2.7.6-32\\cuda_ndarray\\cuda_ndarray.pyd', 'mod.cu', '-LC:\\TheanoPython\\python-2.7.6\\libs', '-LNone\\lib', '-LNone\\lib64', '-LC:\\TheanoPython\\python-2.7.6', '-lpython27', '-lcublas', '-lcudart']
Si ejecuto import theano
sin la opción GPU activada, se ejecuta sin problemas. También las muestras CUDA se ejecutan sin problemas.
Theano es una gran herramienta para aplicaciones de aprendizaje automático, pero descubrí que su instalación en Windows no es trivial, especialmente para principiantes (como yo) en programación. En mi caso, veo aceleraciones de 5 a 6 veces en mis scripts cuando los ejecuto en una GPU, por lo que definitivamente valió la pena.
Escribí esta guía basándome en mi procedimiento de instalación y está destinada a ser detallada y, con suerte, completa incluso para personas sin conocimientos previos sobre la creación de programas en el entorno de Windows. La mayor parte de esta guía se basa en estas instrucciones , pero tuve que cambiar algunos de los pasos para que funcionara en mi sistema. Si hay algo que hago que puede no ser óptimo o que no funciona en su máquina, hágamelo saber e intentaré modificar esta guía en consecuencia.
Estos son los pasos (en orden) que seguí al instalar Theano con GPU habilitada en mi máquina con Windows 8.1:
Instalación de CUDA
CUDA se puede descargar desde aquí . En mi caso, elegí la versión Notebook de 64 bits para mi portátil NVIDIA Optimus con Geforce 750m.
Verifique que su instalación se haya realizado correctamente iniciando deviceQuery
desde la línea de comando. En mi caso esto estaba ubicado en la siguiente carpeta: C:\ProgramData\NVIDIA Corporation\CUDA Samples\v6.5\bin\win64\Release
. Si tiene éxito, debería ver PASA al final de la prueba.
Instalación de Visual Studio 2010
Instalé esto a través de Dreamspark . Si eres estudiante tienes derecho a una versión gratuita. De lo contrario, aún puedes instalar la versión Express , que debería funcionar igual de bien. Una vez completada la instalación, debería poder llamar al símbolo del sistema de Visual Studio 2010 desde el menú de inicio.
Instalación de Python
Al momento de escribir este artículo, Theano en GPU solo permite trabajar con flotantes de 32 bits y está diseñado principalmente para la versión 2.7 de Python. Theano requiere la mayoría de las bibliotecas científicas básicas de Python, como scipy
y numpy
. Descubrí que la forma más sencilla de instalarlos era a través de WinPython . Instala todas las dependencias en una carpeta independiente que permite una fácil reinstalación si algo sale mal en el proceso de instalación y también obtienes algunas herramientas IDE útiles, como ipython notebook y Spyder, instaladas de forma gratuita. Para facilitar su uso, es posible que desee agregar la ruta a su python.exe y la ruta a su carpeta Scripts en las variables de entorno .
instalación de git
Encontrado aquí .
Instalación MinGW
El archivo de instalación está aquí . Revisé todos los archivos de instalación básicos durante el proceso de instalación. Esto es necesario si se encuentra con el error de g++ que se describe a continuación.
instalación de cygwin
Lo puedes encontrar aquí . Básicamente utilicé esta utilidad sólo para extraer el archivo tar PyCUDA que ya se proporciona en la instalación base (por lo que la instalación debería ser sencilla).
Solución de distutils de Python
Open msvc9compiler.py
ubicado en su /lib/distutils/
directorio de instalación de Python. La línea 641 en mi caso dice: ld_args.append ('/IMPLIB:' + implib_file)
. Agregue lo siguiente después de esta línea (misma sangría):
ld_args.append('/MANIFEST')
Instalación de PyCUDA
La fuente de PyCUDA está aquí .
Pasos:
Abra cygwin, navegue hasta la carpeta PyCUDA (es decir, /cygdrive/c/etc/etc
) y ejecute tar -xzf pycuda-2012.1.tar.gz
.
Abra el símbolo del sistema de Visual Studio 2010 y navegue hasta el directorio donde se extrajo y ejecutó el archivo tarball.python configure.py
Abra ./siteconf.py y cambie los valores para que se lea (para CUDA 6.5, por ejemplo):
BOOST_INC_DIR = []
BOOST_LIB_DIR = []
BOOST_COMPILER = 'gcc43'
USE_SHIPPED_BOOST = True
BOOST_PYTHON_LIBNAME = ['boost_python']
BOOST_THREAD_LIBNAME = ['boost_thread']
CUDA_TRACE = False
CUDA_ROOT = 'C:\\Program Files\\NVIDIA GPU Computing Toolkit\\CUDA\\v6.5'
CUDA_ENABLE_GL = False
CUDA_ENABLE_CURAND = True
CUDADRV_LIB_DIR = ['${CUDA_ROOT}/lib/Win32']
CUDADRV_LIBNAME = ['cuda']
CUDART_LIB_DIR = ['${CUDA_ROOT}/lib/Win32']
CUDART_LIBNAME = ['cudart']
CURAND_LIB_DIR = ['${CUDA_ROOT}/lib/Win32']
CURAND_LIBNAME = ['curand']
CXXFLAGS = ['/EHsc']
LDFLAGS = ['/FORCE']
Ejecute los siguientes comandos en el símbolo del sistema VS2010:
set VS90COMNTOOLS=%VS100COMNTOOLS%
python setup.py build
python setup.py install
Cree este archivo Python y verifique que obtenga un resultado:
# from: http://documen.tician.de/pycuda/tutorial.html
import pycuda.gpuarray as gpuarray
import pycuda.driver as cuda
import pycuda.autoinit
import numpy
a_gpu = gpuarray.to_gpu(numpy.random.randn(4,4).astype(numpy.float32))
a_doubled = (2*a_gpu).get()
print a_doubled
print a_gpu
Instalar Theano
Abra git bash shell y elija una carpeta en la que desee colocar los archivos de instalación de Theano y ejecute:
git clone git://github.com/Theano/Theano.git
python setup.py install
Intente abrir Python en el símbolo del sistema VS2010 y ejecuteimport theano
Si recibe un error relacionado con g++, abra MinGW msys.bat en mi caso instalado aquí: C:\MinGW\msys\1.0
e intente importar theano en el shell MinGW. Luego, vuelva a intentar importar theano desde el símbolo del sistema VS2010 y debería estar funcionando ahora.
Cree un archivo en WordPad (¡NO en el Bloc de notas!), asígnele un nombre .theanorc.txt
y colóquelo en C:\Users\Your_Name\
la carpeta de usuarios o donde se encuentre:
#!sh
[global]
device = gpu
floatX = float32
[nvcc]
compiler_bindir=C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin
# flags=-m32 # we have this hard coded for now
[blas]
ldflags =
# ldflags = -lopenblas # placeholder for openblas support
Cree un script de prueba en Python y ejecútelo:
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 xrange(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'
Verifica que llegaste Used the gpu
al final y ¡listo!
Estos son mis sencillos pasos para instalar theano en una máquina con Windows 10 de 64 bits. Está probado en el código que figura aquí.
(Todas las instalaciones tienen la ruta de instalación predeterminada)
- instale la distribución anaconda python 3.x (ya incluye numpy, scipy, matlibplot, etc.)
- ejecute 'conda install mingw libpython' en la línea de comandos
- Instale theano descargándolo del sitio web oficial y haga `python setup.py install'
- Instale el último kit de herramientas CUDA para Windows 10 de 64 bits (ahora es 7.5)
- instalar visual studio 2013 (gratis para windows 10)
- cree el archivo .theanorc.txt en la ruta %USERPROFILE% y aquí está el contenido del archivo .theanorc.txt para ejecutar theano con GPU
[global]
flotadorX = flotador32
dispositivo = GPU
[nvcc]
matemáticas rápidas = Verdadero
compiler_bindir=C:\Archivos de programa (x86)\Microsoft Visual Studio 12.0\VC\bin\cl.exe
[cuda]
C:\Archivos de programa\NVIDIA GPU Computing Toolkit\CUDA\v7.5