¿Cómo puedo ejecutar Tensorboard en un servidor remoto?


116

Soy nuevo en Tensorflow y me beneficiaría enormemente de algunas visualizaciones de lo que estoy haciendo. Entiendo que Tensorboard es una herramienta de visualización útil, pero ¿cómo la ejecuto en mi máquina Ubuntu remota?


Algunas posibles soluciones: (1) Puede ser lo mismo que ejecutarse en una máquina local, aunque no he verificado esto: después de ejecutarlo, le proporciona un número de puerto, con el que puede acceder desde el navegador en su local. máquina. (2) ¿Puede utilizar software de escritorio remoto como RealVNC? (3) Supongo que también ejecuta cálculos de flujo tensorial en la misma máquina remota; también puede descargar los archivos de registro en su máquina local y ejecutar tensorboard en su máquina local.
Yao Zhang

Respuestas:


185

Esto es lo que hago para evitar los problemas de hacer que el servidor remoto acepte su IP externa local:

  • cuando entro a la máquina, utilizo la opción -Lpara transferir el puerto 6006del servidor remoto al puerto 16006de mi máquina (por ejemplo): ssh -L 16006:127.0.0.1:6006 olivier@my_server_ip

Lo que hace es que todo en el puerto 6006del servidor (en 127.0.0.1:6006) se reenviará a mi máquina en el puerto 16006.


  • Luego puede iniciar tensorboard en la máquina remota usando un estándar tensorboard --logdir logcon el 6006puerto predeterminado
  • En su máquina local, vaya a http://127.0.0.1:16006 y disfrute de su TensorBoard remoto.

