Jak mogę uruchomić Tensorboard na zdalnym serwerze?

116

Jestem nowy w Tensorflow i bardzo skorzystam na wizualizacjach tego, co robię. Rozumiem, że Tensorboard jest przydatnym narzędziem do wizualizacji, ale jak uruchomić go na moim zdalnym komputerze Ubuntu?

użytkownik
źródło
Kilka możliwych rozwiązań: (1) Może to być to samo, co uruchomienie na komputerze lokalnym, chociaż tego nie zweryfikowałem: po uruchomieniu zapewnia numer portu, dzięki któremu uzyskujesz do niego dostęp z przeglądarki na komputerze lokalnym maszyna. (2) Czy możesz korzystać z oprogramowania do zdalnego pulpitu, takiego jak RealVNC? (3) Zakładam, że wykonujesz również obliczenia tensorflow na tej samej zdalnej maszynie; możesz także pobrać pliki dziennika na swój komputer lokalny i uruchomić tensorboard na swoim komputerze lokalnym.
Yao Zhang

Odpowiedzi:

186

Oto, co robię, aby uniknąć problemów polegających na zmuszaniu zdalnego serwera do akceptowania lokalnego zewnętrznego adresu IP:

  • kiedy ssh do maszyny korzystam z opcji -Lprzeniesienia portu 6006zdalnego serwera do portu 16006mojej maszyny (na przykład): ssh -L 16006:127.0.0.1:6006 olivier@my_server_ip

To, co robi, to to, że wszystko na porcie 6006serwera (in 127.0.0.1:6006) zostanie przekazane do mojego komputera na porcie 16006.


  • Następnie możesz uruchomić tensorboard na zdalnym komputerze przy użyciu standardu tensorboard --logdir logz domyślnym 6006portem
  • Na komputerze lokalnym przejdź do http://127.0.0.1:16006 i ciesz się zdalnym TensorBoard.
