python - instalar - Instalación de theano en Windows 8 con GPU habilitada
install theano gpu (7)
Aquí hay una guía para instalar theano con CUDA en Windows de 64 bits.
Parece sencillo, pero en realidad no lo he probado para asegurarme de que funciona.
http://pavel.surmenok.com/2014/05/31/installing-theano-with-gpu-on-windows-64-bit/
Entiendo que el soporte de Theano para Windows 8.1 está en fase experimental solamente, 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 resolvería mi problema.
He instalado Python usando el sistema WinPython de 32 bits, usando MinGW como se describe aquí . Los contenidos de mi archivo .theanorc
son los siguientes:
[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 la 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
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 este último error, varias ventanas emergentes me preguntan cómo me gustaría abrir el archivo (.res) antes de lanzar un 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 los contenidos .theanorc
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 muestras CUDA se ejecutan sin problemas.
Siguiendo el tutorial de Matt, me encontré con problemas con nvcc. Necesitaba agregar la ruta a los ejecutables VS2010 en nvcc.profile (puede encontrarlo en la carpeta cuda bin):
"compiler-bindir = C:/Program Files (x86)/Microsoft Visual Studio 10.0/VC/bin/amd64"
En caso de que desee actualizar a MS Visual Studio 2012 y CUDA 7 en Windows 8.1 x64, consulte este tutorial aquí:
http://machinelearning.berlin/?p=383
Debería funcionar siempre y cuando te apegues a él exactamente. Todo lo mejor
cristiano
Estos son mis pasos simples para instalar theano en una máquina con Windows 10 de 64 bits. Se prueba en el código que se incluye aquí
(Toda la instalación está con la ruta de instalación predeterminada)
- instale la distribución anaconda python 3.x (ya incluye numpy, scipy, matlibplot, etc.)
- ejecuta ''conda install mingw libpython'' en la línea de comandos
- instale theano descargándolo del sitio web oficial y ejecute `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% USERPROFILE% path y aquí está el contenido en el archivo .theanorc.txt para ejecutar theano con GPU
[global]
floatX = float32
dispositivo = gpu
[nvcc]
fastmath = True
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
Pude compilar los archivos cu agregando las dependencias requeridas en el perfil nvcc ubicado en "C: / Archivos de programa / NVIDIA GPU Computing Toolkit / CUDA / v7.5 / bin / nvcc.profile"
Modifiqué la ruta include y lib y comenzó a funcionar.
INCLUYE + = "-I $ (SUPERIOR) / incluya" $ ( ESPACIO ) "-IC: / Archivos de programa (x86) / Microsoft Visual Studio 12.0 / VC / incluya" $ ( SPACE ) "-IC: / Archivos de programa (x86 ) / Microsoft SDKs / Windows / v7.1A / Include "$ ( SPACE ) LIBRARIES = + $ ( SPACE )" / LIBPATH: $ (ARRIBA) / lib / $ (_ WIN_PLATFORM_) "$ ( SPACE )" / LIBPATH: C: / Archivos de programa (x86) / Microsoft Visual Studio 12.0 / VC / lib / amd64 "$ ( SPACE )" / LIBPATH: C: / Archivos de programa (x86) / Microsoft SDKs / Windows / v7.1A / Lib / x64 "$ ( ESPACIO
He hecho una documentación completa de la instalación, espero que ayude https://planetanacreon.wordpress.com/2015/10/09/install-theano-on-windows-8-1-with-visual-studio-2013-cuda -7-5 /
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 la programación. En mi caso, veo 5-6x aceleraciones de mis secuencias de comandos cuando se ejecuta en una GPU por lo que definitivamente valió la pena la molestia.
Escribí esta guía en función de mi procedimiento de instalación y está destinado a ser detallado y, con suerte, completo, incluso para personas sin conocimientos previos sobre la creación de programas en entornos Windows. La mayor parte de esta guía se basa en estas instrucciones, pero tuve que cambiar algunos de los pasos para que funcione en mi sistema. Si hay algo que hago que puede no ser óptimo o que no funciona en su máquina, hágamelo saber y trataré de modificar esta guía en consecuencia.
Estos son los pasos (en orden) que seguí al instalar Theano con la 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 portátil de 64 bits para mi portátil NVIDIA Optimus con Geforce 750m.
Verifique que su instalación fue exitosa al iniciar deviceQuery
desde la línea de comandos. En mi caso, esto se encuentra en la siguiente carpeta: C:/ProgramData/NVIDIA Corporation/CUDA Samples/v6.5/bin/win64/Release
. Si tiene éxito, debería ver PASS al final de la prueba.
Instalación de Visual Studio 2010
Instalé esto a través de Dreampark . Si eres un estudiante, tienes derecho a una versión gratuita. De lo contrario, aún puede instalar la versión Express que debería funcionar igual de bien. Una vez completada la instalación, debe poder llamar a Visual Studio Command Prompt 2010 desde el menú de inicio.
Instalación de Python
En el momento de escribir, Theano en GPU solo permite trabajar con flotadores 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 fácil 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 obtiene algunas herramientas IDE útiles, como ipython notebook y Spyder instaladas de forma gratuita. Para facilitar el uso, es posible que desee agregar la ruta a su python.exe y la ruta a su carpeta de Scripts en las variables de entorno .
Instalación de Git
Encontrado aquí .
Instalación de MinGW
El archivo de instalación está aquí . Revisé todos los archivos de instalación base durante el proceso de instalación. Esto es necesario si se encuentra con el error g ++ que se describe a continuación.
Instalación de Cygwin
Puedes encontrarlo aquí . Básicamente, utilicé esta utilidad solo 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).
Disolución de Python distutils
Abra msvc9compiler.py
ubicado en su directorio /lib/distutils/
de su 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 y vaya a 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 el tarball y ejecute python configure.py
Abra el ./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 de VS2010:
set VS90COMNTOOLS=%VS100COMNTOOLS%
python setup.py build
python setup.py install
Crea este archivo python y verifica que obtienes 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 el shell git bash y elija una carpeta en la que desee colocar los archivos de instalación de Theano y ejecutar:
git clone git://github.com/Theano/Theano.git
python setup.py install
Intente abrir python en el símbolo del sistema import theano
y ejecute import theano
Si obtiene 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!), .theanorc.txt
nombre .theanorc.txt
y .theanorc.txt
en C:/Users/Your_Name/
o donde se encuentre su carpeta de usuarios:
#!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 python de prueba 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 obtuviste Used the gpu
al final y ¡listo!
Usé esta guía , y fue bastante útil. Lo que muchas de las guías de Windows Theano solo mencionan de pasada (o no lo hacen en absoluto) es que necesitarás compilar theano desde mingw shell, no desde tu IDE.
Ejecuté mingw-w64.bat, y de allí "python" e "import theano". Solo después de eso, importarlo de pycharm funciona.
Además, las instrucciones oficiales en deeplearning.net son malas porque te dicen que uses CUDA 5.5, pero no funcionará con tarjetas de video más nuevas.
Los comentarios también son bastante útiles. Si se queja de que faltan crtdefs.h o basetsd.h, haz lo que dice la respuesta de Sunando. Si DESPUÉS de eso, todavía se queja de que el identificador "Iunknown" no está definido en objbase.h, pegue lo siguiente en el archivo C: / Archivos de programa (x86) / Microsoft SDKs / Windows / v7.1A / Include / objbase.h, en la línea 236 :
#include <wtypes.h>
#include <unknwn.h>
Tuve que hacer esta última parte para que funcione con la instalación de vanguardia (necesaria para partes de Keras).
También escribí una lista de cosas que funcionaron para mí, aquí: http://acoupleofrobots.com/everything/?p=2238 Esto es para la versión de 64 bits.