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.
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
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
tensorflow/tensorflow latest-gpu 20fd065e3887 7 weeks ago 3.15GB
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 install --upgrade pip
# apt-get update -y
Siehe unten Erstellen einer Python-TensorFlow- und OpenCV-Ausführungsumgebung mit Docker
# apt-get install -y libopencv-dev
Es benötigt viel Zeit.
# pip install matplotlib opencv-python keras
# pip install jupyterlab
# 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.
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
.
$ 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
$ 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.
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.
Ich werde von nun an die Funktionsweise von jupyterlab überprüfen, aber die Portweiterleitung kurz erläutern.
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.
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.
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.
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.
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 als nächstes jupyterlab auf dem Container mit dem folgenden Befehl.
# jupyter lab --port 8888 --ip=* --allow-root
Erläuterung der folgenden Befehle
--port 8888
)--ip = *
) --allow-root
)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