Olivier Moindrot
źródło
1
Wystąpił również problem z czarnymi wykresami tensorboard w przeglądarce Safari, działa w przeglądarce Chrome (w związku z problemem # 4856 )
Olivier Moindrot
2
Mała wskazówka: 127.0.0.1tutaj jest twój lokalny adres IP, więc powinieneś zostawić go tak, jak jest. Nie zmieniaj go na zdalny adres IP. Zmarnowałem na to 10 minut. Jaki ja jestem głupi!
DarkZero
i wymuszenie IPv4 z -4flagą ssh rozwiązało problem. Czytając podobne pytania, wielu miało problemy z adresami IPv6 na swoich serwerach.
Robert Parcus,
Wygląda na to, że muszę pozostać w powłoce ssh. Jeśli zamknę powłokę ssh, nie ma odpowiedzi ze zdalnego tensorboardu. Czy jest sposób, aby być nadal podłączonym do tensorboard podczas wyłączania powłoki ssh?
Fan
@Fan: sprawdź inną odpowiedź poniżej . Zasadniczo możesz dodać -Nflagę, aby uniknąć otwierania powłoki ssh. Dodanie -fumieszcza połączenie ssh w tle.
Olivier Moindrot
78

Możesz przekierować port za pomocą innego sshpolecenia, które nie musi być związane ze sposobem łączenia się z serwerem (jako alternatywa dla innej odpowiedzi). Zatem kolejność poniższych kroków jest dowolna.

  1. z komputera lokalnego , uruchom

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

  2. na zdalnym komputerze uruchom:

    tensorboard --logdir <path> --port 6006

  3. Następnie przejdź do (w tym przykładzie) http: // localhost: 16006 na komputerze lokalnym.

(wyjaśnienie polecenia ssh:

-N : brak poleceń zdalnych

-f : umieść ssh w tle

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

forward <machine2>:<portB>(zakres zdalny) do <machine1>:<portA>(zakres lokalny)

eqzx
źródło
jak wspomniał @ 0xcaff, zamiast tego powinieneś słuchać innych interfejsów
mmohaveri
Dla określonego portu ssh -p NUMER PORTU -N -f -L localhost: 16006: localhost: 6006 <user @ remote>.
Wey Shi
63

Nie musisz robić nic wymyślnego. Po prostu biegnij:

tensorboard --host 0.0.0.0 <other args here>

i połącz się z adresem URL i portem serwera. --host 0.0.0.0Mówi tensorflow słuchać od połączeń na wszystkich adresów IPv4 na lokalnym komputerze.

0xcaff
źródło
To powinna być prawidłowa odpowiedź… najprawdopodobniej tensorboard po prostu nie jest powiązany z adresem widocznym dla usług zewnętrznych.
Duane,
1
To nie działa dla mnie na zdalnym serwerze ... Czego mi brakuje?
Idan azuri
Jeśli chcesz nasłuchiwać tylko na swoim publicznym adresie IP, możesz zrobić: tensorboard --host $ (nazwa hosta -I) <inne argumenty tutaj> A następnie możesz skopiować i wkleić adres URL wydrukowany przez tensorboard: TensorBoard 1.12.2 o 10.0 .50.42: 6006 (Naciśnij CTRL + C, aby wyjść)
Morten,
1
@Idanazuri Czy masz dostęp http do swojej maszyny zdalnej, czy też jest ona zaporą ogniową (np. Dostępna tylko przez połączenie ssh)? Jeśli jest to tylko ssh, ta odpowiedź nie będzie dla ciebie odpowiednia.
drevicko
17

Inną opcją, jeśli z jakiegoś powodu nie możesz go uruchomić, jest po prostu zamontowanie katalogu logdir w systemie plików za pomocą sshfs:

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

a następnie uruchom Tensorboard lokalnie.

Naukowiec1642
źródło
10
  1. Znajdź lokalny zewnętrzny adres IP, "whats my ip"wpisując w Google lub wprowadzając to polecenie:wget http://ipinfo.io/ip -qO -
  2. Określ zdalny zewnętrzny adres IP. Jest to prawdopodobnie to, co pojawia się po Twojej nazwie użytkownika, gdy łączysz się z serwerem zdalnym. Możesz także wget http://ipinfo.io/ip -qO -stamtąd ponownie.
  3. Zabezpiecz ruch zdalnego serwera, aby zaakceptować lokalny zewnętrzny adres IP
  4. Uruchom Tensorboard. Zwróć uwagę na port, na który domyślnie jest ustawiony:6006
  5. Wprowadź zdalny zewnętrzny adres IP do przeglądarki, a następnie port:123.123.12.32:6006

Jeśli twój zdalny serwer jest otwarty dla ruchu z twojego lokalnego adresu IP, powinieneś być w stanie zobaczyć twój zdalny Tensorboard.

Ostrzeżenie : jeśli cały ruch internetowy ma dostęp do twojego systemu (jeśli nie określiłeś ani jednego adresu IP, który może uzyskać do niego dostęp), każdy może być w stanie wyświetlić wyniki TensorBoard i niekoniecznie tworzyć SkyNet.

JohnAllen
źródło
7

To nie jest właściwa odpowiedź, ale narzędzie do rozwiązywania problemów, miejmy nadzieję, że pomoże innym mniej doświadczonym networkerom, takim jak ja.

W moim przypadku (firefox + ubuntu16) przeglądarka łączyła się, ale wyświetlała pustą stronę (z logo tensorboard na karcie) i nie było żadnej aktywności dziennika. Nadal nie wiem, co może być tego przyczyną (nie zaglądałem zbytnio do tego, ale jeśli ktoś wie, daj znać!), Ale rozwiązałem to, przełączając się na domyślną przeglądarkę Ubuntu. Oto dokładne kroki, prawie takie same jak w odpowiedzi @Olivier Moindrot:

  1. Na serwerze uruchom tensorboard: tensorboard --logdir=. --host=localhost --port=6006
  2. Na kliencie otwórz tunel ssh ssh -p 23 <USER>@<SERVER> -N -f -L localhost:16006:localhost:6006
  3. Otwórz ubuntu Browseri odwiedź localhost:16006. Strona tensorboard powinna załadować się bez większego opóźnienia.

Aby sprawdzić, czy tunel SSH działa skutecznie, może pomóc prosty serwer echa, taki jak ten skrypt w Pythonie :

  1. Umieść skrypt w <ECHO>.pypliku na serwerze i uruchom go za pomocą python <ECHO>.py. Teraz serwer będzie miał skrypt echa nasłuchujący na 0.0.0.0:5555 .
  2. Na kliencie otwórz tunel ssh ssh -p <SSH_PORT> <USER>@<SERVER> -N -f -L localhost:12345:localhost:5555
  3. Na kliencie, w tym samym terminalu używanym do otwierania tunelu (krok 2.), wystawienie telnet localhost 12345połączy się ze skryptem echo działającym na serwerze. Wpisanie helloi naciśnięcie klawisza Enter powinno zostać wydrukowane z hellopowrotem. Jeśli tak jest, Twój tunel SSH działa. Tak było w moim przypadku i doprowadziło mnie do wniosku, że problem dotyczył przeglądarki. Próba połączenia z innego terminala spowodowała zawieszenie się terminala.

Jak powiedziałem, mam nadzieję, że to pomoże!
Pozdrawiam,
Andres

fr_andres
źródło
Mam dokładnie ten sam problem na chromie + ubuntu14, co gorsza, działa idealnie dobrze dla portu przekierowanego z jednego komputera, ale pokazuje tę samą pustą stronę (z poprawnym favicon) na innym. Firefox działa dobrze. Nadal tego nie rozgryzłem, teraz używam tylko przeglądarki Firefox.
LucasB,
Tak, jest zaangażowanych wiele czynników, ale dopóki działa ... kolejną rzeczą wartą odnotowania jest to, że wersja TB dostarczana z TF różni się od samodzielnej wersji TB, którą można znaleźć tutaj ... https://github.com/dmlc/tensorboardtylko po to, aby dodać więcej alternatyw do Ustawiać. Pozdrawiam
fr_andres
7

Możesz bezpośrednio uruchomić następujące polecenie na terminalu zdalnego serwera, aby uruchomić tensorboard:

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

Możesz też uruchomić tensorboard w swoim notebooku ipython:

%load_ext tensorboard
%tensorboard --logdir {tf_log directory path} --host "0.0.0.0" --port 6006
Devendra Soni
źródło
4

Musisz utworzyć połączenie ssh za pomocą przekierowania portów:

ssh -L 16006:127.0.0.1:6006 user@host

Następnie uruchamiasz tensorboardpolecenie:

tensorboard --logdir=/path/to/logs

Następnie możesz łatwo uzyskać dostęp do tensorboardw swojej przeglądarce pod:

localhost:16006/

źródło
3

--bind_all opcja jest przydatna.

$ tensorboard --logdir runs --bind_all

Port zostanie automatycznie wybrany przyrostowo z 6006. (6006, 6007, 6008 ...)

plhn
źródło
1

Dla każdego, kto musi używać kluczy ssh (dla serwera korporacyjnego).

Po prostu dodaj -i /.ssh/id_rsana końcu.

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

Aerin
źródło
0

Podczas uruchamiania tensorboard podaj jeszcze jedną opcję --host = ip swojego systemu, a następnie możesz uzyskać do niego dostęp z innego systemu za pomocą http: // ip swojego systemu hosta : 6006

user2973566
źródło
0

Innym podejściem jest użycie odwrotnego proxy , które umożliwia przeglądanie Tensorboard z dowolnego urządzenia podłączonego do Internetu bez SSHing . Takie podejście może na przykład znacznie ułatwić przeglądanie Tensorboard na urządzeniach mobilnych.

Kroki:

1) Pobierz odwrotne proxy Ngrok na zdalną maszynę obsługującą Tensorboard. Zobacz https://ngrok.com/download, aby uzyskać instrukcje (~ 5 minut konfiguracji).

2) Uruchom ngrok http 6006(zakładając, że hostujesz Tensorboard na porcie 6006)

3) Zapisz adres URL generowany przez ngrok:

wprowadź opis obrazu tutaj

4) Wpisz to w dowolnej przeglądarce, aby wyświetlić TensorBoard:

wprowadź opis obrazu tutaj

Specjalne podziękowania dla Sama Kirkilesa

Andrew Schreiber
źródło