Come posso eseguire Tensorboard su un server remoto?


116

Sono nuovo su Tensorflow e trarrei grandi vantaggi da alcune visualizzazioni di ciò che sto facendo. Capisco che Tensorboard sia uno strumento di visualizzazione utile, ma come posso eseguirlo sulla mia macchina Ubuntu remota?


Alcune possibili soluzioni: (1) Potrebbe essere lo stesso che funzionare su una macchina locale, anche se non l'ho verificato: dopo averlo eseguito, ti fornisce un numero di porta, con cui accedi dal browser sul tuo locale macchina. (2) Sei in grado di utilizzare software desktop remoto come RealVNC? (3) Presumo che tu esegua anche calcoli di tensorflow sulla stessa macchina remota; puoi anche scaricare i file di registro sulla tua macchina locale ed eseguire tensorboard sulla tua macchina locale.
Yao Zhang

Risposte:


185

Ecco cosa faccio per evitare il problema di far accettare al server remoto il tuo IP esterno locale:

  • quando inserisco ssh nella macchina, utilizzo l'opzione -Lper trasferire la porta 6006del server remoto nella porta 16006della mia macchina (ad esempio): ssh -L 16006:127.0.0.1:6006 olivier@my_server_ip

Quello che fa è che tutto sulla porta 6006del server (in 127.0.0.1:6006) verrà inoltrato alla mia macchina sulla porta 16006.


  • È quindi possibile avviare tensorboard sulla macchina remota utilizzando uno standard tensorboard --logdir logcon la 6006porta predefinita
  • Sul tuo computer locale, vai su http://127.0.0.1:16006 e goditi il ​​tuo TensorBoard remoto.

