Curso
Aunque el curso de DataCamp Introduction to Deep Learning in Python te da todo lo necesario para hacer deep learning en tu portátil u ordenador personal, tarde o temprano querrás ejecutar tus modelos en una unidad de procesamiento gráfico (GPU).
¡Este post te ayuda a dar ese siguiente paso!
La mayoría no tiene una GPU en su equipo, así que aquí verás cómo ejecutar una desde la nube de Amazon Web Services (AWS).
Ejecutar tus modelos en una GPU como describimos cuesta alrededor de 0,90 $ la hora. Si tu portátil u ordenador ya tiene GPU, puedes configurarlo para usarla y ahorrarte ese dinero.
Poner en marcha tu entorno de computación en la nube por primera vez tiene varios pasos. Pero una vez lo tengas, verás que es muy fácil reutilizarlo en el futuro.
Crear una cuenta de Amazon Web Services
Ve a https://aws.amazon.com/ para crear una cuenta de AWS. Sigue el enlace Create an AWS Account.
Selecciona el botón I am a new user e introduce tu correo. Te guiarán por varios formularios con datos como tu nombre, email y una contraseña.

Configurar tu servidor en la nube
Configurar el servidor tiene unos cuantos pasos. Por suerte, te mostraremos cómo detener tu instancia para no pagar cuando no la uses y poder reiniciarla rápido una vez esté lista.
Ahora que ya tienes cuenta, puedes entrar cuando quieras volviendo a https://aws.amazon.com/ y haciendo clic en Sign In To Console.

Amazon ofrece una cantidad enorme de servicios en la nube, y puede abrumar al principio. Aquí te centrarás en EC2 (Elastic Cloud Compute). En la parte superior izquierda de la ventana del navegador verás el menú de servicios.

Abre el menú y selecciona EC2, que debería ser la primera opción. Irás a una página con el estado de todas tus instancias EC2. En el centro, pulsa el botón Launch Instance.

Cada instancia viene con distinto software preinstalado (en "imágenes de máquina") y debemos elegir cuál queremos. En nuestro caso, usaremos una imagen del AWS Marketplace optimizada para deep learning.
En la barra lateral izquierda, selecciona AWS Marketplace.
Luego escribe deep learning ubuntu en el buscador:

Verás varias opciones, incluida la Deep Learning AMI Ubuntu Version oficial de Amazon. Selecciónala.

Ahora aparecerá un menú con tipos de instancia. Cada tipo tiene un precio y unas capacidades diferentes.
Las instancias con GPU empiezan por g2 o p2. Recomendamos la p2.xlarge, que cuesta algo menos de 1 $ la hora. Si quieres algo más barato, la g2.2xlarge ronda los 0,65 $/h, aunque es algo menos potente.
Tras elegir el tipo de instancia, selecciona Configure Instance Details al final de la página. Luego ve a 6. Configure Security Group en el menú de la parte superior.
Aquí configuraremos tu instancia para que puedas acceder fácilmente desde tu ordenador.
Cada fila define reglas de acceso a tu instancia.
Usaremos Jupyter notebooks, que se sirven en el puerto 8888. Si esto aún te suena raro, verás enseguida cómo funciona.
Por ahora, haz clic en Add Rule. En la nueva fila, elige TCP como protocolo, 8888 como puerto y 0.0.0.0/0 como origen.

Por último, haz clic en Review and Launch al final de la pantalla. Luego pulsa Launch de nuevo.
Llegarás al último paso de seguridad: elegir un par de claves. La clave es un archivo en tu ordenador que debe coincidir con otro almacenado en el servidor. Así evitas que otros usen tu servidor. No compartas las claves ni subas el archivo a ningún sitio público.
Selecciona Create a new key pair y ponle un nombre. Luego pulsa Download Key Pair para descargar la clave, que necesitarás para acceder a tu servidor.

En breve verás una pantalla como esta:

