En este artículo, crearemos un contenedor Docker para el entorno de desarrollo de Machine Learning (ML). Esta imagen es bastante útil si está desarrollando modelos ML o si necesita un cuaderno Jupyter preconfigurado con algunas de las bibliotecas más útiles.
Recientemente, publicamos un artículo Introducción rápida y sencilla a los gráficos de Helm de Kubernetes en 10 minutos, donde puede encontrar instrucciones sobre cómo usar Helm para implementar este contenedor en su clúster de Kubernetes.
Actualización para 2020
- Actualizado a Python 3.6.
- Se corrigieron muchos problemas de compilación.
La última vez creamos un contenedor Docker con Jupiter, Keras, Tensorflow, Pandas, Sklearn y Matplotlib. De repente, entendí que echaba de menos OpenCV para las manipulaciones de imágenes y videos de Docker. Bueno, pasé todo el día preparando una nueva imagen. Y en este artículo, le mostraré cómo hacerlo mucho más rápido usando la imagen oficial de Docker de Anaconda.
Hay dos formas de hacerlo.
Manera sencilla
Este proceso tarda unos 7 minutos en crear el contenedor de 3,11 Gb de tamaño.
Anaconda way
Cuando comencé a jugar con ML en 2018, Anaconda era una forma súper rápida y fácil de crear contenedores Docker para experimentos de ML. Fue mucho más rápido compilar OpenCV 3 para Ubuntu 16.04. Hoy es al revés.
Estoy usando las mismas fuentes, pero cambiando Dockerfile
.
Así es como se ve:
FROM continuumio/anaconda3
MAINTAINER "Andrei Maksimov"
RUN apt-get update && apt-get install -y libgtk2.0-dev && \
rm -rf /var/lib/apt/lists/*
RUN /opt/conda/bin/conda update -n base -c defaults conda && \
/opt/conda/bin/conda install python=3.6 && \
/opt/conda/bin/conda install anaconda-client && \
/opt/conda/bin/conda install jupyter -y && \
/opt/conda/bin/conda install --channel https://conda.anaconda.org/menpo opencv3 -y && \
/opt/conda/bin/conda install numpy pandas scikit-learn matplotlib seaborn pyyaml h5py keras -y && \
/opt/conda/bin/conda upgrade dask && \
pip install tensorflow imutils
RUN ["mkdir", "notebooks"]
COPY conf/.jupyter /root/.jupyter
COPY run_jupyter.sh /
# Jupyter and Tensorboard ports
EXPOSE 8888 6006
# Store notebooks in this mounted directory
VOLUME /notebooks
CMD ["/run_jupyter.sh"]
Como puede ver, estamos instalando solo libgtk2.0 para compatibilidad con OpenCV y todos los demás componentes como Terraform, Pandas, Scikit-learn, Matplotlib, Keras y otros que usan el administrador de paquetes conda.
Contenedor en ejecución
Ahora tiene un contenedor de trabajo y es hora de iniciarlo. Cree una carpeta dentro de la carpeta de su proyecto donde almacenaremos todos nuestros Jupyter Noteboos con el código fuente de nuestros proyectos:
mkdir notebooks
E inicie el contenedor con el siguiente comando:
docker run -it -p 8888:8888 -p 6006:6006 \
-d -v $(pwd)/notebooks:/notebooks \
python_data_science_container:anaconda
Iniciará el contenedor y expondrá Jupyter en el puerto 8888
y Tensorflow Dashboard en el puerto 6006
en su computadora local o su servidor dependiendo de dónde haya ejecutado este comando.
Si no desea crear y mantener su propio contenedor, no dude en utilizar mi contenedor personal:
docker run -it -p 8888:8888 -p 6006:6006 -d -v \
$(pwd)/notebooks:/notebooks amaksimov/python_data_science:anaconda
Instalación de paquetes adicionales
Tan pronto como haya lanzado Jupyter, es posible que le falten algunos paquetes y está bien. Siéntase libre de ejecutar el siguiente comando en una celda de su cuaderno Jupyter:
!pip install requests
O para conda:
!conda install scipy
Espero que este artículo te haya resultado útil. Si es así, dale me gusta o vuelve a publicarlo. ¡Hasta pronto!
Resumen
El uso de Anaconda como imagen base hace que la imagen de Docker sea más pesada. Quiero decir REALMENTE pesado.
Por ejemplo:
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
amaksimov/python_data_science anaconda 7021f28dfba1 29 minutes ago 6.36GB
amaksimov/python_data_science latest 3330c8eaec1c 2 hours ago 3.11GB
La instalación de todos los componentes dentro de la imagen del contenedor de Ubuntu 20.04 LTS, incluido OpenCV 3, toma ~7 minutos y la imagen final ~3.11 Gb.
Al mismo tiempo, el proceso de creación del contenedor Anaconda3 lleva el doble de tiempo y le brinda una imagen el doble de grande (~6,36 Gb). El proceso de construcción es mucho más complicado, entonces fue en 2018, y me tomó un tiempo actualizar la configuración a un estado de trabajo.
Esperamos que este artículo le haya resultado útil. Si es así, ¡ayúdanos a difundirlo por todo el mundo!