1
Ha anche avuto un problema con i grafici della scheda tensoriale completamente neri su Safari, funziona su Chrome (relativo al problema # 4856 )
Olivier Moindrot

2
Un piccolo suggerimento: 127.0.0.1ecco l' ip della tua macchina locale , quindi dovresti lasciarlo così com'è. Non cambiarlo con il tuo IP remoto. Ho sprecato 10 minuti su questo. Quanto sono stupido!
DarkZero

questo e l'applicazione di IPv4 con il -4flag ssh lo ha risolto. Leggendo domande simili, molti hanno avuto problemi con gli indirizzi IPv6 nei loro server.
Robert Parcus

Sembra che devo rimanere nella shell ssh. Se chiudo la shell ssh, non c'è risposta dal tensore remoto. C'è un modo per essere ancora connessi alla scheda tensoriale mentre si chiude la shell ssh?
Fan

@ Fan: controlla l'altra risposta qui sotto . Fondamentalmente puoi aggiungere il -Nflag per evitare di aprire una shell ssh. L'aggiunta -fmette la connessione ssh in background.
Olivier Moindrot

78

Puoi port-forward con un altro sshcomando che non deve essere legato al modo in cui ti stai connettendo al server (in alternativa all'altra risposta). Pertanto, l'ordine dei passaggi seguenti è arbitrario.

  1. dalla tua macchina locale , esegui

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

  2. sulla macchina remota , esegui:

    tensorboard --logdir <path> --port 6006

  3. Quindi, vai a (in questo esempio) http: // localhost: 16006 sulla tua macchina locale.

(spiegazione del comando ssh:

-N : nessun comando remoto

-f : metti ssh in background

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

inoltra <machine2>:<portB>(ambito remoto) a <machine1>:<portA>(ambito locale)


come menzionato da @ 0xcaff, dovresti invece ascoltare le tue altre interfacce
mmohaveri

Per una porta specifica, ssh -p PORTNUMBER -N -f -L localhost: 16006: localhost: 6006 <user @ remote>.
Wey Shi

63

Non devi fare niente di stravagante. Corri:

tensorboard --host 0.0.0.0 <other args here>

e connettiti con l'URL e la porta del tuo server. La --host 0.0.0.0dice tensorflow per ascoltare da connessioni su tutti gli indirizzi IPv4 sulla macchina locale.


Questa dovrebbe essere la risposta corretta .. molto probabilmente tensorboard semplicemente non è vincolato a un indirizzo visibile a servizi esterni.
Duane

1
Non funziona per me per un server remoto ... Cosa mi manca?
Idan azuri,

Se vuoi ascoltare solo sul tuo IP pubblico, puoi fare: tensorboard --host $ (hostname -I) <altri argomenti qui> E poi puoi copiare e incollare l'URL che tensorboard stampa: TensorBoard 1.12.2 a 10.0 .50.42: 6006 (Premi CTRL + C per uscire)
Morten

1
@Idanazuri Hai accesso http alla tua macchina remota o è protetta da firewall (ad esempio: accessibile solo tramite una connessione ssh)? Se è solo ssh, questa risposta non funzionerà per te.
drevicko

17

Un'altra opzione se non riesci a farlo funzionare per qualche motivo è semplicemente montare una directory logdir sul tuo filesystem con sshfs:

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

e quindi eseguire Tensorboard localmente.


10
  1. Trova il tuo IP esterno locale cercando su Google "whats my ip"o inserendo questo comando:wget http://ipinfo.io/ip -qO -
  2. Determina il tuo IP esterno remoto . Questo è probabilmente ciò che viene dopo il tuo nome utente quando si esegue ssh nel server remoto. Puoi anche di wget http://ipinfo.io/ip -qO -nuovo anche da lì.
  3. Proteggi il traffico del tuo server remoto per accettare solo il tuo indirizzo IP esterno locale
  4. Esegui Tensorboard. Nota la porta su cui è predefinita:6006
  5. Inserisci il tuo indirizzo IP esterno remoto nel tuo browser, seguito dalla porta:123.123.12.32:6006

Se il tuo server remoto è aperto al traffico dal tuo indirizzo IP locale, dovresti essere in grado di vedere il tuo Tensorboard remoto.

Attenzione : se tutto il traffico Internet può accedere al tuo sistema (se non hai specificato un singolo indirizzo IP che possa accedervi), chiunque potrebbe essere in grado di visualizzare i risultati di TensorBoard e fuggire con la creazione di SkyNet da solo.


7

Questa non è una risposta corretta ma uno strumento di risoluzione dei problemi, si spera che aiuti altri networker meno esperti come me.

Nel mio caso (firefox + ubuntu16) il browser si stava connettendo, ma mostrava una pagina vuota (con il logo tensorboard sulla scheda) e non veniva mostrata alcuna attività di registro. Non so ancora quale potrebbe essere la ragione (non ci ho esaminato molto ma se qualcuno lo sa, per favore fatemelo sapere!), Ma ho risolto il problema passando al browser predefinito di Ubuntu. Ecco i passaggi esatti, più o meno gli stessi della risposta di @Olivier Moindrot:

  1. Sul server, avvia tensorboard: tensorboard --logdir=. --host=localhost --port=6006
  2. Sul client, apri il tunnel ssh ssh -p 23 <USER>@<SERVER> -N -f -L localhost:16006:localhost:6006
  3. Apri Ubuntu Browsere visita localhost:16006. La pagina del tensorboard dovrebbe caricarsi senza molto ritardo.

Per verificare che il tunnel SSH funzioni efficacemente, un semplice server echo come questo script python può aiutare:

  1. Metti lo script in un <ECHO>.pyfile nel server ed eseguilo con python <ECHO>.py. Ora il server avrà lo script echo in ascolto su 0.0.0.0:5555 .
  2. Sul client, apri il tunnel ssh ssh -p <SSH_PORT> <USER>@<SERVER> -N -f -L localhost:12345:localhost:5555
  3. Sul client, nello stesso terminale utilizzato per aprire il tunnel (passaggio 2.), l'emissione telnet localhost 12345si connetterà allo script echo in esecuzione nel server. Digitando helloe premendo Invio dovrebbe hellotornare indietro. Se questo è il caso, il tuo tunnel SSH funziona. Questo era il mio caso e mi ha portato alla conclusione che il problema riguardava il browser. Il tentativo di connessione da un terminale diverso ha causato il blocco del terminale.

Come ho detto, spero che aiuti!
Saluti,
Andres


Ho lo stesso identico problema su chromium + ubuntu14, anche peggio, funziona perfettamente per la porta inoltrata da un computer, ma mostra la stessa pagina vuota (con la favicon corretta) per un altro. Firefox funziona perfettamente. Ancora non l'ho capito, sto solo usando Firefox ora.
LucasB

Sì, sono coinvolti molti fattori, ma fintanto che funziona ... un'altra cosa da notare è che la versione TB fornita con TF è diversa da quella TB-standalone che può essere trovata qui ... https://github.com/dmlc/tensorboardsolo per aggiungere più alternative al impostare. Saluti
fr_andres

7

Puoi eseguire direttamente il seguente comando sul terminale del tuo server remoto per eseguire tensorboard:

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

Oppure puoi anche avviare il tensore all'interno del tuo notebook ipython:

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

4

Devi creare una connessione ssh usando il port forwarding:

ssh -L 16006:127.0.0.1:6006 user@host

Quindi esegui il tensorboardcomando:

tensorboard --logdir=/path/to/logs

Quindi puoi accedere facilmente a tensorboardnel tuo browser sotto:

localhost:16006/

3

--bind_all l'opzione è utile.

$ tensorboard --logdir runs --bind_all

La porta verrà selezionata automaticamente da 6006 in modo incrementale. (6006, 6007, 6008 ...)


1

Per chiunque debba utilizzare le chiavi ssh (per un server aziendale).

Basta aggiungere -i /.ssh/id_rsaalla fine.

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


0

Durante l'esecuzione della scheda tensoriale dare un'altra opzione --host = ip del tuo sistema e poi puoi accedervi da un altro sistema usando http: // ip del tuo sistema host : 6006


0

Un altro approccio consiste nell'utilizzare un proxy inverso , che consente di visualizzare Tensorboard da qualsiasi dispositivo connesso a Internet senza SSHing . Questo approccio può rendere molto più semplice / trattabile la visualizzazione di Tensorboard su dispositivi mobili, ad esempio.

passi:

1) Scarica il proxy inverso Ngrok sulla tua macchina remota che ospita Tensorboard. Vedere https://ngrok.com/download per le istruzioni (installazione di circa 5 minuti).

2) Esegui ngrok http 6006(supponendo che tu stia ospitando Tensorboard sulla porta 6006)

3) Salva l'URL che ngrok restituisce:

inserisci qui la descrizione dell'immagine

4) Inseriscilo in qualsiasi browser per visualizzare TensorBoard:

inserisci qui la descrizione dell'immagine

Un ringraziamento speciale a Sam Kirkiles

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.