Umgebungskonstruktion von Keras und Tensorflow, Jupyter-Labor per Docker und Verbindung zu Jupyter per Port-Weiterleitung

Überblick

Erstellen Sie mit Docker eine Keras GPU- und Jupyterlab-Umgebung. Ich werde die Installation von Docker weglassen, um zu sehen, was Docker ist. Außerdem werde ich kurz die Portweiterleitung erläutern.

Bild ziehen

Ziehen Sie das Bild mit dem neuesten GPU-Tag in Tensorflow Docker Hub. Wenn das Tag nur aktuell ist, kann cuda nicht verwendet werden. Hier ist was zu tun ist

$ sudo docker pull tensorflow/tensorflow:latest-gpu

Überprüfen Sie das Bild

$ sudo docker images
REPOSITORY                        TAG                 IMAGE ID            CREATED             SIZE
tensorflow/tensorflow             latest-gpu          20fd065e3887        7 weeks ago         3.15GB

Installieren Sie die Module und den Jupyter, die Sie möglicherweise benötigen

Zu installierendes Modul

Dieses Mal werde ich importieren

Erstellen Sie vor dem Importieren einen Docker-Container aus dem Image. Geben Sie beim Erstellen der Umgebung als root ein.

$ sudo docker run -it tensorflow/tensorflow:latest-gpu

Pip und Apt Updates

# pip install --upgrade pip
# apt-get update -y

Vorbereiten der Installation von opencv

Siehe unten Erstellen einer Python-TensorFlow- und OpenCV-Ausführungsumgebung mit Docker

# apt-get install -y libopencv-dev

Es benötigt viel Zeit.

Installation der erforderlichen Module

# pip install matplotlib opencv-python keras
# pip install jupyterlab

Testen Sie, ob das Modul importiert werden kann

