In questo articolo creeremo un contenitore Docker per l'ambiente di sviluppo di Machine Learning (ML). Questa immagine è molto utile se stai sviluppando modelli ML o hai bisogno di un notebook Jupyter preconfigurato con alcune delle librerie più utili.
Di recente abbiamo pubblicato un articolo Introduzione rapida e semplice ai grafici Helm di Kubernetes in 10 minuti, in cui puoi trovare istruzioni su come utilizzare Helm per distribuire questo container nel tuo cluster Kubernetes.
Aggiornamento per il 2020
- Aggiornato a Python 3.6.
- Risolti molti problemi di build.
L'ultima volta che abbiamo creato il container Docker con Jupiter, Keras, Tensorflow, Pandas, Sklearn e Matplotlib. Improvvisamente, ho capito che mi mancava OpenCV per le manipolazioni di immagini e video Docker. Bene, ho passato l'intera giornata a preparare la nuova build dell'immagine. E in questo articolo ti mostrerò come farlo molto più velocemente utilizzando l'immagine Docker ufficiale di Anaconda.
Ci sono due modi per farlo.
Modo semplice
Questo processo richiede circa 7 minuti per creare il contenitore di 3,11 Gb di dimensione.
Via Anaconda
Quando ho iniziato a giocare con ML nel 2018, Anaconda era un modo super veloce e semplice per creare un container Docker per esperimenti ML. È stato molto più veloce, quindi, compilare OpenCV 3 per Ubuntu 16.04. Oggi è viceversa.
Sto utilizzando le stesse fonti, ma sto cambiando Dockerfile
.
Ecco come appare:
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"]
Come puoi vedere, stiamo installando solo libgtk2.0 per il supporto OpenCV e tutti gli altri componenti come Terraform, Pandas, Scikit-learn, Matplotlib, Keras e altri utilizzando il gestore di pacchetti conda.
Contenitore in esecuzione
Ora hai un container funzionante ed è ora di avviarlo. Crea una cartella all'interno della cartella del tuo progetto dove memorizzeremo tutti i nostri Jupyter Noteboo con il codice sorgente dei nostri progetti:
mkdir notebooks
E avvia il contenitore con il seguente comando:
docker run -it -p 8888:8888 -p 6006:6006 \
-d -v $(pwd)/notebooks:/notebooks \
python_data_science_container:anaconda
Avvierà il container ed esporrà Jupyter sulla porta 8888
e Tensorflow Dashboard sulla porta 6006
sul tuo computer locale o sul tuo server a seconda di dove hai eseguito questo comando.
Se non desideri creare e mantenere il tuo contenitore, sentiti libero di utilizzare il mio contenitore personale:
docker run -it -p 8888:8888 -p 6006:6006 -d -v \
$(pwd)/notebooks:/notebooks amaksimov/python_data_science:anaconda
Installazione di pacchetti aggiuntivi
Non appena hai avviato Jupyter, alcuni pacchetti potrebbero mancare per te ed è OK. Sentiti libero di eseguire il seguente comando in una cella del tuo notebook Jupyter:
!pip install requests
O per conda:
!conda install scipy
Spero che questo articolo ti sia stato utile. Se è così, metti mi piace o ripubblicalo. A presto!
Riepilogo
L'utilizzo di Anaconda come immagine di base rende pesante l'immagine Docker. Intendo DAVVERO pesante.
Ad esempio:
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
L'installazione di tutti i componenti all'interno dell'immagine del contenitore Ubuntu 20.04 LTS, incluso OpenCV 3, richiede circa 7 minuti e l'immagine finale è di circa 3,11 Gb.
Allo stesso tempo, il processo di creazione del contenitore Anaconda3 richiede x2 volte più tempo e ti dà un'immagine x2 volte più grande (~6,36 Gb). Il processo di costruzione è molto più complicato rispetto al 2018 e mi ci è voluto un po' per aggiornare la configurazione a uno stato funzionante.
Ci auguriamo che tu abbia trovato utile questo articolo. Se è così, per favore, aiutaci a diffonderlo nel mondo!