Wie kann ich Tensorboard auf einem Remote-Server ausführen?

116

Ich bin neu in Tensorflow und würde von einigen Visualisierungen meiner Arbeit sehr profitieren. Ich verstehe, dass Tensorboard ein nützliches Visualisierungstool ist, aber wie kann ich es auf meinem Remote-Ubuntu-Computer ausführen?

Benutzer
quelle
Einige mögliche Lösungen: (1) Es ist möglicherweise dasselbe wie das Ausführen auf einem lokalen Computer, obwohl ich dies nicht überprüft habe: Nachdem Sie es ausgeführt haben, erhalten Sie eine Portnummer, mit der Sie über den Browser auf Ihrem lokalen Computer darauf zugreifen können Maschine. (2) Können Sie Remotedesktopsoftware wie RealVNC verwenden? (3) Ich gehe davon aus, dass Sie auch Tensorflow-Berechnungen auf derselben Remote-Maschine ausführen. Sie können die Protokolldateien auch auf Ihren lokalen Computer herunterladen und Tensorboard auf Ihrem lokalen Computer ausführen.
Yao Zhang

Antworten:

184

Folgendes tue ich, um die Probleme zu vermeiden, die entstehen, wenn der Remote-Server Ihre lokale externe IP-Adresse akzeptiert:

  • Wenn ich in den Computer ssh, verwende ich die Option -L, um den Port 6006des Remote-Servers in den Port 16006meines Computers zu übertragen (zum Beispiel): ssh -L 16006:127.0.0.1:6006 olivier@my_server_ip

Was sie tut , ist , dass alles auf dem Port 6006des Servers (in 127.0.0.1:6006) wird weitergeleitet an meine Maschine auf dem Hafen 16006.


  • Sie können dann starten tensorboard auf dem entfernten Rechner einen Standard mit tensorboard --logdir logdem Standard - 6006Port
  • Gehen Sie auf Ihrem lokalen Computer zu http://127.0.0.1:16006 und genießen Sie Ihr Remote-TensorBoard.
