¡Dracarys! – Use Docker Machine, PyTorch y Gigantum para flujos de trabajo de GPU portatiles y reproducibles

Imagen CC Por I, Luc Viatour, CC BY-SA 3.0

TL; DR

  1. La creación manual de flujos de trabajo GPU portátiles y reproducibles es frágil, requiere mucha habilidad y es laboriosa, incluso con contenedores.
  2. Por suerte, usted puede más o menos automatizar cosas usando Docker Machine, PyTorch & Gigantum.
  3. Utilizamos estas tres cosas para demostrar un sistema robusto para crear flujos de trabajo que se mueven sin problemas entre la computadora portátil y la nube, CPU y GPU.

Suposiciones Debe tener:

  1. Experiencia con Bash (en Linux / macOS) o PowerShell (en Windows).
  2. Docker CE instalado localmente.
  3. AWS credenciales y permisos suficientes para una instancia de EC2 GPU.

Si No cumplas con estos requisitos, no desesperes. Puedes ponerte al día para esta publicación con una lectura de fondo y un poco de corte y pegado.

Spoiler alert – Completar esta publicación llevará mucho menos tiempo del que Daenerys Targaryen necesitaba para quemar el Desembarco del Rey en el Episodio 5 de GoT.

Intro

Las GPU para el procesamiento en paralelo brindan un aumento de velocidad increíble para algunos cálculos, el aprendizaje profundo más famoso. Las GPU buenas literalmente pueden anular los cálculos que son intratables en una CPU.

Desafortunadamente, la instalación y configuración de los entornos de software necesarios requiere habilidad y tiempo. Para la mayoría de los usuarios, la única forma de acceder a las GPU es a través de una de las crecientes plataformas que proporcionan una interfaz de navegador en entornos de nube administrados. El problema básico con estas plataformas es que son gratuitas y computacionales sin valor, o funcionales, pero parecen diseñadas para los presupuestos corporativos.

Un camino para un acceso más amplio es capacitar a las personas para que hagan las cosas por sí mismas al minimizar la habilidad y el tiempo necesarios para configurar las cosas. Otro enfoque es hacer que los flujos de trabajo de la GPU sean portátiles, es decir, autónomos y que funcionen fácilmente a través de varios recursos. Por ejemplo, facilitar el movimiento entre las máquinas de CPU y GPU permite realizar pruebas y depurar en CPU más baratas, ahorrando la GPU costosa para los cálculos reales. En este post, haremos ambas cosas.

Básicamente, te daremos tu propio dragón cuando se trata de portátiles GPU reproducibles y portátiles de PyTorching.

Las herramientas que usamos

Docker Machine es una herramienta de línea de comandos con licencia Apache simple para aprovisionar, configurar y administrar entornos virtuales remotos.

PyTorch es un BSD con licencia

Gigantum es una aplicación local con licencia del MIT que se combina con un servicio en la nube para hacer reproducible. flujos de trabajo que cualquiera puede usar fácilmente .

Nuestra prueba de existencia tiene tres secciones:

  1. Un proceso simple para crear una instancia de GPU EC2 con Docker Machine;
  2. Configuración de la instancia desde un indicador de Bash;
  3. Importando y ejecutando una transferencia PyTorch

Antes de comenzar : para que este post sea sólido para diferentes usuarios, hemos cometido errores en cuanto a mayor certeza en el proceso y la simplicidad de las herramientas. [19659013] Sección 1: crear una instancia de EC2 p2.xlarge

Comencemos.

Los pasos 1 a 3 son solo pasos de una sola vez, pero el comando Docker Machine en el paso 4 es lo que usará para crear un nuevo control remoto cada vez que

Si no lo ha usado antes, Docker Machine es una herramienta simple para una fácil instalación, administración y conexión con Docker en hosts remotos. Convenientemente, automatiza SSHing y fácil reenvío de puertos. Puede obtener información sobre esto aquí y aquí .

Paso 1 – Verifique que tenga Docker CE y que esté funcionando . [19659015] En una terminal (Bash o PowerShell), ejecute:

 versión de docker

Debe tener Docker CE ejecutándose localmente. Si no tiene una versión bastante reciente puede actualizarla. Nota: no puede usar Docker Toolbox .

