Accédez à distance à votre serveur jupyter notebook
J'ai une machine dédiée au deep learning à mon labo. Elle est vraiment pas mal, avec 20 coeurs CPU, 64 Go de RAM, beaucoup d'espace sur SSD pour mes données, et surtout deux GeForce GTX 1080 Ti.
Malheureusement, elle est derrière un firewall et n'est pas directement accessible depuis l'extérieur. Mais souvent, je suis au CERN, ou je travaille à la maison faute de temps pour me taper les bouchons lyonnais (pas les restos, les autres).
Dans cet article, je vais expliquer comment je m'y prend pour créer et utiliser des notebooks jupyter sur une machine distante.
Vous allez apprendre comment:
Cela vous prendra peut être une dizaine de minutes pour mettre tout en place la première fois, mais ça vaut vraiment le coup. Ensuite, il ne vous faudra que quelques secondes pour établir la connection avec vos notebooks distants.
Les ordinateurs impliqués sont les suivants:
Cette configuration est assez typique de ce qu'on peut trouver dans les labos de recherche ou les entreprises.
Dans cette situation, la plupart des physiciens feraient la chose suivante (et je suis passé par là):
Ça marche car nous avons utilisé ssh avec l'option -X, qui permet de réacheminer X11, c'est à dire les applications graphiques. Mais cela pose plusieurs problèmes:
La solution est d'ouvrir le navigateur localement, et de router tout le traffic entre le navigateur et le serveur jupyter qui tourne sur deeplearning, à travers portal.
Si votre machine locale tourne sous macOS ou Linux, exécutez la commande suivante:
ssh -L 2222:deeplearning:22 -L 8889:deeplearning:8889 portal
Bien sûr, il vous faut remplacer deeplearning et portal par les adresses de ces machines dans votre cas.
Cette commande établit une connexion ssh cryptée vers portal. Chaque option -L spécifie le réacheminement d'un port:
-L 2222:deeplearning:22 réachemine le port 2222 sur la machine locale vers le port 22 sur deeplearning. Lorsque c'est fait, se connecter au port 2222 sur la machine locale est équivalent à se connecter sur le port 22 de deeplearning. Or, le port 22 est celui sur lequel écoutent les serveurs ssh. Vous pouvez donc maintenant faire:
ssh -p 2222 localhost
Ceci établit une connection ssh vers le port 2222 de la machine locale, et hop! Grâce au réacheminement de port, vous vous retrouvez connecté par ssh à deeplearning.
L'autre port, 8889, sera utilisé plus tard pour jupyter.
Installez PuTTY , qui contient un client ssh, et lancez cette application.
Dans la fenêtre Session, entrez le hostname ou l'adresse IP de portal. Ne touchez pas au reste, et sauvez cette session pour plus tard.
Ensuite, dans Connection-SSH-Tunnels, réacheminez le port local 2222 vers le port 22 sur deeplearning, et le port local 8889 vers le port 8889 sur deeplearning.
Retournez dans Session, sauvez à nouveau pour enregistrer vos changements sur le réacheminement de port, et cliquez sur Open pour ouvrir une session ssh vers portal. Une fenêtre terminal s'ouvre. Entrez votre nom d'utilisateur et votre mot de passe.
Une fois loggué sur portal, connectez vous par ssh sur deeplearning comme d'habitude pour démarrer le serveur jupyter, comme expliqué dans la section suivante.
Après vous être loggué sur deeplearning comme expliqué ci-dessus, vous pouvez démarrer le serveur jupyter. N'oubliez pas d'initialiser d'abord votre environnement conda si nécessaire.
jupyter notebook --no-browser --port=8889 --ip=0.0.0.0
Voici ce que font les options:
Maintenant, sur votre machine locale, ouvrez un navigateur et tapez cette url dans la barre d'adresse:
http://localhost:8889
Le navigateur se connecte alors au port 8889 de la machine locale, qui est réacheminé vers le port 8889 sur deeplearning, sur lequel le serveur jupyter écoute.
Lors de votre première connexion, vous devrez mettre en place un mot de passe pour votre serveur jupyter. Contentez-vous de suivre les instructions.
Et voilà ! Vous avez maintenant accès au serveur jupyter distant depuis votre navigateur local.
Vous ne voulez probablement pas avoir à démarrer le serveur jupyter à chaque fois que vous voulez travailler depuis l'extérieur.
Si vous voulez éviter ça, vous pouvez démarrer le serveur avec nohup:
nohup jupyter notebook --no-browser --port=8889 --ip=0.0.0.0 &
Après cela, vous pouvez vous délogguer, et le serveur continuera à tourner sur deeplearning jusqu'à ce qu'il soit stoppé, soit manuellement, soit lors d'un redémarrage de la machine.
La prochaine fois, les seules choses que vous aurez à faire pour vous connecter au serveur sont:
Dans cet article, vous avez appris comment:
J'espère que ce petit tuto vous facilitera la vie.
Veuillez noter que le réacheminement de port peut évidemment être utilisé pour accéder à d'autres types de serveurs derrière un firewall.
N'hésitez pas à me donner votre avis dans les commentaires ! Je répondrai à toutes les questions.
Et si vous avez aimé cet article, vous pouvez souscrire à ma newsletter pour être prévenu lorsque j'en sortirai un nouveau. Pas plus d'un mail par semaine, promis!
Rejoignez ma mailing list pour plus de posts et du contenu exclusif: