Ceci est un article de mémoire au cas où vous oublieriez d'utiliser Docker parce que vous avez déplacé l'environnement d'apprentissage de l'apprentissage automatique vers Docker.
Comme il s'agit d'une prémisse de base Mac, je n'ai pas écrit de commandes pour Windows.
GitHub Le Dockerfile présenté dans cet article est publié sur GitHub. GitHub:/kuboshu/pythonml
Comment créer une image Docker avec une bibliothèque d'apprentissage automatique installée et jouer avec l'apprentissage automatique à l'aide du conteneur Jupyter-notebook de l'extérieur.
Puisque Python est utilisé, j'ai mis dans une bibliothèque liée à l'apprentissage automatique Python.
Créé basé sur Ubuntu 20.04. J'installe simplement le paquet Python avec pip, donc je ne fais rien de spécial.
FROM ubuntu:20.04
LABEL maintainer="kuboshu83"
ENV DEBIAN_FRONTEND noninteractive
ARG INSTALLDIR_PYOCR="/app/ocr"
RUN apt-get update && \
apt-get -y upgrade && \
apt-get install -y git \
make \
cmake \
gcc \
g++ \
wget \
zip \
curl && \
# ~~~~~Installation de Python~~~~~
apt-get install -y python3 python3-pip && \
ln -s $(which python3) $(dirname $(which python3))/python && \
ln -s $(which pip3) $(dirname $(which python3))/pip && \
# ~~~~~Installation de bibliothèques liées au ML pour Python~~~~~
#Tensorflow et Pytorch sont volumineux, alors commentez-les si vous n'en avez pas besoin.
#La capacité estimée est le tensorflow=1.2GB, pytorch=C'est 2 Go.
# Tensorflow,Il s'agit d'environ 2 Go pour les bibliothèques de type ML autres que Pytorch.
pip install pystache \
numpy==1.18.5 \
pandas \
scikit-learn \
matplotlib \
jupyterlab \
pycaret \
lightgbm \
alembic==1.4.1 \
sqlalchemy==1.3.13 \
optuna && \
pip install tensorflow && \
pip install torch torchvision && \
# ~~~~~Installation d'OpenCV~~~~~
pip install opencv-python && \
apt-get install -y libgl1-mesa-dev && \
# ~~~~Installez Tesseract~~~~~
apt-get install -y libleptonica-dev tesseract-ocr && \
# ~~~~Installez PyOCR~~~~~
pip install pyocr && \
mkdir -p /usr/local/share/tessdata/ && \
curl https://raw.githubusercontent.com/tesseract-ocr/tessdata_best/master/jpn.traineddata -sS -L -o /usr/share/tesseract-ocr/4.00/tessdata/jpn.traineddata && \
# ~~~~Installez MeCab~~~~
apt-get install -y mecab libmecab-dev mecab-ipadic && \
pip install --no-binary :all: mecab-python3 && \
pip install neologdn && \
#~~~~Créer un répertoire de travail~~~~
mkdir -p /home/share
#Lancer le shell Python par défaut
CMD ["python"]
Vous pouvez créer l'image Docker avec la commande suivante. De plus, comme la même commande est décrite dans build.sh sur Github, vous pouvez également créer l'image en exécutant build.sh.
docker build -t nom de l'image:Emplacement de la version Dockerfile
Si vous créez share / dans le répertoire courant et exécutez la commande suivante, Jupyter-notebook démarrera à côté du conteneur. Après cela, vous pouvez utiliser Jupyter-notebook en ouvrant l'URL affichée avec un navigateur. Veuillez spécifier une version appropriée de l'image Docker. Dans l'exemple ci-dessous, la v0.1.0 est utilisée.
#Du conteneur/home/Créer un répertoire à partager avec share
> mkdir share
#Démarrez le conteneur.
# -rm:Supprimez le conteneur en même temps que le conteneur est arrêté.
# -it:Requis pour utiliser le terminal avec le conteneur.
#Jupyter comme cette fois-Ce n'est pas nécessaire si vous utilisez simplement un ordinateur portable, mais il est en quelque sorte inclus.
# -p :Attribuez le port 8888 sur l'hôte au port 8888 sur le conteneur.
# -v :l'hôte(Répertoire actuel)/share/Le conteneur/home/share/Monter sur.
# -w :Le répertoire actuel du conteneur au démarrage du conteneur/home/share/À.
# Jupyter-Le laboratoire fonctionne sur le port 8888.
> docker run --rm -it -p 8888:8888 -w /home/share -v $(pwd)/share:/home/share pythonml:v0.1.0 /usr/local/bin/jupyter lab --ip=0.0.0.0 --port 8888 --allow-root
Lorsque vous démarrez le conteneur, / home / share / prepare for work devient le répertoire courant, il est donc facile à utiliser si vous le partagez avec le répertoire côté hôte.
--Pour référence (DEBIAN_FRONTEND = non-interactive: qiita @ udzura)
Je veux créer l'image Docker de manière complètement automatique, donc je ne veux pas qu'on me demande de la définir manuellement lors de l'installation des packages, donc je voulais désactiver le paramètre interactif au moment de l'installation, j'ai donc défini les éléments suivants comme variables d'environnement.
ENV DEBIAN_FRONTEND noninteractive
--Référencé (Tutoriel visant à comprendre l'image Docker: qiita @ zembutsu)
Au début, j'ai beaucoup utilisé la commande RUN sans penser à rien, mais lorsque j'ai vérifié l'image avec l'image docker ls -a, l'image de la couche intermédiaire a été produite en masse comme indiqué ci-dessous. Apparemment, Docker crée une couche intermédiaire à chaque fois que vous utilisez une commande dans un Dockerfile, et synthétise enfin les couches intermédiaires pour créer l'image finale. Par conséquent, nous avons réduit au maximum le nombre d'instructions utilisées.
Je ne sais pas encore car je ne comprends pas s'il y a un problème avec de nombreuses couches intermédiaires. Cependant, lorsque j'ai affiché la liste d'images, je me sentais mal à l'aise qu'il y ait beaucoup de \ <aucun >, alors j'ai essayé de réduire le nombre de couches intermédiaires.
REPOSITORY TAG IMAGE ID
pythonml v0.1.0 xxxxxx
<none> <none> xxxxxx <=Comme ça
<none> <none> xxxxxx <=Comme ça
<none> <none> xxxxxx <=Comme ça
<none> <none> xxxxxx <=Comme ça
<none> <none> xxxxxx <=Comme ça
<none> <none> xxxxxx <=Comme ça
<none> <none> xxxxxx <=Cela aussi
ubuntu 20.04 xxxxxx
Cette fois, je viens de créer une image Docker avec le package Python installé et j'ai noté comment créer un environnement pour jouer avec l'apprentissage automatique à l'aide de Jupyter-notebook de l'hôte. J'ai encore des bibliothèques avec lesquelles je veux jouer, alors j'aimerais les ajouter à l'avenir.
Aussi, cette fois, nous donnons la priorité à l'apparence du Dockerfile, et comme toutes les bibliothèques sont placées avec apt-get ou pip, il existe des versions plus anciennes. Donc, je voudrais construire à partir du code source et installer la dernière version si j'ai le temps.