Paso 2 (solo para usuarios de Linux) – Instale Docker Machine si no la tiene .

Distribuciones de Docker para Linux a menudo no incluye Docker Machine (pero macOS y Windows sí). Para remediar esto, ejecute lo siguiente en un terminal Bash:

 base = https: //github.com/docker/machine/releases/download/v0.16.0
 curl -L $ base / docker-machine- $ (uname -s) - $ (uname -m)> / tmp / docker-machine
 sudo install / tmp / docker-machine / usr / local / bin / docker-machine

Luego, cierre sesión e inicie sesión – asegurándose de que el docker-machine esté en su PATH.

Paso 3 – Tenga las credenciales de AWS API configuradas para la CLI .

Si no tiene credenciales, visite la consola para configurarlos. Necesita:

  1. Su clave de acceso, youraccesskey.
  2. Su clave de acceso secreta: yoursecretkey .

Asegúrese de configurar su AWS CLI para invocar automáticamente las credenciales para uso de la línea de comandos de lo contrario, deberá agregarlos a los comandos de Docker Machine a continuación.

En una terminal, ejecute:

 aws configure 
 AWS Access Key ID [None]:  youraccesskey  
 Clave de acceso secreta de AWS [None]:  yoursecretkey  
 Nombre de región predeterminado [None]: 
 Formato de salida predeterminado [None]:

] Paso 4 – Cree la instancia usando Docker Machine .

Ahora puede usar un comando de Docker Machine (con múltiples argumentos) para configurar una instancia de p2.xlarge.

(En Linux o Mac) Ingrese el siguiente comando en un terminal Bash

 docker-machine create --driver amazonec2  
 - amazonec2-ami   ami-0a313d6098716f372  
 - amazonec2-instance-type p2.xlarge  
 - amazonec2-region us-east-1  
 - amazonec2-root -size 64  
 gigantum-gpu

(En Windows) Ingrese el siguiente comando en un terminal PowerShell

 docker-machine create --driver amazonec2 `
 --amazonec2- ami   ami-0a313d6098716f372 `
 --amazonec2-instance-type p2.xlarge` 
 --amazonec2-region us-east-1 `
 --amazonec2-root-size 64` 
 gigantum-gpu

Pegar y ejecutar los comandos para Windows PowerShell es bastante simple.

Si esto tuvo éxito – ¡Felicidades! Has configurado la instancia.

Si no funcionó – Probablemente sea por una de algunas razones simples.

  • Una de tus claves está equivocada. Corríjalo.
  • No tienes suficientes privilegios para crear la instancia. Corrija esto y asegúrese de solicitar acceso a un p2.xlarge de Amazon.
  • (Windows) Algo está desactivado con Docker. Reinicie Docker y vuelva a intentar el comando Docker Machine.

Administración del control remoto con Docker Machine

  • Compruebe lo que se está ejecutando con docker-machine ls.
  • Inicie la instancia con docker-machine start gigantum-gpu.
  • Reinicie la instancia con docker-machine restart gigantum-gpu.
  • Detenga la instancia con docker-machine detenga gigantum-gpu.
  • SSH en la instancia con docker-machine ssh gigantum-gpu.

Nota Bene

Tenga cuidado al eliminar instancias. El comando es sencillo, docker-machine rm gigantum-gpu, pero hay dos problemas potenciales.

Primero – Es permanente. Perderá todo en esa instancia.

Segundo : la eliminación de una instancia antes de detenerla puede que en realidad no la cierre . Todavía podría estar en ejecución y no lo sabrá hasta que vaya a la consola.

Elimine las instancias de manera consciente y deliberada. Detenga siempre la instancia antes de eliminarla.

Sección 2 – Instalar software en la instancia de GPU

Ok. Ahora que se acabó, vamos a dar 5 pasos más. Solo tiene que hacerlas una vez.

¿Listo?

Paso 1 Inicie sesión en el control remoto .

 docker-machine ssh gigantum-gpu
Docker Machine automatiza completamente el proceso SSH. No más secretos. No más masilla.

A menos que le indiquemos lo contrario – Está en un terminal Bash en el control remoto.

Paso 2 Agregue su usuario al grupo acoplador, agregue los controladores de gráficos ppa, e instalar los controladores de GPU Nvidia .

 usodod sudo -aG docker $ USER 
 sudo add-apt-repository -y ppa: graphics-drivers / ppa

Seguido de

] sudo apt-get install -y linux-aws nvidia-headless-430 nvidia-utils-430

Aparecerá un menú. El valor predeterminado es mantener la versión local actual. No.

Selecciona Instalar la versión del mantenedor del paquete y pulsa enter.

Verás este menú. Instale la versión del mantenedor del paquete, aunque no importa mucho cómo responda.

Paso 3 Instale los controladores Nvidia Docker, luego cierre la sesión y reinicie la instancia .

curl - s -L https://nvidia.github.io/nvidia-docker/gpgkey |  
 sudo apt-key add - 
 distribution = $ (. / Etc / os-release; echo $ ID $ VERSION_ID) 
 curl -s -L https://nvidia.github.io/nvidia -docker / $ distribution / nvidia-docker.list |  
 sudo tee /etc/apt/sources.list.d/nvidia-docker.list[19659038◆Followedby
sudo apt-get update 
 sudo apt-get install -y nvidia-docker2 [19659038] Cierre la sesión ingresando ctrl + d, y desde el terminal  local  reinicie la instancia con
 docker-machine restart gigantum-gpu

Paso 4 Inicio de sesión, instale Gigantum, cierre sesión y luego detenga la instancia .

Inicie sesión ingresando lo siguiente en el terminal local

 docker-machine ssh gigantum-gpu

Luego, en el indicador de Bash en la ejecución remota:

 sudo apt-get install -y python3-pip 
 pip3 install --user gigantum

Ahora, cierre sesión ingresando ctrl + d y vuelva a iniciar sesión desde terminal local con:

 docker-machine ssh gigantum-gpu

Seguido de

 gigantum install

Finalmente, cierre la sesión con Ctrl + D y luego deténgalo desde el local terminal con: [19659037] docker-machine stop gigantum-gpu

Paso 5 – T tome un descanso, estire las piernas y refleje un poco .

Al tomar un descanso, refleje en lo que acaba de suceder.

  1. En poco tiempo y con relativamente pocos comandos, configura la instancia de GPU EC2 más barata y el software instalado para los flujos de trabajo de GPU en contenedores.
  2. Puede acceder a la instancia cuando lo desee comenzando y loguearse con Docker Machine. ¡Lo anterior fue una configuración de una sola vez!

Finalmente, recuerde que si no detiene la instancia, Amazon le cobrará el tiempo de cálculo. Además, hay 64 GB de almacenamiento EBS adjunto a él. Si no lo elimina, incurrirá en cargos (relativamente pequeños) incluso si se detiene.

Sección 4: Ejecute un flujo de trabajo de GPU de PyTorch

Ok. Bajemos al punto de los últimos 20 minutos.

Ejecutaremos fácilmente ejecutando una computadora portátil de PyTorch sin función de la CPU / GPU en la instancia de la GPU. El cuaderno está adaptado de un tutorial de aprendizaje por transferencia por Sasank Chilamkurthy . Ilustra las mejores prácticas para computadoras portátiles con CPU / GPU y dos ideas de aprendizaje de transferencia: ajuste fino y extracción de características .

Importando e inspeccionando el Proyecto PyTorch

, solo hay tres comandos. El resto está en un navegador.

  1. docker-machine start gigantum-gpu
  2. docker-machine ssh gigantum-gpu -L 10000: localhost: 10000
  3. gigantum start –wait 60

For the work in Gigantum y Jupyter, en lugar de enumerar otra secuencia de pasos, solo mostraremos un video (acelerado) del proceso.

El Proyecto de aprendizaje por transferencia puede importarse con la siguiente URL:

https://gigantum.com/tinydav/simple-pytorch-transfer-learning[19659130◆https://mediumcom/media/ed77786a423b684d047634bfcd736521/href”196591311Elvideodebeserautoexplicativoperopodemosdesempaquetarlounpoco

  1. Después de iniciar sesión en la aplicación, todo lo necesario para ejecutar el portátil PyTorch se importa como un repositorio de código, datos y entorno.
  2. Un contenedor con el entorno para ejecutar el portátil se construye automáticamente.
  3. las compilaciones de contenedores, nos fijamos en la información de Actividad y Medio Ambiente.
  4. Una vez que se crea, haga clic en t El nombre del archivo en la pestaña Código inicia JupyterLab en otra pestaña. Si no es así, es probable que tengas un bloqueador de ventanas emergentes .
  5. El portátil se ejecuta en la GPU.

Bastante simple, y todo por $ 0.90 por hora en una p2 .xlarge en lugar de los $ 1.20 por hora que cuesta un ml.p2.xlarge en SageMaker.

Una cosa a tener en cuenta : no está limitado a ejecutar sobre la base CUDA 10.0 en esta instancia . Si observa la pestaña Entorno para el otro proyecto, mi primer proyecto, notará que no tiene CUDA 10.0 y tiene un conjunto de paquetes completamente diferente .

Cuando termine, asegúrese de hacer lo siguiente:

  1. Ejecutar la parada de gigantum en el terminal.
  2. Cierre la sesión con ctrl + d.
  3. Detener la instancia con la función docker-machine stop gigantum- gpu.

Ahora— Un ejercicio para el lector

Puede recordar que dijimos que puede usar esta misma configuración para ejecutar el notebook en una CPU. Dejamos esto como un ejercicio para el lector, pero hacemos un breve boceto para que funcione un poco más sin problemas.

Al seguir las instrucciones anteriores, puede configurar una instancia de CPU por su cuenta y luego ejecutar este cuaderno. Puede hacerlo localmente si tiene Docker CE con solo instalando Gigantum o puede hacerlo en un control remoto a través de una adaptación del proceso anterior.

No necesita instalar ninguno de los Software relacionado con Nvidia esta vez. De hecho, ni siquiera necesita hacerlo en AWS porque Docker Machine funciona para otros proveedores, como Digital Ocean . Incluso puede hacerlo en su propio control remoto

Los pasos básicos para ejecutar este notebook en una instancia de CPU EC2 son:

  1. Cree una instancia de t2.xlarge EC2 usando Docker Machine usando la misma AMI que hicimos para gigantum-cpu.
  2. Agregue su usuario al grupo docker, instale pip3 y luego instale Gigantum.
  3. Tenga en cuenta que deberá cerrar la sesión y volver a iniciarla antes de ejecutar gigantum install.
  4. SSH en gigantum-cpu, haga lo mismo reenvío de puertos, inicie Gigantum y luego importe y ejecute el cuaderno.

Cuando termine, asegúrese de detener la instancia de gigantum-cpu.

Finalmente – Un Tease para un cuaderno LSTM en TensorFlow

Si completó En el ejercicio anterior, ahora tiene un sistema para usar PyTorch para ejecutar fácilmente flujos de trabajo independientes de CPU / GPU. Una parte importante de esto es el hecho de que PyTorch administra sin problemas el cambio para usted.

Pero ¿qué pasa con TensorFlow? No maneja ese interruptor de una manera tan perfecta, pero resulta que puede crear flujos de trabajo que funcionen en la CPU o GPU usando un enfoque diferente, nuevamente en Gigantum.

En la próxima publicación, veremos cómo que funciona con Docker Machine, Gigantum & TensorFlow.

Sin embargo, si lo desea, puede hacerlo usted mismo ahora mismo utilizando la p2.xlarge que acaba de configurar. No necesita cambiar nada .

Puede usar el cuaderno LSTM https://gigantum.com/dmk/trump-speech-generation para comenzar. [19659159] Escrito por Dav Clark (HDS) y Tyler Whitehouse (CEO) de Gigantum .

Síganos en Twitter [1945952] o ¡Diga hola en Spectrum !


Dracarys! – Use Docker Machine, PyTorch & Gigantum para flujos de trabajo de GPU portátiles y reproducibles se publicó originalmente en Towards Data Science en Medium, donde la gente continúa la conversación resaltando y respondiendo a esta historia.

Dejá un comentario