Construisez les environnements gpu et jupyterlab de Keras avec docker. J'omettrai l'installation de docker pour voir ce qu'est docker. De plus, j'expliquerai brièvement la redirection de port.
Tirez l'image avec la dernière balise gpu dans tensorflow docker hub. Si le tag est le plus récent, cuda ne peut pas être utilisé. Voici quoi faire
$ 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
Cette fois je vais importer
Créez un conteneur Docker à partir de l'image avant l'importation. Entrez en tant que root lors de la création de l'environnement.
$ sudo docker run -it tensorflow/tensorflow:latest-gpu
# pip install --upgrade pip
# apt-get update -y
Voir ci-dessous Création d'un environnement d'exécution Python TensorFlow et OpenCV avec Docker
# apt-get install -y libopencv-dev
Ça prend beaucoup de temps.
# 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
Ça a l'air bien. Vous pouvez quitter le mode interactif avec `` Ctrl + d ''. J'ai installé jupyterlab avec ceci, mais je dois faire une redirection de port pour l'exécuter. Si vous souhaitez voir la procédure d'exécution détaillée, veuillez lire cet article jusqu'à la fin.
Avant de tester le laboratoire jupyter, validez le conteneur dans l'image. En d'autres termes, il enregistre l'état actuel de diverses installations. Quittez le conteneur en exécutant `` Ctrl + p, Ctrl + 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 (ID de conteneur) (nom de l'image que vous souhaitez donner)
. Après cela, si vous créez une image nommée keras-jupyter, le conteneur que vous avez créé jusqu'à présent sera terminé.
Arrêtez le conteneur précédent une fois.
$ sudo docker stop a245
$ sudo docker ps -n=-1
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
L'ID de conteneur répond d'abord avec environ 4 caractères.
Je vais vérifier le fonctionnement de jupyterlab à partir de maintenant, mais je vais expliquer brièvement la redirection de port.
Actuellement, j'essaie de connecter ssh au serveur à partir de mon propre ordinateur personnel comme indiqué dans la figure ci-dessous, d'exécuter docker dessus et de démarrer jupyterlab dessus. Cependant, comme jupyterlab est géré sur le navigateur, il est nécessaire de créer une autre route de connexion vers jupyterlab en plus de la connexion ssh.
Par conséquent, la création d'une route de connexion (tunnel) autre que ssh afin que vous puissiez vous connecter à jupyter même sur le navigateur s'appelle ** redirection de port **. En ajoutant des options à chaque commande comme indiqué dans la figure ci-dessous, vous pouvez ouvrir un tunnel en plus du port 22 de ssh.
Cependant, cette fois, tous les numéros de port ont été modifiés pour des raisons d'explication, mais il serait préférable d'unifier tous les ports de redirection de port sur 8888 etc. afin de ne pas faire d'erreur. Maintenant, vérifions si la redirection de port est effectuée via le test jupyterlab.
Tout d'abord, connectez-vous au serveur localement avec ssh.
$ ssh [email protected] -L 8800:x.x.x.x:8880
Ajoutez des options telles que -L {numéro de port local}: {ip serveur}: {numéro de port que vous souhaitez connecter avec le serveur}
.
Ajoutez `` -p 8880: 8888 '' aux options. En conséquence, lorsque le docker est accédé à partir du serveur, le port du serveur 8880 est connecté au docker 8888.
$ sudo docker run -it -p 8880:8888 keras-jupyter
Cela a conduit le numéro local 8800 au numéro docker 8888.
Ensuite, démarrez jupyterlab sur le conteneur avec la commande suivante.
# jupyter lab --port 8888 --ip=* --allow-root
Explication des commandes suivantes
--ip = *
)La sortie est la suivante``http://127.0.0.1:8888/?token=614f6e5d410a1c459baa691ee28fdd0e2593c4644189a09e```Copie.
[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).
###Connexion à Jupyter Modifiez une partie de l'url précédente comme suit et collez-la dans votre navigateur local.
http://localhost:8800/?token=614f6e5d410a1c459baa691ee28fdd0e2593c4644189a09e
Vous pouvez maintenant vous connecter au jupyter fonctionnant sur le serveur par redirection de port.
##De côté Lors de l'exécution de docker, la liaison de l'utilisateur avec docker et serveur n'est pas expliquée en détail ici, mais il est préférable d'enregistrer la commande docker run dans alias et de l'utiliser comme suit.
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