Esta información puede resultar de interés general, pero especialmente a aquellos que, como yo, estáis cursando el Máster en Business Analytics y Big Data UCJC de IMF Business School, en el caso de que no trabajéis habitualmente con Theano y Jupyter notebook.
Para avanzar con el contenido del Módulo III (Aprendizaje Automático Aplicado), y tras terminar las prácticas de ingeniería de características y selección de modelos, debemos abordar la Unidad 6 (Modelos conexionistas).
Tal como explica len el capítulo 3.1 (Introducción a Theano), es necesario tener configurado el ecosistema Python, Jupyter notebook y Theano. Una alternativa al procedimiento descrito en la documentación es descargar una máquina virtual con Ubuntu y Docker, e importarla en Virtual Box. Posteriormente, es fácil y rápido lanzar un contenedor con todo lo necesario configurado y listo para utilizase.
Yo estoy habituado a crear máquinas virtuales, no tanto a descargarlas, pero para quien quiera practicar con Theano, sin perder tiempo, os he compartido esta
Imagen (Docker) con Ubuntu, Python3, Jupyter notebook y Theano
que podéis descargar de Docker Hub.
Los pasos para dejarla completamente up&running son los siguientes:
0. El prerequisito es tener una máquina virtual de Ubuntu (Virtual Box) con Docker instalado y funcionando. Si no te sientes cómodo con esta parte, tal vez esto puede ayudarte.
1. Arrancar el contenedor Docker de la imagen, mediante el comando
sudo docker run -it --rm theano-morales4dev:1.0 bash
2. Una vez arrancado el contenedor y (con ayuda de otra sessión de shell, con MobaXterm) situados en la máquina (virtual) anfitrion, tenemos que averiguar la dirección ip del contenedor, con el comando:
sudo docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' <docker-container-id>
(obvio) sustituyendo <docker-container-id>
por el identificador del contenedor arrancado. Supongamos que la ip es 172.17.0.2
3. Situados en la shell del contenedor (iniciada en el punto 1) podemos arrancar jupyter con el comando
jupyter notebook --ip <Docker_container_IP_ADDRESS> --allow-root
(obvio) sustituyendo <Docker_container_IP_ADDRESS>
por la dirección que obtuvimos en el punto 2, según el ejemplo 172.17.0.2
4. Finalmente, desde la máquina (virtual) anfitrion, iniciamos el navegador web y apuntamos la URL provista por Jupyter notebook en el log de arranque. Por supuesto, si tu máquina (virtual) anfitrion (esto es, donde tienes instalado docker) tiene las X11 instaladas. Si no, como es nuestro caso, debes establecer el valor de la variable de entorno DISPLAY de esta manera
export DISPLAY=<YOUR_MobaXterm_MACHINE_IP_ADDRESS>:0.0
Por ejemplo, en nuestro caso:
export DISPLAY=192.168.1.115:0.0
y habilitar la característica "SSH X11 Forwarding Display" en MobaXterm.
En este momento ya es posible crear un nuevo cuaderno de Jupyter, y probar un ejemplo con theano:
import theano
import theano.tensor as T
x = T.scalar('x')
y = T.scalar('y')
z = x * y
f = theano.function(inputs = [x, theano.In(y, value = 3)], outputs = z)
print(f(10))
obteniendo el resultado
30
Si tienes alguna duda, no dudes en ponerte en contacto, intentaré resolvértela via mail en cuanto tenga tiempo, o en el peor de los casos, si se pone difícil, podría echarte una mano vía TeamViewer.
Espero que pueda servir de ayuda a alguien. Sobre esta máquina voy a completar mis prácticas de Theano. Suerte con las tuyas.
NOTA: La creación de esta imagen ha sido fácil, como sabéis lo más complicado de copiar es elegir una buena fuente. En este caso hemos construido la imagen sobre
gw000/keras:2.1.4-py3
la cual ya tenía casi todo lo necesario.
Prácticamente solo faltaba:
- Instalar Jupiter notebook
- Instalar Theano
- Configurar el (no) uso de la GPU mediante THEANO_FLAGS, y por supuesto,
- subir la imagen al Docker Hub.