[Einführung in Docker] Erstellen Sie ein Docker-Image für maschinelles Lernen und verwenden Sie das Jupyter-Notizbuch

Über diesen Artikel

Dies ist ein Memorandum-Artikel für den Fall, dass Sie vergessen, Docker zu verwenden, weil Sie die Lernumgebung des maschinellen Lernens auf Docker verschoben haben.

Umgebung

Da es sich um eine grundlegende Mac-Prämisse handelt, habe ich keine Befehle für Windows geschrieben.

GitHub Die in diesem Artikel vorgestellte Docker-Datei wird auf GitHub veröffentlicht. GitHub:/kuboshu/pythonml

Was Sie in diesem Artikel sehen können

So erstellen Sie ein Docker-Image mit einer installierten Bibliothek für maschinelles Lernen und spielen mit maschinellem Lernen mithilfe des Jupyter-Notebook-Containers von außen.

Auf dem Docker-Image installierte Bibliotheken

Da Python verwendet wird, habe ich eine Bibliothek zum maschinellen Lernen von Python eingerichtet.

Inhalt der erstellten Docker-Datei

Erstellt basierend auf Ubuntu 20.04. Ich installiere im Grunde nur das Python-Paket mit pip, also mache ich nichts Besonderes.

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 && \
    # ~~~~~Python-Installation~~~~~
    apt-get install -y python3 python3-pip && \
    ln -s $(which python3) $(dirname $(which python3))/python  && \
    ln -s $(which pip3) $(dirname $(which python3))/pip && \
    # ~~~~~Installation von ML-bezogenen Bibliotheken für Python~~~~~
    #Tensorflow und Pytorch sind groß. Kommentieren Sie sie aus, wenn Sie sie nicht benötigen.
    #Die geschätzte Kapazität ist der Tensorfluss=1.2GB, pytorch=Es ist 2 GB.
    # Tensorflow,Für andere ML-ähnliche Bibliotheken als Pytorch sind es ungefähr 2 GB.
    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 && \
    # ~~~~~OpenCV-Installation~~~~~
    pip install opencv-python && \
    apt-get install -y libgl1-mesa-dev && \
    # ~~~~Installieren Sie Tesseract~~~~~
    apt-get install -y libleptonica-dev tesseract-ocr && \
    # ~~~~Installieren Sie 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 && \
    # ~~~~Installieren Sie MeCab~~~~
    apt-get install -y mecab libmecab-dev mecab-ipadic && \
    pip install --no-binary :all: mecab-python3 && \
    pip install neologdn && \
    #~~~~Arbeitsverzeichnis erstellen~~~~
    mkdir -p /home/share

#Starten Sie die Python-Shell standardmäßig
CMD ["python"]

So erstellen Sie ein Docker-Image

Sie können das Docker-Image mit dem folgenden Befehl erstellen. Da der gleiche Befehl in build.sh auf Github beschrieben ist, können Sie das Image auch erstellen, indem Sie build.sh ausführen.

docker build -t Bildname:Speicherort der Version Dockerfile

So starten Sie Jupyter-Notebook

Wenn Sie share / im aktuellen Verzeichnis erstellen und den folgenden Befehl ausführen, wird Jupyter-notebook neben dem Container gestartet. Danach können Sie Jupyter-Notebook verwenden, indem Sie die angezeigte URL mit einem Browser öffnen. Bitte geben Sie eine geeignete Version des Docker-Images an. Im folgenden Beispiel wird v0.1.0 verwendet.

#Vom Container/home/Erstellen Sie ein Verzeichnis, das Sie mit share teilen möchten
> mkdir share

#Starten Sie den Container.
# -rm:Löschen Sie den Container gleichzeitig mit dem Stoppen des Containers.
# -it:Erforderlich, um das Terminal mit dem Container zu verwenden.
#Jupyter mag diesmal-Es ist unnötig, wenn Sie nur ein Notebook verwenden, aber irgendwie ist es enthalten.
# -p :Weisen Sie Port 8888 auf dem Host Port 8888 auf dem Container zu.
# -v :Gastgeber(Aktuelles Verzeichnis)/share/Der Kontainer/home/share/Montieren auf.
# -w :Das aktuelle Verzeichnis des Containers, wenn der Container gestartet wird/home/share/Zu.
# Jupyter-Das Labor läuft auf 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

