[Introduction à Docker] Créer une image Docker pour l'apprentissage automatique et utiliser le notebook Jupyter

À propos de cet article

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.

environnement

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

Ce que vous pouvez voir dans cet article

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.

Bibliothèques installées sur l'image Docker

Puisque Python est utilisé, j'ai mis dans une bibliothèque liée à l'apprentissage automatique Python.

Contenu du Dockerfile créé

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"]

Comment créer une image Docker

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

Comment lancer Jupyter-notebook

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.

Ce que j'ai recherché lors de l'écriture d'un Dockerfile

Évitez les installations interactives

--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éduisez le nombre de fois que RUN est utilisé]

--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        

Sommaire

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.

J'ai été autorisé à référencer

Recommended Posts

[Introduction à Docker] Créer une image Docker pour l'apprentissage automatique et utiliser le notebook Jupyter
Utilisez Jenkins pour créer dans Docker, puis créez une image Docker.
Créez une image Docker pour redoc-cli et enregistrez-la sur Docker Hub
[Docker] Comment créer un environnement virtuel pour les applications Rails et Nuxt.js
Créez un notebook Jupyter avec Docker et exécutez ruby
J'ai essayé d'utiliser Wercker pour créer et publier une image Docker qui lance GlassFish 5
Comment créer une image de conteneur légère pour les applications Java
Comment créer et lancer un Dockerfile pour Payara Micro
2. Créez une image Docker et enregistrez le registre
[Pour ceux qui créent des portefeuilles] Comment utiliser binding.pry avec Docker
Installons Docker sur Windows 10 et créons un environnement de vérification pour CentOS 8!
J'ai essayé de créer une application d'apprentissage automatique avec Dash (+ Docker) part1 ~ Construction de l'environnement et vérification du fonctionnement ~
Script Shell qui construit une image Docker et la pousse vers ECR
Manuel Docker Compact (4: Créer une image personnalisée)
J'ai créé une application d'apprentissage automatique avec Dash (+ Docker) part3 ~ Practice ~
Comment créer une base de données H2 n'importe où
Comment créer des pages pour le tableau "kaminari"
[Java] Créons un Minecraft Mod 1.14.4 [Introduction]
[Java] Créons un Minecraft Mod 1.16.1 [Introduction]
Créer un environnement Docker pour Oracle 11g XE
Comment créer un en-tête ou un pied de page une fois et l'utiliser sur une autre page
Introduction à l'apprentissage automatique avec Spark "Estimation de prix" # 3 Apprenons avec les données d'entraînement et créons un [moteur d'estimation de prix]
Comment quitter Docker pour Mac et créer un environnement de développement Docker avec Ubuntu + Vagrant
J'ai créé une image Docker pour la version japonaise de SDAPS
Créer une image docker pour exécuter une application Java simple
[Introduction] Créer une application Ruby on Rails
Comment créer l'application Docker + Springboot (pour l'apprentissage de base)
Comment utiliser un tableau pour la clé TreeMap
Comment déployer à partir d'une image Docker locale vers Heroku
[Spring Boot] Comment créer un projet (pour les débutants)
Créer un conteneur Docker pour convertir EPS en source PGF
[Pour ceux qui créent des portfolios] Comment utiliser font-awesome-rails
Introduction à la programmation pour les étudiants du Collège: création de canevas
Je souhaite créer une annotation générique pour un type
Si vous souhaitez transformer une application Java en une image Docker, il est pratique d'utiliser jib.
[Rails 6.0, Docker] J'ai essayé de résumer la construction de l'environnement Docker et les commandes nécessaires pour créer un portfolio
Avec podman dans docker, tout le monde veut s'entendre et utiliser docker avec un ordinateur partagé
Peut-être que ça marche! Créez une image avec Docker et partagez-la!
Introduction à Effective Java en pratiquant et en apprenant (modèle Builder)
Tutoriel pour créer un blog avec Rails pour les débutants Partie 1
[Introduction à Docker] ~ Explication la plus courte jusqu'au démarrage de jupyter lab ~
Créez une image Docker avec le JDK Oracle installé (miam
Comment créer une partie d'espace réservé à utiliser dans la clause IN
[Pour ceux qui créent des portefeuilles] Comment utiliser Chart kick
[Kotlin] Ressources et conseils pour apprendre un nouveau langage de programmation
Comment utiliser l'icône Font Awesome pour ul et li
[Notes personnelles] Comment pousser une image Docker vers des packages GitHub
Tutoriel pour créer un blog avec Rails pour les débutants Partie 2
Procédures pour transmettre RealmObject à Fragment et comment utiliser Parceler
J'ai essayé de créer un environnement de développement padrino avec Docker
Étudiez Java: utilisez Timer pour créer quelque chose comme un minuteur de bombe
Tutoriel pour créer un blog avec Rails pour les débutants Partie 0
Introduction à la programmation pour les étudiants du Collège: dessiner des lignes droites
[Enum_help] Utilisez enum_help pour créer une boîte de sélection affichée en japonais!
J'ai créé une application d'apprentissage automatique avec Dash (+ Docker) part2 ~ Façon basique d'écrire Dash ~