Olivier Moindrot
quelle
1
Hatte auch ein Problem mit Tensorboard-Plots, die auf Safari komplett schwarz sind. Es funktioniert auf Chrome (im Zusammenhang mit Problem # 4856 )
Olivier Moindrot
2
Ein kleiner Hinweis: 127.0.0.1Hier ist die IP Ihres lokalen Computers, daher sollten Sie sie unverändert lassen. Ändern Sie es nicht in Ihre Remote-IP. Ich habe 10 Minuten damit verschwendet. Wie dumm ich bin!
DarkZero
Dies und das Erzwingen von IPv4 mit dem -4ssh-Flag haben es gelöst. Beim Lesen ähnlicher Fragen hatten viele Probleme mit IPv6-Adressen auf ihren Servern.
Robert Parcus
Es scheint, als müsste ich in der SSH-Shell bleiben. Wenn ich die SSH-Shell schließe, erfolgt keine Antwort vom Remote-Tensorboard. Gibt es eine Möglichkeit, beim Herunterfahren der SSH-Shell noch mit dem Tensorboard verbunden zu sein?
Fan
@ Fan: Überprüfen Sie die andere Antwort unten . Grundsätzlich können Sie das -NFlag hinzufügen , um das Öffnen einer SSH-Shell zu vermeiden. Durch Hinzufügen wird -fdie SSH-Verbindung in den Hintergrund gestellt.
Olivier Moindrot
78

Sie können eine Portweiterleitung mit einem anderen sshBefehl durchführen, der nicht an die Art und Weise gebunden sein muss, wie Sie eine Verbindung zum Server herstellen (als Alternative zur anderen Antwort). Somit ist die Reihenfolge der folgenden Schritte beliebig.

  1. Führen Sie auf Ihrem lokalen Computer aus

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

  2. Führen Sie auf dem Remote- Computer Folgendes aus:

    tensorboard --logdir <path> --port 6006

  3. Navigieren Sie dann auf Ihrem lokalen Computer zu (in diesem Beispiel) http: // localhost: 16006 .

(Erklärung des Befehls ssh:

-N : keine Fernbefehle

-f : ssh in den Hintergrund stellen

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

weiterleiten <machine2>:<portB>(Remote-Bereich) an <machine1>:<portA>(lokaler Bereich)

Gl
quelle
Wie von @ 0xcaff erwähnt, sollten Sie stattdessen auf Ihre anderen Schnittstellen hören
mmohaveri
Für einen bestimmten Port ssh -p PORTNUMBER -N -f -L localhost: 16006: localhost: 6006 <user @ remote>.
Wey Shi
63

Sie müssen nichts Besonderes tun. Renn einfach:

tensorboard --host 0.0.0.0 <other args here>

und verbinden Sie sich mit Ihrer Server-URL und Ihrem Port. Der --host 0.0.0.0Tensorflow weist an, Verbindungen von allen IPv4-Adressen auf dem lokalen Computer abzuhören.

0xcaff
quelle
Dies sollte die richtige Antwort sein. Wahrscheinlich ist Tensorboard einfach nicht an eine Adresse gebunden, die für externe Dienste sichtbar ist.
Duane
1
Bei einem Remote-Server funktioniert das nicht ... Was fehlt mir?
Idan Azuri
Wenn Sie nur Ihre öffentliche IP-Adresse abhören möchten, können Sie Folgendes tun: tensorboard --host $ (Hostname -I) <andere Argumente hier> Anschließend können Sie die vom Tensorboard ausgedruckte URL kopieren und einfügen: TensorBoard 1.12.2 um 10.0 50,42: 6006 ( Drücken Sie STRG + C, um das Programm zu beenden)
Morten
1
@Idanazuri Haben Sie http-Zugriff auf Ihren Remotecomputer oder ist dieser durch eine Firewall geschützt (z. B. nur über eine SSH-Verbindung zugänglich)? Wenn es nur ssh ist, funktioniert diese Antwort für Sie nicht.
Drevicko
17

Eine andere Option, wenn Sie es aus irgendeinem Grund nicht zum Laufen bringen können, besteht darin, einfach ein logdir-Verzeichnis mit sshfs in Ihr Dateisystem einzubinden:

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

Führen Sie dann Tensorboard lokal aus.

Wissenschaftler1642
quelle
9
  1. Finden Sie Ihre lokale externe IP, indem Sie googeln "whats my ip"oder diesen Befehl eingeben :wget http://ipinfo.io/ip -qO -
  2. Bestimmen Sie Ihre externe Remote- IP. Dies ist wahrscheinlich, was nach Ihrem Benutzernamen kommt, wenn Sie auf den Remote-Server ssh-. Sie können auch wget http://ipinfo.io/ip -qO -wieder von dort aus.
  3. Sichern Sie Ihren Remote-Server-Verkehr, um nur Ihre lokale externe IP-Adresse zu akzeptieren
  4. Führen Sie Tensorboard aus. Beachten Sie den Standardport:6006
  5. Geben Sie Ihre externe Remote- IP-Adresse in Ihren Browser ein, gefolgt vom Port:123.123.12.32:6006

Wenn Ihr Remote-Server für Datenverkehr von Ihrer lokalen IP-Adresse geöffnet ist, sollte Ihr Remote-Tensorboard angezeigt werden.

Warnung : Wenn der gesamte Internetverkehr auf Ihr System zugreifen kann (wenn Sie keine einzige IP-Adresse angegeben haben, die darauf zugreifen kann), kann möglicherweise jeder Ihre TensorBoard-Ergebnisse anzeigen und SkyNet selbst erstellen.

JohnAllen
quelle
7

Dies ist keine richtige Antwort, sondern eine Fehlerbehebung, die hoffentlich anderen weniger erfahrenen Netzwerkern wie mir hilft.

In meinem Fall (Firefox + Ubuntu16) stellte der Browser eine Verbindung her, zeigte jedoch eine leere Seite (mit dem Tensorboard-Logo auf der Registerkarte) an, und es wurde überhaupt keine Protokollaktivität angezeigt. Ich weiß immer noch nicht, was der Grund dafür sein könnte (habe nicht viel darüber nachgedacht, aber wenn jemand es weiß, lass es uns wissen!), Aber ich habe es gelöst, indem ich auf Ubuntus Standardbrowser umgestiegen bin. Hier die genauen Schritte, so ziemlich die gleichen wie in der Antwort von @Olivier Moindrot:

  1. Starten Sie auf dem Server Tensorboard: tensorboard --logdir=. --host=localhost --port=6006
  2. Öffnen Sie auf dem Client den SSH-Tunnel ssh -p 23 <USER>@<SERVER> -N -f -L localhost:16006:localhost:6006
  3. Öffnen Sie Ubuntus Browserund besuchen Sie localhost:16006. Die Tensorboard-Seite sollte ohne große Verzögerung geladen werden.

Um zu überprüfen, ob der SSH-Tunnel effektiv funktioniert, kann ein einfacher Echoserver wie dieses Python-Skript helfen:

  1. Fügen Sie das Skript in eine <ECHO>.pyDatei auf dem Server ein und führen Sie es mit aus python <ECHO>.py. Jetzt hört der Server das Echo-Skript auf 0.0.0.0:5555 .
  2. Öffnen Sie auf dem Client den SSH-Tunnel ssh -p <SSH_PORT> <USER>@<SERVER> -N -f -L localhost:12345:localhost:5555
  3. Auf dem Client wird auf demselben Terminal, auf dem der Tunnel geöffnet wurde (Schritt 2), durch die Ausgabe telnet localhost 12345eine Verbindung zum auf dem Server ausgeführten Echoskript hergestellt. Durch Tippen hellound Drücken der Eingabetaste sollte hellozurückgedruckt werden. In diesem Fall funktioniert Ihr SSH-Tunnel. Dies war mein Fall und führte mich zu dem Schluss, dass das Problem den Browser betraf. Der Versuch, eine Verbindung von einem anderen Terminal herzustellen, führte zum Einfrieren des Terminals.

Wie gesagt, hoffe es hilft!
Prost,
Andres

fr_andres
quelle
Ich habe genau das gleiche Problem mit Chrom + Ubuntu14, noch schlimmer, es funktioniert einwandfrei für den von einem Computer weitergeleiteten Port, zeigt aber die gleiche leere Seite (mit korrektem Favicon) für einen anderen. Firefox funktioniert einwandfrei. Ich habe es immer noch nicht herausgefunden, ich benutze jetzt nur Firefox.
LucasB
Ja, viele Faktoren sind involviert, aber solange es funktioniert ... ist eine andere Sache zu beachten, dass die TB-Version, die mit TF geliefert wird, sich von der TB-Standalone-Version unterscheidet, die hier zu finden ist ... https://github.com/dmlc/tensorboardnur um weitere Alternativen zu der hinzuzufügen Konfiguration. Cheers
fr_andres
7

Sie können den folgenden Befehl direkt auf dem Terminal Ihres Remote-Servers ausführen, um Tensorboard auszuführen:

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

Sie können das Tensorboard auch in Ihrem Ipython-Notizbuch starten:

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

Sie müssen eine SSH-Verbindung mithilfe der Portweiterleitung erstellen:

ssh -L 16006:127.0.0.1:6006 user@host

Dann führen Sie den tensorboardBefehl aus:

tensorboard --logdir=/path/to/logs

Dann können Sie einfach tensorboardin Ihrem Browser auf Folgendes zugreifen :

localhost:16006/

quelle
2

--bind_all Option ist nützlich.

$ tensorboard --logdir runs --bind_all

Der Port wird automatisch schrittweise aus 6006 ausgewählt. (6006, 6007, 6008 ...)

plhn
quelle
1

Für alle, die die SSH-Schlüssel verwenden müssen (für einen Unternehmensserver).

Fügen Sie einfach -i /.ssh/id_rsaam Ende hinzu.

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

Aerin
quelle
0

Geben Sie beim Ausführen des Tensorboards eine weitere Option an --host = ip Ihres Systems, und Sie können dann von einem anderen System aus über http: // ip Ihres Hostsystems : 6006 darauf zugreifen

user2973566
quelle
0

Ein anderer Ansatz ist die Verwendung eines Reverse-Proxys , mit dem Sie Tensorboard von jedem mit dem Internet verbundenen Gerät ohne SSHing anzeigen können . Dieser Ansatz kann das Anzeigen von Tensorboard beispielsweise auf Mobilgeräten erheblich vereinfachen.

Schritte:

1) Laden Sie den Reverse Proxy Ngrok auf Ihren Remote-Computer herunter, auf dem Tensorboard gehostet wird. Anweisungen finden Sie unter https://ngrok.com/download (~ 5 Minuten Setup).

2) Ausführen ngrok http 6006(vorausgesetzt, Sie hosten Tensorboard auf Port 6006)

3) Speichern Sie die von ngrok ausgegebene URL:

Geben Sie hier die Bildbeschreibung ein

4) Geben Sie dies in einen beliebigen Browser ein, um TensorBoard anzuzeigen:

Geben Sie hier die Bildbeschreibung ein

Besonderer Dank geht an Sam Kirkiles

Andrew Schreiber
quelle