# python
Python 3.6.9 (default, Jul 17 2020, 12:50:27)
[GCC 8.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import matplotlib
>>> import numpy
>>> import cv2
>>> import keras
2020-09-20 01:02:34.313977: I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library libcudart.so.10.1
>>> import tensorflow

Es sieht okay aus. Sie können den interaktiven Modus mit Strg + d verlassen. Ich habe jupyterlab damit installiert, aber ich muss eine Portweiterleitung durchführen, um es auszuführen. Wenn Sie den detaillierten Ausführungsvorgang sehen möchten, lesen Sie diesen Artikel bitte bis zum Ende.

Image Commit

Legen Sie den Container vor dem Testen des Jupyter-Labors für das Image fest. Mit anderen Worten, es speichert den aktuellen Status verschiedener Installationen. Verlassen Sie den Container mit Strg + p, Strg + q.

Überprüfen der aktuell ausgeführten Container

$ sudo docker ps -n=-1
CONTAINER ID        IMAGE                              COMMAND                  CREATED             STATUS              PORTS                  NAMES
a24503258ede        tensorflow/tensorflow:latest-gpu   "/bin/bash"              24 minutes ago      Up 24 minutes                              romantic_gauss

Container-Commit

$ sudo docker commit a24503258ede keras-jupyter

sudo docker commit (Container-ID) (Name des Bildes, das Sie geben möchten). Wenn Sie danach ein Image mit dem Namen keras-jupyter erstellen, wird der Container, den Sie bisher erstellt haben, fertiggestellt.

Behälter stoppen

Stoppen Sie den vorherigen Container einmal.

$ sudo docker stop a245
$ sudo docker ps -n=-1
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES

Die Container-ID antwortet zunächst mit ca. 4 Zeichen.

Informationen zur Portweiterleitung

Ich werde von nun an die Funktionsweise von jupyterlab überprüfen, aber die Portweiterleitung kurz erläutern.

Was ist Portweiterleitung?

Derzeit versuche ich, von meinem eigenen Computer aus eine SSH-Verbindung zum Server herzustellen (siehe Abbildung unten), Docker darauf auszuführen und jupyterlab darauf zu starten. Da jupyterlab jedoch im Browser verarbeitet wird, muss zusätzlich zur ssh-Verbindung eine weitere Verbindungsroute zu jupyterlab erstellt werden.

スクリーンショット 2020-09-20 2.12.33.png

Daher wird das Erstellen einer anderen Verbindungsroute (Tunnel) als ssh, damit Sie auch im Browser eine Verbindung zu jupyter herstellen können, als ** Portweiterleitung ** bezeichnet. Durch Hinzufügen von Optionen zu jedem Befehl, wie in der folgenden Abbildung gezeigt, können Sie zusätzlich zu Port 22 von ssh einen Tunnel öffnen. スクリーンショット 2020-09-20 2.35.37.png スクリーンショット 2020-09-20 2.35.49.png

Dieses Mal wurden jedoch alle Portnummern zur Erläuterung geändert. Es ist jedoch besser, alle Portweiterleitungsports auf 8888 usw. zu vereinheitlichen, um keinen Fehler zu machen. Lassen Sie uns nun überprüfen, ob eine Portweiterleitung durch den jupyterlab-Test möglich ist.

Portweiterleitung an jupyterlab

Port vorwärts in ssh

Stellen Sie zunächst mit ssh eine lokale Verbindung zum Server her.

$ ssh [email protected] -L 8800:x.x.x.x:8880

Fügen Sie Optionen wie -L {lokale Portnummer}: {Server-IP}: {Portnummer, die Sie mit dem Server verbinden möchten} hinzu.

Port vorwärts mit Docker

Fügen Sie den Optionen -p 8880: 8888 hinzu. Wenn auf den Docker vom Server aus zugegriffen wird, ist der Server-Port 8880 mit dem Docker 8888 verbunden.

$ sudo docker run -it -p 8880:8888 keras-jupyter

Dies führte die lokale Nummer 8800 zur Docker-Nummer 8888.

Starten Sie jupyterlab

Starten Sie als nächstes jupyterlab auf dem Container mit dem folgenden Befehl.

# jupyter lab --port 8888 --ip=* --allow-root

Erläuterung der folgenden Befehle

Die Ausgabe ist wie folgt``http://127.0.0.1:8888/?token=614f6e5d410a1c459baa691ee28fdd0e2593c4644189a09e```Kopieren.


[W 02:52:43.023 LabApp] WARNING: The notebook server is listening on all IP addresses and not using encryption. This is not recommended.
[I 02:52:43.028 LabApp] JupyterLab extension loaded from /usr/local/lib/python3.6/dist-packages/jupyterlab
[I 02:52:43.028 LabApp] JupyterLab application directory is /usr/local/share/jupyter/lab
[I 02:52:43.030 LabApp] Serving notebooks from local directory: /
[I 02:52:43.030 LabApp] Jupyter Notebook 6.1.4 is running at:
[I 02:52:43.030 LabApp] http://0829a84d25eb:8888/?token=614f6e5d410a1c459baa691ee28fdd0e2593c4644189a09e
[I 02:52:43.030 LabApp]  or http://127.0.0.1:8888/?token=614f6e5d410a1c459baa691ee28fdd0e2593c4644189a09e
[I 02:52:43.030 LabApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).

###Verbindung zum Jupiter Ändern Sie einen Teil der vorherigen URL wie folgt und fügen Sie ihn in Ihren lokalen Browser ein.

http://localhost:8800/?token=614f6e5d410a1c459baa691ee28fdd0e2593c4644189a09e

Sie können jetzt durch Portweiterleitung eine Verbindung zu dem auf dem Server ausgeführten Jupyter herstellen.

##Beiseite Wenn Sie Docker tatsächlich ausführen, wird das Binden des Benutzers an Docker und Server hier nicht im Detail erläutert. Es ist jedoch besser, den Docker-Ausführungsbefehl als Alias zu registrieren und wie folgt zu verwenden.


alias docker-run-keras = 'sudo docker run -v /etc/group:/etc/group:ro -v /etc/passwd:/etc/passwd:ro -v $HOME:$HOME -u $(id -u $USER):$(id -g $USER) -it --gpus 2 -p 8888:8888 --shm-size 30g keras-jupyter

Recommended Posts

Umgebungskonstruktion von Keras und Tensorflow, Jupyter-Labor per Docker und Verbindung zu Jupyter per Port-Weiterleitung
[Umgebungskonstruktion] Fehler mit Docker starten! Schritte zum Aktivieren von Hyper-V und zum erneuten Starten von Docker
[Docker] Erstellen Sie die Ausführungsumgebung von Jupyter Lab mit Docker
Führen Sie Docker in die Entwicklungs- und Testumgebung vorhandener Rails- und MySQL-Apps ein
Erstellen einer Kaggle-Umgebung mit offiziellem Docker und vscode
Umweltbauweise und Fehlerbehebung zum Zeitpunkt der gemeinsamen Entwicklung (Schienen, Docker und Github)
Booten nach Umgebung mit Spring Boot of Maven
Erstellung einer Datenanalyseumgebung mit Docker (persönliches Memorandum)
[Rails 6.0, Docker] Ich habe versucht, die Konstruktion der Docker-Umgebung und die zum Erstellen eines Portfolios erforderlichen Befehle zusammenzufassen