Comment puis-je exécuter Tensorboard sur un serveur distant?

116

Je suis nouveau sur Tensorflow et bénéficierait grandement de certaines visualisations de ce que je fais. Je comprends que Tensorboard est un outil de visualisation utile, mais comment l'exécuter sur ma machine Ubuntu distante?

utilisateur
la source
Quelques solutions possibles: (1) Cela peut être la même chose que courir sur une machine locale, bien que je ne l'ai pas vérifié: après l'avoir exécuté, il vous fournit un numéro de port, avec lequel vous y accédez depuis le navigateur de votre local machine. (2) Pouvez-vous utiliser un logiciel de bureau à distance tel que RealVNC? (3) Je suppose que vous exécutez également des calculs tensorflow sur la même machine distante; vous pouvez également télécharger les fichiers journaux sur votre machine locale et exécuter tensorboard sur votre machine locale.
Yao Zhang

Réponses:

185

Voici ce que je fais pour éviter les problèmes de faire en sorte que le serveur distant accepte votre adresse IP externe locale:

  • quand je ssh dans la machine, j'utilise l'option -Lpour transférer le port 6006du serveur distant dans le port 16006de ma machine (par exemple): ssh -L 16006:127.0.0.1:6006 olivier@my_server_ip

Ce qu'il fait, c'est que tout sur le port 6006du serveur (in 127.0.0.1:6006) sera transmis à ma machine sur le port 16006.


  • Vous pouvez ensuite lancer tensorboard sur la machine distante en utilisant un standard tensorboard --logdir logavec le 6006port par défaut
  • Sur votre ordinateur local, accédez à http://127.0.0.1:16006 et profitez de votre TensorBoard distant.
Olivier Moindrot
la source
1
J'ai également eu un problème avec les tracés tensorboard étant tous noirs sur Safari, cela fonctionne sur Chrome (lié au problème # 4856 )
Olivier Moindrot
2
Un petit conseil: 127.0.0.1voici l' adresse IP de votre machine locale , vous devez donc la laisser telle quelle. Ne le changez pas sur votre adresse IP distante. J'ai perdu 10 minutes là-dessus. Que je suis bête!
DarkZero
ceci et appliquer IPv4 avec le -4drapeau ssh l'a résolu. En lisant des questions similaires, beaucoup ont eu des problèmes avec les adresses IPv6 de leurs serveurs.
Robert Parcus
Il semble que je doive rester dans le shell ssh. Si je ferme le shell ssh, il n'y a pas de réponse du tensorboard distant. Existe-t-il un moyen d'être toujours connecté au tensorboard tout en arrêtant le shell ssh?
Fan
@Fan: vérifiez l'autre réponse ci-dessous . En gros, vous pouvez ajouter le -Ndrapeau pour éviter d'ouvrir un shell ssh. L'ajout -fmet la connexion ssh en arrière-plan.
Olivier Moindrot
78