Wenn Sie den Container starten, wird / home / share / für die Arbeit vorbereitet zum aktuellen Verzeichnis. Daher ist es einfach zu verwenden, wenn Sie dies für das Verzeichnis auf der Hostseite freigeben.

Was ich beim Schreiben einer Docker-Datei nachgeschlagen habe

Vermeiden Sie interaktive Installationen

Ich möchte das Docker-Image vollständig automatisch erstellen, daher möchte ich nicht aufgefordert werden, es bei der Installation von Paketen manuell festzulegen. Daher wollte ich die interaktive Einstellung zum Zeitpunkt der Installation deaktivieren und daher Folgendes als Umgebungsvariablen festlegen.

ENV DEBIAN_FRONTEND noninteractive

[Reduzieren Sie die Häufigkeit, mit der RUN verwendet wird]

--Referenziert (Tutorial zum Verständnis des Docker-Bildes: qiita @ zembutsu)

Zuerst habe ich den Befehl RUN häufig verwendet, ohne über irgendetwas nachzudenken, aber als ich das Bild mit dem Docker-Bild ls -a überprüfte, wurde das Bild der Zwischenschicht wie unten gezeigt in Massenproduktion hergestellt. Anscheinend erstellt Docker jedes Mal, wenn Sie einen Befehl in einer Docker-Datei verwenden, eine Zwischenebene und synthetisiert schließlich die Zwischenebenen, um das endgültige Bild zu erstellen. Aus diesem Grund haben wir die Anzahl der verwendeten Anweisungen so weit wie möglich reduziert.

Ich weiß es noch nicht, weil ich nicht verstehe, ob es ein Problem mit vielen mittleren Schichten gibt. Als ich jedoch die Bildliste anzeigte, fühlte ich mich unwohl, dass es viele \ <keine > gab, also versuchte ich, die Anzahl der Zwischenebenen zu reduzieren.

REPOSITORY          TAG       IMAGE ID      
pythonml            v0.1.0    xxxxxx        
<none>              <none>    xxxxxx        <=So was
<none>              <none>    xxxxxx        <=So was
<none>              <none>    xxxxxx        <=So was
<none>              <none>    xxxxxx        <=So was
<none>              <none>    xxxxxx        <=So was
<none>              <none>    xxxxxx        <=So was
<none>              <none>    xxxxxx        <=Das auch
ubuntu              20.04     xxxxxx        

Zusammenfassung

Dieses Mal habe ich gerade ein Docker-Image mit dem installierten Python-Paket erstellt und mir notiert, wie eine Umgebung erstellt wird, in der mit Jupyter-Notebook vom Host aus mit maschinellem Lernen gespielt werden kann. Ich habe noch einige Bibliotheken, mit denen ich spielen möchte, daher möchte ich sie in Zukunft hinzufügen.

Auch dieses Mal geben wir dem Erscheinungsbild der Docker-Datei Priorität. Da alle Bibliotheken mit apt-get oder pip abgelegt sind, gibt es ältere Versionen. Wenn ich Zeit habe, möchte ich aus dem Quellcode erstellen und die neueste Version installieren.

Ich durfte mich beziehen

Recommended Posts

[Einführung in Docker] Erstellen Sie ein Docker-Image für maschinelles Lernen und verwenden Sie das Jupyter-Notizbuch
Verwenden Sie Jenkins, um in Docker zu erstellen und dann ein Docker-Image zu erstellen.
Erstellen Sie ein Docker-Image für redoc-cli und registrieren Sie es auf Docker Hub
[Docker] So erstellen Sie eine virtuelle Umgebung für Rails- und Nuxt.js-Apps
Erstellen Sie mit Docker ein Jupyter-Notizbuch und führen Sie Ruby aus
Ich habe versucht, mit Wercker ein Docker-Image zu erstellen und zu veröffentlichen, mit dem GlassFish 5 gestartet wird
So erstellen Sie ein leichtes Container-Image für Java-Apps
So erstellen und starten Sie eine Docker-Datei für Payara Micro
2. Erstellen Sie ein Docker-Image und registrieren Sie die Registrierung
[Für diejenigen, die Portfolios erstellen] Verwendung von binding.pry mit Docker
Lassen Sie uns Docker unter Windows 10 installieren und eine Überprüfungsumgebung für CentOS 8 erstellen!
Ich habe versucht, eine Anwendung für maschinelles Lernen mit Dash (+ Docker) Teil 1 ~ Umgebungskonstruktion und Funktionsprüfung ~ zu erstellen
Shell-Skript, das ein Docker-Image erstellt und an ECR weiterleitet
Docker Compact Manual (4: Erstellen eines benutzerdefinierten Bildes)
Ich habe eine App für maschinelles Lernen mit Dash (+ Docker) Teil 3 ~ Übung ~ erstellt
So erstellen Sie überall eine H2-Datenbank
So erstellen Sie Pagenationen für das "Kaminari" -Array
[Java] Erstellen wir einen Minecraft Mod 1.14.4 [Einführung]
[Java] Erstellen wir einen Minecraft Mod 1.16.1 [Einführung]
Erstellen Sie eine Docker-Umgebung für Oracle 11g XE
So erstellen Sie eine Kopf- oder Fußzeile einmal und verwenden sie auf einer anderen Seite
Einführung in das maschinelle Lernen mit Spark "Preisschätzung" # 3 Lernen wir mit Trainingsdaten und erstellen eine [Preisschätzungs-Engine]
So beenden Sie Docker für Mac und erstellen eine Docker-Entwicklungsumgebung mit Ubuntu + Vagrant
Ich habe ein Docker-Image für die japanische Version von SDAPS erstellt
Erstellen Sie ein Docker-Image, um eine einfache Java-App auszuführen
[Einführung] Erstellen Sie eine Ruby on Rails-Anwendung
So erstellen Sie die Docker + Springboot-App (für grundlegendes Lernen)
So verwenden Sie ein Array für den TreeMap-Schlüssel
Bereitstellen von einem lokalen Docker-Image auf Heroku
[Spring Boot] So erstellen Sie ein Projekt (für Anfänger)
Erstellen Sie einen Docker-Container, um EPS in eine PGF-Quelle zu konvertieren
[Für diejenigen, die Portfolios erstellen] Verwendung von Font-Awesome-Rails
Einführung in die Programmierung für Studenten: Erstellen von Canvas
Ich möchte eine generische Anmerkung für einen Typ erstellen
Wenn Sie eine Java-Anwendung in ein Docker-Image verwandeln möchten, ist es praktisch, Jib zu verwenden.
[Rails 6.0, Docker] Ich habe versucht, die Konstruktion der Docker-Umgebung und die zum Erstellen eines Portfolios erforderlichen Befehle zusammenzufassen
Mit Podman im Docker möchte jeder miteinander auskommen und Docker mit einem gemeinsam genutzten Computer verwenden
Vielleicht funktioniert es! Erstellen Sie ein Bild mit Docker und teilen Sie es!
Einführung in effektives Java durch Üben und Lernen (Builder-Muster)
Tutorial zum Erstellen eines Blogs mit Rails für Anfänger Teil 1
[Einführung in Docker] ~ Kürzeste Erklärung bis zum Start von Jupyter Lab ~
Erstellen Sie ein Docker-Image mit installiertem Oracle JDK (yum
So erstellen Sie ein Platzhalterteil zur Verwendung in der IN-Klausel
[Für diejenigen, die Portfolios erstellen] Verwendung von Chart Kick
[Kotlin] Ressourcen und Tipps zum Erlernen einer neuen Programmiersprache
So verwenden Sie das Font Awesome-Symbol für ul und li
[Persönliche Notizen] So verschieben Sie ein Docker-Image in GitHub-Pakete
Tutorial zum Erstellen eines Blogs mit Rails für Anfänger Teil 2
Verfahren zum Übergeben von RealmObject an Fragment und zur Verwendung von Parceler
Ich habe versucht, mit Docker eine Padrino-Entwicklungsumgebung zu erstellen
Java lernen: Verwenden Sie Timer, um so etwas wie einen Bomben-Timer zu erstellen
Tutorial zum Erstellen eines Blogs mit Rails für Anfänger Teil 0
Einführung in die Programmierung für Studenten: Zeichnen Sie gerade Linien
[Enum_help] Verwenden Sie enum_help, um ein Auswahlfeld zu erstellen, das auf Japanisch angezeigt wird!
Ich habe eine App für maschinelles Lernen mit Dash (+ Docker) Teil 2 ~ Grundlegende Schreibweise für Dash ~ erstellt