Article Image
read

Como instalar Theano en Windows

Ya en el pasado he instalado varias veces Theano, en Windows 7, Windows 8 y Windows 10,  aunque siempre lo he conseguido siguiendo el famoso tutorial, me hubiera gustado encontrar un tutorial en español y mas practico, en este post pretendo crear ese tutorial, me basare en mi experiencia y en el famoso tutorial que los chicos de deeplearning.net tan generosamente han contribuido. La versión que instalaremos será de 64 bits, en un Windows 10 de 64 bits.

Instalación de dependencias

Primero instalamos todas las dependencias necesarias en el siguiente orden:

  • Instalamos Microsoft visual Studio 2012 (he leído que también funciona con visual studio 2013) que es necesario para la instalación del SDK de CUDA, que es necesario para que Theano pueda usar el GPU, instalamos gratuitamente la versión express.
  • Queremos instalar una versión de 64 bits, pero visual Studio no provee un compilador de 64 bits, nos lo debemos instalar con Windows Software Development Kit version 7.1.
  • Ahora instalamos el SDK de CUDA Toolkit 6.5  con el que Theano interactuara  Seleccionamos Windows8.1, versión de 64 bits (también puedes probar con una versión mas nueva, aunque no todas funcionan).
  • Necesitamos poder compilar código de C++ a paquetes de python, nos instalamos el compilador Microsoft Visual C++ Compiler for Python 2.7. Y con el objetivo de seguir con la misma ruta en este tutorial y para que todos los usuarios del equipo puedan acceder al compilador, (además de que no se si de otra manera funciona), instalamos el compilador con las siguientes opciones:

    1. Abrimos la consola como administrador (click derecho en la aplicación de consola y seleccionar abrir como administrador)
    2. <span class="pre">Navegamos </span>al directorio donde descargamos el instalador ejecutamos:

      msiexec /i VCForPython27.msi ALLUSERS=1

      Se instalara en (<span class="pre">C:\Program</span> <span class="pre">Files</span> <span class="pre">(x86)\Common</span> <span class="pre">Files\Microsoft\Visual</span> <span class="pre">C++</span> <span class="pre">for</span> <span class="pre">Python\9.0</span>.)

  • A partir de este momento necesitaremos crear el directorio (C:\SciSoft), donde seguiremos instalando mas dependencias, el nombre puede ser diferente, pero nos servirá para que todos sigamos lo mismo.
  • Theano genera código de C que necesita ser compilado con un compilador GCC,  entonces nos lo instalamos considerando lo siguiente:
    1. Lo instalamos en el directorio (<span class="pre">C:\SciSoft\TDM-GCC-64</span>)
    2. Si no quieres agregarlo a tus variables de entorno de sistema, quita el check "<span class="pre">add</span> <span class="pre">to</span> <span class="pre">path</span> option".
    3. Habilita el soporte OpenMP  chequeando la opción "<span class="pre">openmp</span> <span class="pre">support"</span>.
  • Necesitamos Python, pero también muchas librerías comunes que nos ayudaran en el desarrollo, por eso winpython es ideal, lo instalamos en el directorio (c:\SciSoft)

configuración de nuestro entorno de ejecución e instalación de theano

Ahora ya tenemos todas nuestras dependencias excepto Theano, pero antes de instalarlo, nos aseguramos que tengamos un entorno de ejecución adecuado con acceso a todas nuestras dependencias y variables de entorno necesarias, para generar este entorno creamos un archivo .bat en (C:\scisoft\env.bat), queremos que al ejecutarlo nos abra una shell con las variables de entorno necesarias para desarrollar, el archivo env.bat tendrá el siguiente contenido:

REM Asignamos directorios a variables 
set VSFORPYTHON="C:\Program Files (x86)\Common Files\Microsoft\Visual C++ for Python\9.0"
set SCISOFT=%~dp0

REM agregamos entorno de TDM-GCC 

set PATH=%SCISOFT%\TDM-GCC-64\bin;%SCISOFT%\TDM-GCC-64\x86_64-w64-mingw32\bin;%PATH%

REM Agregamos entorno de Python

CALL %SCISOFT%\WinPython-64bit-2.7.10.3\scripts\env.bat

REM configuramos path para los compiladores  msvc (MS Visual C) 
REM para una instalación de  32 bit cambia esta línea a 
REM CALL %VSFORPYTHON%\vcvarsall.bat 
CALL %VSFORPYTHON%\vcvarsall.bat amd64 

REM retornamos una shell 
cmd.exe /k

NOTA: Cambiar línea CALL %SCISOFT%\WinPython-64bit-2.7.10.3\scripts\env.bat por la apropiada Ahora ejecutamos env.bat, y nos aseguramos de tener acceso a las siguientes aplicaciones, para esto ejecutamos:

  1. where gcc
  2. where gendef
  3. where cl
  4. where nvcc
Si todo ha ido bien procedemos a generar una librería linkeada para GCC
gendef WinPython-64bit-2.7.10.3\python-2.7.9.amd64\python27.dll
dlltool --dllname python27.dll --def python27.def --output-lib WinPython-64bit-2.7.10.3\python-2.7.10.amd64\libs\libpython27.a

instalación de Theano

Ahora que sabemos que tenemos un entorno de ejecución apropiado instalamos Theano, (antes debemos tener instalado Git). Abrimos una shell (env.bat)
Descargamos la ultima version de Theano
git clone https://github.com/Theano/Theano.git
O si prefieres instalar una versión en particular, puedes seleccionarla cambiando el tag(por uno listado [aqui](https://github.com/Theano/Theano/tags)), por ejemplo si quisiéramos el tag rel-0.7 ejecutaríamos:
git clone https://github.com/Theano/Theano.git --branch rel-0.7
Una vez descargado, navegamos en nuestro CMD a la carpeta donde se descargo Theano, y lo instalamos ejecutando.
python setup.py install

Configurando Theano para uso con GPU

Theano puede ser configurado con un archivo de texto .theanorc o .theanorc.txt, que debe estar ubicado en el directorio al que apunta la variable %USERPROFILE%. Winpython la cambia a  WinPythonDir\settings (asi que en nuestro sistema corresponde a c:\scisoft\WinPython-64bit-2.7.9.4\settings). Escribe en .theanorc o theanorc.txt lo siguiente

[global]
device = gpu
floatX = float32

[nvcc]
flags = --use-local-env  --cl-version=2008

(si no tienes gpu puedes usar el cpu en la variable device)

PRUEBAS

En este punto podremos probar si Theano ya esta funcionando, y si es capaz de generar código de C para la GPU, así que creamos una prueba ejecutando el siguiente código
import numpy as np
import time
import theano
A = np.random.rand(1000,10000).astype(theano.config.floatX)
B = np.random.rand(10000,1000).astype(theano.config.floatX)
np_start = time.time()
AB = A.dot(B)
np_end = time.time()
X,Y = theano.tensor.matrices('XY')
mf = theano.function([X,Y],X.dot(Y))
t_start = time.time()
tAB = mf(A,B)
t_end = time.time()
print("NP time: %f[s], theano time: %f[s] (times should be close when run on CPU!)" %(
                                           np_end-np_start, t_end-t_start))
print("Result difference: %f" % (np.abs(AB-tAB).max(), ))
También puedes probar ejecutando
Theano.test()
 Y listo si las pruebas son satisfactorias, tendremos nuestro entorno de desarrollo listo para usar Theano.

Errores comunes

Aquí listo los errores mas comunes que he tenido (o que recuerdo en este momento :) ), si sabes de algún otro y como resolverlo, apreciaría un comentario para complementar la lista.
1\. Una vez cuando ejecute "where gendef" no pude encontrarlo, al final me di cuenta que había descargado una versión incorrecta de winpython.
2\. Una vez tuve problemas de dependencias de python, resulta que me faltaba instalar nose-parameterized, entonces lo instale "pip install nose-parameterized" (en el [famoso tutorial](http://deeplearning.net/software/theano/install_windows.html) explica este problema)
3\. Si algo no funciona tal vez necesites copiar este archivo stdint.h del [famoso tutorial](http://deeplearning.net/software/theano/install_windows.html)
Este tutorial esta basado en el [famoso tutorial](http://deeplearning.net/software/theano/install_windows.html) y mucho del contenido es simplemente traducido, además trate de simplificarlo y hacerlo mas practico, espero te sea de ayuda y conforme vaya haciendo mas instalaciones de Theano y teniendo mas experiencias lo mejorare.

Otros tutoriales

[http://simranmetric.com/installing-theano-on-windows-10-python-3-5/](http://simranmetric.com/installing-theano-on-windows-10-python-3-5/)
Blog Logo

Giovanni Crescencio Ahuactzi

Soy Gyo un blogero que disftruta de la tecnologia


Published

Image

Gyo&Joe

Blog personal de Gyo

Back to Overview