Vous pouvez transférer le port avec une autre sshcommande qui n'a pas besoin d'être liée à la façon dont vous vous connectez au serveur (comme alternative à l'autre réponse). Ainsi, l'ordre des étapes ci-dessous est arbitraire.

  1. depuis votre machine locale , exécutez

    ssh -N -f -L localhost:16006:localhost:6006 <user@remote>

  2. sur la machine distante , exécutez:

    tensorboard --logdir <path> --port 6006

  3. Ensuite, accédez à (dans cet exemple) http: // localhost: 16006 sur votre ordinateur local.

(explication de la commande ssh:

-N : pas de commandes à distance

-f : mettre ssh en arrière-plan

-L <machine1>:<portA>:<machine2>:<portB> :

forward <machine2>:<portB>(portée distante) vers <machine1>:<portA>(portée locale)

eqzx
la source
comme mentionné par @ 0xcaff, vous devriez plutôt écouter sur vos autres interfaces
mmohaveri
Pour un port spécifique, ssh -p PORTNUMBER -N -f -L localhost: 16006: localhost: 6006 <user @ remote>.
Wey Shi
63

Vous n'avez rien de compliqué à faire. Exécutez simplement:

tensorboard --host 0.0.0.0 <other args here>

et connectez-vous avec l'url et le port de votre serveur. Le --host 0.0.0.0dit tensorflow d'écouter les connexions sur toutes les adresses IPv4 sur la machine locale.

0xcaff
la source
Cela devrait être la bonne réponse. La plupart du temps, tensorboard n'est tout simplement pas lié à une adresse visible par des services externes.
Duane
1
Cela ne fonctionne pas pour moi pour un serveur distant ... Que me manque-t-il?
Idan azuri
Si vous ne voulez écouter que sur votre IP publique, vous pouvez faire: tensorboard --host $ (hostname -I) <other args here> Et puis vous pouvez copier-coller l'URL que tensorboard imprime: TensorBoard 1.12.2 à 10.0 .50.42: 6006 (Appuyez sur CTRL + C pour quitter)
Morten
1
@Idanazuri Avez-vous un accès http à votre machine distante, ou est-elle protégée par un pare-feu (ex: accessible uniquement via une connexion ssh)? S'il s'agit uniquement de ssh, cette réponse ne fonctionnera pas pour vous.
drevicko
17

Une autre option si vous ne pouvez pas le faire fonctionner pour une raison quelconque est de simplement monter un répertoire logdir sur votre système de fichiers avec sshfs:

sshfs user@host:/home/user/project/summary_logs ~/summary_logs

puis exécutez Tensorboard localement.

Scientifique1642
la source
10
  1. Trouvez votre adresse IP externe locale en recherchant sur Google "whats my ip"ou en entrant cette commande:wget http://ipinfo.io/ip -qO -
  2. Déterminez votre adresse IP externe distante . C'est probablement ce qui vient après votre nom d'utilisateur lors du ssh-ing dans le serveur distant. Vous pouvez égalementwget http://ipinfo.io/ip -qO - nouveau à partir de là aussi.
  3. Sécurisez le trafic de votre serveur distant pour simplement accepter votre adresse IP externe locale
  4. Exécutez Tensorboard. Notez le port par défaut:6006
  5. Entrez votre adresse IP externe distante dans votre navigateur, suivie du port:123.123.12.32:6006

Si votre serveur distant est ouvert au trafic de votre adresse IP locale, vous devriez pouvoir voir votre Tensorboard distant.

Attention : si tout le trafic Internet peut accéder à votre système (si vous n'avez pas spécifié une seule adresse IP pouvant y accéder), n'importe qui peut voir vos résultats TensorBoard et s'emballer en créant lui-même SkyNet.

JohnAllen
la source
7

Ce n'est pas une bonne réponse mais un dépanneur, j'espère aider d'autres réseauteurs moins expérimentés comme moi.

Dans mon cas (firefox + ubuntu16), le navigateur se connectait, mais montrait une page vierge (avec le logo tensorboard sur l'onglet), et aucune activité du journal n'était affichée. Je ne sais toujours pas quelle pourrait en être la raison (je n'ai pas beaucoup cherché mais si quelqu'un le sait, faites-le savoir!), Mais j'ai résolu le problème en passant au navigateur par défaut d'ubuntu. Voici les étapes exactes, à peu près les mêmes que dans la réponse de @Olivier Moindrot:

  1. Sur le serveur, démarrez tensorboard: tensorboard --logdir=. --host=localhost --port=6006
  2. Sur le client, ouvrez le tunnel ssh ssh -p 23 <USER>@<SERVER> -N -f -L localhost:16006:localhost:6006
  3. Ouvrez Ubuntu's Browseret visitez localhost:16006. La page tensorboard devrait se charger sans trop de retard.

Pour vérifier que le tunnel SSH fonctionne efficacement, un simple serveur d'écho comme ce script python peut vous aider:

  1. Placez le script dans un <ECHO>.pyfichier sur le serveur et exécutez-le avec python <ECHO>.py. Maintenant, le serveur aura le script d'écho en écoute sur 0.0.0.0:5555 .
  2. Sur le client, ouvrez le tunnel ssh ssh -p <SSH_PORT> <USER>@<SERVER> -N -f -L localhost:12345:localhost:5555
  3. Sur le client, dans le même terminal que celui utilisé pour ouvrir le tunnel (étape 2.), l'émission telnet localhost 12345se connectera au script d'écho exécuté sur le serveur. Taper helloet appuyer sur Entrée devrait s'imprimer hello. Si tel est le cas, votre tunnel SSH fonctionne. C'était mon cas et cela m'a conduit à la conclusion que le problème concernait le navigateur. La tentative de connexion à partir d'un autre terminal a provoqué le gel du terminal.

Comme je l'ai dit, j'espère que cela aide!
Salut,
Andres

fr_andres
la source
J'ai exactement le même problème sur chrome + ubuntu14, pire encore, cela fonctionne parfaitement pour le port transféré d'un ordinateur, mais montre la même page vierge (avec le bon favicon) pour un autre. Firefox fonctionne très bien. Je n'ai toujours pas compris, juste en utilisant Firefox maintenant.
LucasB
Oui, de nombreux facteurs sont impliqués mais tant que cela fonctionne ... une autre chose à noter est que la version TB fournie avec TF est différente de la version TB autonome qui peut être trouvée ici ... https://github.com/dmlc/tensorboardjuste pour ajouter plus d'alternatives au installer. Cheers
fr_andres
7

Vous pouvez exécuter directement la commande suivante sur le terminal de votre serveur distant pour exécuter tensorboard:

tensorboard --logdir {tf_log directory path} --host "0.0.0.0" --port 6006

Ou vous pouvez également démarrer le tensorboard dans votre notebook ipython:

%load_ext tensorboard
%tensorboard --logdir {tf_log directory path} --host "0.0.0.0" --port 6006
Devendra Soni
la source
4

Vous devez créer une connexion ssh en utilisant la redirection de port:

ssh -L 16006:127.0.0.1:6006 user@host

Ensuite, vous exécutez la tensorboardcommande:

tensorboard --logdir=/path/to/logs

Ensuite, vous pouvez facilement accéder au tensorboarddans votre navigateur sous:

localhost:16006/

la source
3

--bind_all l'option est utile.

$ tensorboard --logdir runs --bind_all

Le port sera automatiquement sélectionné à partir de 6006 de manière incrémentielle. (6006, 6007, 6008 ...)

plhn
la source
1

Pour toute personne qui doit utiliser les clés ssh (pour un serveur d'entreprise).

Ajoutez simplement -i /.ssh/id_rsaà la fin.

$ ssh -N -f -L localhost:8211:localhost:6007 myname@servername -i /.ssh/id_rsa

Aerin
la source
0

Lors de l'exécution du tensorboard, donnez une autre option --host = ip de votre système , puis vous pouvez y accéder depuis un autre système en utilisant http: // ip de votre système hôte : 6006

user2973566
la source
0

Une autre approche consiste à utiliser un proxy inverse , qui vous permet de visualiser Tensorboard à partir de n'importe quel appareil connecté à Internet sans SSHing . Cette approche peut rendre la visualisation de Tensorboard beaucoup plus facile / plus facile à gérer sur des appareils mobiles, par exemple.

Pas:

1) Téléchargez le proxy inverse Ngrok sur votre machine distante hébergeant Tensorboard. Consultez https://ngrok.com/download pour obtenir des instructions (configuration d'environ 5 minutes).

2) Exécuter ngrok http 6006(en supposant que vous hébergez Tensorboard sur le port 6006)

3) Enregistrez l'URL que ngrok génère:

entrez la description de l'image ici

4) Entrez-le dans n'importe quel navigateur pour afficher TensorBoard:

entrez la description de l'image ici

Remerciements particuliers à Sam Kirkiles

Andrew Schreiber
la source