La cadena larga en azul es el nombre de tu instancia. Puedes seleccionarla para ver tu panel de EC2, donde aparece este servidor en ejecución.
¡Enhorabuena! Ya tienes un servidor de deep learning funcionando en la nube.
Conectar con tu servidor
Nos conectaremos al servidor con el protocolo ssh. Desde ahí iniciaremos un servidor de Jupyter Notebook para usarlo desde el navegador.
En macOS o Linux puedes usar el comando ssh. En Windows, mucha gente usa PuTTY para conexiones ssh.
Puede que necesites cambiar los permisos del archivo de tu clave. En macOS y Linux puedes hacerlo con el comando
chmod 400 my_private_key.pemLuego, aún en la terminal, indica que esa clave esté disponible para autenticación al iniciar sesión en tu servidor con
ssh-add my_private_key.pemPara entrar en el servidor, necesitas su dirección IP. La encontrarás en el panel de EC2 en tu navegador.

Inicia sesión desde la línea de comandos con
ssh ubuntu@34.208.222.118Recuerda sustituir 34.208.222.118 por la IP de tu servidor.
Una vez dentro, usa el comando ipython para iniciar una shell de IPython. Ya en IPython, intenta importar keras para comprobar que todo funciona. Verás mensajes indicando que se usa CUDA… lo que significa que keras está accediendo a la GPU.

Si te manejas con Linux, IPython y un editor de texto en Linux, puedes trabajar así. Hay quien usa dos ventanas: una para hacer ssh y usar IPython, y otra para conectarse por ssh y editar archivos.
Configurar tu Jupyter Notebook
Para la mayoría es más cómodo configurar Jupyter notebooks y programar desde el navegador. Para ello, vamos a establecer una contraseña.
Primero, genera el hash de la contraseña que quieras usar. Hazlo en IPython con lo siguiente:

Copia el hash que se muestra tras establecer tu contraseña. Lo necesitarás en un momento.
Escribe exit para salir de IPython.
Ahora hay que decirle a Jupyter que use esa contraseña. Para ello, ejecuta esta serie de comandos
jupyter notebook --generate-configmkdir certscd certssudo openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout mycert.pem -out mycert.pemLuego, usa un editor de texto para editar ~/.jupyter/jupyter_notebook_config.py. Yo uso vim, con el comando:
vim ~/.jupyter/jupyter_notebook_config.pyAl principio de ese archivo, pega lo siguiente:
c = get_config()c.IPKernelApp.pylab = 'inline' c.NotebookApp.certfile = u'/home/ubuntu/certs/mycert.pem' c.NotebookApp.ip = '*' c.NotebookApp.open_browser = False # Your password below will be whatever you copied earlier c.NotebookApp.password = u'sha1:941c93244463:0a28b4a9a472da0dc28e79351660964ab81605ae' c.NotebookApp.port = 8888Puedes copiarlo tal cual y solo sustituir la contraseña. Recuerda: no uses tu contraseña en claro, pega el hash que creaste antes.
Conectarte a Jupyter desde el navegador
Abre tu navegador favorito e introduce la dirección de tu instancia (la verás en el panel de EC2) seguida de :8888.

Puede que veas un aviso de seguridad. No debería preocuparte. En Chrome, puedes hacer clic en el botón "advanced" de la ventana principal para omitirlo.

Ahora se te pedirá la contraseña.

Escribe tu contraseña. No es el hash, sino la contraseña en claro que te sirvió antes para obtener el hash.
¡Listo, has iniciado sesión!
Usar el notebook
Desde el navegador, en el menú, crea un nuevo notebook de Python.

Uf… no ha sido fácil. Pero a partir de ahora sí lo será
Conseguir que los notebooks funcionen ha requerido bastante configuración. Por suerte, casi todo es cosa de una sola vez. Ya puedes detener tu servidor desde el panel de EC2 cuando no lo uses y dejarás de pagar por él.

Detener una instancia conserva toda tu configuración, pero dejará de funcionar hasta que la reinicies. Es como un botón de pausa. Si eliges terminate, se perderá toda la información y tendrías que repetir la configuración la próxima vez.
Como elegiste stop, podrás volver al panel de EC2 otro día y hacer clic en start.

Una vez hagas start, volver a ponerte en marcha es muy sencillo. Tu instancia recibirá una nueva IP. Tendrás que hacer ssh a esa nueva dirección
ssh ubuntu@34.208.26.73En la ventana donde tienes la sesión ssh abierta, escribe
jupyter notebookY ya puedes volver al navegador y ponerte a trabajar al momento.
Ha sido bastante trabajo de configuración, pero ojalá le saques mucho partido mientras sigues practicando y creando proyectos de deep learning cada vez más potentes.
Si te interesa aprender más, echa un vistazo a estos cursos de DataCamp:


