Je comprends que le support Theano pour Windows 8.1 n’est qu’au stade expérimental, mais je me demande si quelqu'un a eu de la chance de résoudre mes problèmes. En fonction de ma configuration, je reçois trois types d’erreurs distincts. Je suppose que la résolution de mes erreurs résoudrait mon problème.
J'ai installé Python en utilisant le système WinPython 32 bits, en utilisant MinGW comme décrit ici . Le contenu de mon fichier .theanorc
est le suivant:
[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 =
Lorsque je lance import theano
, l'erreur est la suivante:
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
Je l'ai également testé en utilisant Visual Studio 12.0
qui est installé sur mon système avec l'erreur suivante:
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
Dans cette dernière erreur, plusieurs fenêtres contextuelles me demandent comment je voudrais ouvrir le fichier (.res) avant que l'erreur ne soit générée.
cl.exe
est présent dans les deux dossiers (c.-à-d. VS 2010 et VS 2013).
Enfin, si je mets VS 2013 dans le chemin d’environnement et que je définis le contenu de .theanorc
comme suit:
[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 =
Je reçois l'erreur suivante:
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 je lance import theano
sans l'option GPU, il s'exécute sans problème. De plus, les échantillons CUDA fonctionnent sans problème.
Theano est un excellent outil pour les applications d’apprentissage automatique, mais j’ai trouvé que son installation sur Windows n’était pas triviale, en particulier pour les débutants (comme moi) en programmation. Dans mon cas, je vois des accélérations 5-6x de mes scripts quand ils sont exécutés sur un GPU, donc ça en valait vraiment la peine.
J’ai rédigé ce guide sur la base de ma procédure d’installation. Il est destiné à être détaillé et, espérons-le, complet, même pour les personnes qui ne comprennent pas auparavant la création de programmes sous l’environnement Windows. La plupart de ce guide est basé sur ces instructions mais j'ai dû modifier certaines étapes pour que cela fonctionne sur mon système. Si quelque chose que je fais n'est peut-être pas optimal ou ne fonctionne pas sur votre machine, faites-le-moi savoir et j'essaierai de modifier ce guide en conséquence.
Voici les étapes (dans l'ordre) que j'ai suivies lors de l'installation de Theano avec le processeur graphique activé sur mon ordinateur Windows 8.1:
CUDA peut être téléchargé à partir de ici . Dans mon cas, j'ai choisi la version pour ordinateur portable 64 bits pour mon ordinateur portable NVIDIA Optimus avec Geforce 750m.
Vérifiez que votre installation a réussi en lançant deviceQuery
à partir de la ligne de commande. Dans mon cas, cela se trouvait dans le dossier suivant: C:\ProgramData\NVIDIA Corporation\CUDA Samples\v6.5\bin\win64\Release
. En cas de succès, vous devriez voir PASS à la fin du test.
J'ai installé ceci via dreamspark . Si vous êtes étudiant, vous avez droit à une version gratuite. Sinon, vous pouvez toujours installer la version Express qui devrait également fonctionner. Une fois l’installation terminée, vous devriez pouvoir appeler Visual Studio Command Prompt 2010 à partir du menu Démarrer.
Au moment de la rédaction, Theano sur GPU permet uniquement de travailler avec des flottants 32 bits et est principalement conçu pour la version 2.7 de Python. Theano nécessite la plupart des bibliothèques scientifiques Python de base telles que scipy
et numpy
. J'ai trouvé que le moyen le plus simple de les installer était via WinPython . Il installe toutes les dépendances dans un dossier autonome, ce qui facilite la réinstallation en cas de problème au cours du processus d’installation et vous fournit également des outils IDE utiles, tels que ipython notebook et Spyder, également installés gratuitement. Pour faciliter l'utilisation, vous pouvez ajouter le chemin d'accès à votre fichier python.exe et celui de votre dossier Scripts dans les variables d'environnement .
Trouvé ici .
Le fichier d'installation est ici . J'ai vérifié tous les fichiers d'installation de base pendant le processus d'installation. Cela est nécessaire si vous rencontrez l'erreur g ++ décrite ci-dessous.
Vous pouvez le trouver ici . En gros, je n’utilisais cet utilitaire que pour extraire le fichier tar PyCUDA, qui est déjà fourni dans l’installation de base (l’installation devrait donc être simple).
Ouvrez msvc9compiler.py
situé dans votre répertoire /lib/distutils/
de votre installation Python. La ligne 641 dans mon cas se lit comme suit: ld_args.append ('/IMPLIB:' + implib_file)
. Ajouter ce qui suit après cette ligne (même indentation):
ld_args.append('/MANIFEST')
La source pour PyCUDA est ici .
Pas:
Ouvrez cygwin et accédez au dossier PyCUDA (c'est-à-dire /cygdrive/c/etc/etc
) et exécutez tar -xzf pycuda-2012.1.tar.gz
.
Ouvrez l'invite de commandes Visual Studio 2010 et accédez au répertoire où l'archive a été extraite, puis exécutez python configure.py
.
Ouvrez le fichier ./siteconf.py et modifiez les valeurs afin qu’il se lise (pour CUDA 6.5 par exemple):
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']
Exécutez les commandes suivantes à l’invite de commande VS2010:
set VS90COMNTOOLS=%VS100COMNTOOLS%
python setup.py build
python setup.py install
Créez ce fichier python et vérifiez que vous obtenez un résultat:
# 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
Ouvrez git bash Shell et choisissez un dossier dans lequel vous voulez placer les fichiers d’installation de Theano et exécuter:
git clone git://github.com/Theano/Theano.git
python setup.py install
Essayez d’ouvrir python dans l’invite de commande VS2010 et exécutez import theano
Si vous obtenez une erreur liée à g ++, ouvrez MinGW msys.bat dans mon cas, installé ici: C:\MinGW\msys\1.0
et essayez d'importer theano dans MinGW Shell. Recommencez ensuite l’importation de l’anonymat à partir de l’invite de commande VS2010, qui devrait fonctionner maintenant.
Créez un fichier dans WordPad (PAS le Bloc-notes!), Nommez-le .theanorc.txt
et mettez-le dans C:\Users\Your_Name\
ou à l'emplacement de votre dossier d'utilisateurs:
#!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
Créez un script de test python et exécutez-le:
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'
Vérifiez que vous avez Used the gpu
à la fin et vous avez terminé!
Voici mes étapes simples pour installer theano sur une machine Windows 10 64 bits. Il est testé sur le code répertorié ici
(Toutes les installations sont avec le chemin d'installation par défaut)
[global]
floatX = float32
device = gpu
[nvcc]
fastmath = True
compiler_bindir = C:\Fichiers de programme (x86)\Microsoft Visual Studio 12.0\VC\bin\cl.exe
[cuda]
C:\Program Files\Boîte à outils de calcul GPU NVIDIA\CUDA\v7.5
Voici un guide pour installer theano avec CUDA sur Windows 64 bits.
Cela semble simple, mais je ne l’ai pas réellement testé pour vérifier son fonctionnement.
http://pavel.surmenok.com/2014/05/31/installing-theano-with-gpu-on-windows-64-bit/
Je pourrais compiler les fichiers cu en ajoutant les dépendances requises dans le profil nvcc situé dans «C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.5\bin\nvcc.profile»
J'ai modifié les chemins include et lib et cela a commencé à fonctionner.
INCLUS + = “-I $ (TOP)/include” $ (ESPACE) “-IC:/Fichiers programme (x86)/Microsoft Visual Studio 12.0/VC/include” $ (ESPACE) “-IC:\Program Files (x86)\SDK Microsoft\Windows\v7.1A\Include” $ (ESPACE) LIBRARIES = + $ (ESPACE ) “/ LIBPATH: $ (TOP)/lib/$ (_WIN_PLATFORM_)” $ (ESPACE) “/ LIBPATH: C:/Fichiers de programme (x86)/Microsoft Visual Studio 12.0/VC/lib/AMD64 ”$ (ESPACE)“/LIBPATH: C:\Fichiers de programme (x86)\SDK Microsoft\Windows\v7.1A\Lib\x64 ”$ (ESPACE)
J'ai réalisé une documentation complète de l'installation, j'espère que cela aidera/ https://planetanacreon.wordpress.com/2015/10/09/install-theano-on-windows-8-1-with-visual-studio-2013 -cuda-7-5/
Si vous souhaitez effectuer une mise à niveau vers MS Visual Studio 2012 et CUDA 7 sous Windows 8.1 x64, consultez ce didacticiel ici:
http://machinelearning.berlin/?p=383
Cela devrait fonctionner aussi longtemps que vous vous y tenez exactement . Tout le meilleur
Christian
J’ai utilisé ce guide , et c’était très utile ... Ce que beaucoup de guides Windows Theano mentionnent en passant (ou pas du tout) est que vous aurez besoin de le compiler à partir de mingw Shell, et non de votre IDE. .
J'ai couru mingw-w64.bat, et à partir de là "python" et "importation theano". Ce n’est qu’après que l’importation de pycharm fonctionne.
De plus, les instructions officielles sur deeplearning.net sont mauvaises car elles vous invitent à utiliser CUDA 5.5, mais cela ne fonctionnera pas avec les nouvelles cartes vidéo.
Les commentaires sont également très utiles. S'il se plaint de l'absence de crtdefs.h ou de basetsd.h, faites comme le dit la réponse de Sunando. Si APRES QU'IL se plaint toujours que l'identificateur "Iunknown" n'est pas défini dans objbase.h, collez ce qui suit dans le fichier C:\Program Files (x86)\Microsoft SDK\Windows\v7.1A\Include\objbase.h, à la ligne 236:
#include <wtypes.h>
#include <unknwn.h>
Je devais faire cette dernière partie pour le faire fonctionner avec bleeding Edge install (requis pour certaines parties de Keras).
J'ai également écrit une liste de choses qui ont fonctionné pour moi, ici: http://acoupleofrobots.com/everything/?p=2238 Ceci est pour la version 64 bits.