1
También tuve un problema con los gráficos de tensorboard que eran todos negros en Safari, funciona en Chrome (relacionado con el problema # 4856 )
Olivier Moindrot

2
Una pequeña pista: 127.0.0.1aquí está la ip de su máquina local , por lo que debe dejarla como está. No lo cambie a su ip remota. Perdí 10 minutos en esto. ¡Que estúpido soy!
DarkZero

esto y hacer cumplir IPv4 con la -4bandera ssh lo resolvió. Al leer preguntas similares, muchos han tenido problemas con las direcciones IPv6 en sus servidores.
Robert Parcus

Parece que tengo que quedarme en el shell ssh. Si cierro el shell ssh, no hay respuesta del tensorboard remoto. ¿Hay alguna forma de seguir conectado al tensorboard mientras se apaga el shell ssh?
Fan

@Fan: marque la otra respuesta a continuación . Básicamente, puede agregar la -Nbandera para evitar abrir un shell ssh. Agregar -fpone la conexión ssh en segundo plano.
Olivier Moindrot

78

Puede reenviar el puerto con otro sshcomando que no necesita estar vinculado a cómo se conecta al servidor (como una alternativa a la otra respuesta). Por tanto, el orden de los pasos siguientes es arbitrario.

  1. desde su máquina local , ejecute

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

  2. en la máquina remota , ejecute:

    tensorboard --logdir <path> --port 6006

  3. Luego, navegue hasta (en este ejemplo) http: // localhost: 16006 en su máquina local.

(explicación del comando ssh:

-N : sin comandos remotos

-f : poner ssh en segundo plano

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

reenviar <machine2>:<portB>(alcance remoto) a <machine1>:<portA>(alcance local)


como lo menciona @ 0xcaff, debería escuchar en sus otras interfaces en su lugar
mmohaveri

Para un puerto específico, ssh -p PORTNUMBER -N -f -L localhost: 16006: localhost: 6006 <usuario @ remoto>.
Wey Shi

63

No necesitas hacer nada elegante. Solo corre:

tensorboard --host 0.0.0.0 <other args here>

y conéctese con la URL y el puerto de su servidor. Le --host 0.0.0.0dice a tensorflow que escuche las conexiones en todas las direcciones IPv4 en la máquina local.


Esta debería ser la respuesta correcta ... lo más probable es que el tensorboard no esté vinculado a una dirección visible para servicios externos.
Duane

1
No me funciona para un servidor remoto ... ¿Qué me estoy perdiendo?
Idan azuri

Si solo desea escuchar en su IP pública, puede hacer: tensorboard --host $ (nombre de host -I) <otros argumentos aquí> Y luego puede copiar y pegar la URL que imprime el tensorboard: TensorBoard 1.12.2 en 10.0 .50.42: 6006 (Presione CTRL + C para salir)
Morten

1
@Idanazuri ¿Tiene acceso http a su máquina remota, o tiene un cortafuegos (por ejemplo: solo se puede acceder a través de una conexión ssh)? Si es solo ssh, esta respuesta no funcionará para usted.
drevicko

17

Otra opción si no puede hacer que funcione por alguna razón es simplemente montar un directorio logdir en su sistema de archivos con sshfs:

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

y luego ejecute Tensorboard localmente.


10
  1. Encuentre su IP externa local buscando en Google "whats my ip"o ingresando este comando:wget http://ipinfo.io/ip -qO -
  2. Determine su IP externa remota . Esto es probablemente lo que viene después de su nombre de usuario cuando ingresa al servidor remoto. También puedes wget http://ipinfo.io/ip -qO -volver a hacerlo desde allí.
  3. Asegure el tráfico de su servidor remoto para aceptar su dirección IP externa local
  4. Ejecute Tensorboard. Tenga en cuenta el puerto que tiene por defecto:6006
  5. Ingrese su dirección IP externa remota en su navegador, seguida del puerto:123.123.12.32:6006

Si su servidor remoto está abierto al tráfico desde su dirección IP local, debería poder ver su Tensorboard remoto.

Advertencia : si todo el tráfico de Internet puede acceder a su sistema (si no ha especificado una sola dirección IP que pueda acceder a él), cualquiera puede ver los resultados de su TensorBoard y crear SkyNet por sí mismo.


7

Esta no es una respuesta adecuada, sino un solucionador de problemas, espero que ayude a otros networkers menos experimentados como yo.

En mi caso (firefox + ubuntu16), el navegador se estaba conectando, pero mostraba una página en blanco (con el logotipo de tensorboard en la pestaña) y no se mostraba ninguna actividad de registro. Todavía no sé cuál podría ser la razón de eso (no lo investigué mucho, pero si alguien lo sabe, ¡avísele!), Pero lo resolví cambiando al navegador predeterminado de ubuntu. Aquí los pasos exactos, prácticamente los mismos que en la respuesta de @Olivier Moindrot:

  1. En el servidor, inicie tensorboard: tensorboard --logdir=. --host=localhost --port=6006
  2. En el cliente, abra el túnel ssh ssh -p 23 <USER>@<SERVER> -N -f -L localhost:16006:localhost:6006
  3. Abra ubuntu's Browsery visite localhost:16006. La página del tensorboard debería cargarse sin mucha demora.

Para verificar que el túnel SSH está funcionando efectivamente, un servidor de eco simple como este script de Python puede ayudar:

  1. Pon el guión en un <ECHO>.py archivo en el servidor y ejecútelo con python <ECHO>.py. Ahora el servidor tendrá el script de eco escuchando en 0.0.0.0:5555 .
  2. En el cliente, abra el túnel ssh ssh -p <SSH_PORT> <USER>@<SERVER> -N -f -L localhost:12345:localhost:5555
  3. En el cliente, en la misma terminal utilizada para abrir el túnel (paso 2), emitiendo telnet localhost 12345 se conectará al script de eco que se ejecuta en el servidor. Escribir helloy presionar enter debería hellovolver a imprimir . Si ese es el caso, su túnel SSH está funcionando. Este fue mi caso y me llevó a la conclusión de que el problema estaba relacionado con el navegador. Al intentar conectarse desde un terminal diferente, el terminal se congelaba.

Como dije, ¡espero que te ayude!
Saludos,
Andrés


Tengo exactamente el mismo problema en chromium + ubuntu14, incluso peor, funciona perfectamente bien para el puerto reenviado desde una computadora, pero muestra la misma página en blanco (con el favicon correcto) para otra. Firefox funciona bien. Todavía no lo he descubierto, solo estoy usando Firefox ahora.
LucasB

Sí, hay muchos factores involucrados, pero mientras funcione ... otra cosa a tener en cuenta es que la versión de TB que viene con TF es diferente de la versión independiente de TB que se puede encontrar aquí ... https://github.com/dmlc/tensorboardsolo para agregar más alternativas a la preparar. Saludos
fr_andres

7

Puede ejecutar directamente el siguiente comando en la terminal de su servidor remoto para ejecutar tensorboard:

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

O también puede iniciar el tensorboard dentro de su cuaderno ipython:

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

4

Tienes que crear una conexión ssh usando el reenvío de puertos:

ssh -L 16006:127.0.0.1:6006 user@host

Luego ejecuta el tensorboardcomando:

tensorboard --logdir=/path/to/logs

Luego, puede acceder fácilmente tensorboarden su navegador en:

localhost:16006/

3

--bind_all La opción es útil.

$ tensorboard --logdir runs --bind_all

El puerto se seleccionará automáticamente de 6006 de forma incremental. (6006, 6007, 6008 ...)


1

Para cualquiera que deba usar las claves ssh (para un servidor corporativo).

Solo agregue -i /.ssh/id_rsaal final.

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


0

Mientras ejecuta el tensorboard, dé una opción más --host = ip de su sistema y luego puede acceder a él desde otro sistema usando http: // ip de su sistema host : 6006


0

Otro enfoque es utilizar un proxy inverso , que le permite ver Tensorboard desde cualquier dispositivo conectado a Internet sin SSHing . Este enfoque puede hacer que sea mucho más fácil / manejable ver Tensorboard en dispositivos móviles, por ejemplo.

Pasos:

1) Descargue el proxy inverso Ngrok en su máquina remota que aloja Tensorboard. Consulte https://ngrok.com/download para obtener instrucciones (configuración de ~ 5 minutos).

2) Ejecutar ngrok http 6006 (asumiendo que está alojando Tensorboard en el puerto 6006)

3) Guarde la URL que genera ngrok:

ingrese la descripción de la imagen aquí

4) Ingrese eso en cualquier navegador para ver TensorBoard:

ingrese la descripción de la imagen aquí

Un agradecimiento especial a Sam Kirkiles

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.