Como posso executar o Tensorboard em um servidor remoto?


116

Sou novo no Tensorflow e me beneficiaria muito com algumas visualizações do que estou fazendo. Eu entendo que o Tensorboard é uma ferramenta de visualização útil, mas como faço para executá-lo em minha máquina Ubuntu remota?


Algumas soluções possíveis: (1) Pode ser o mesmo que rodar em uma máquina local, embora eu não tenha verificado isso: depois de executá-lo, ele fornece um número de porta, com o qual você acessa a partir do navegador em seu local máquina. (2) Você consegue usar um software de desktop remoto como o RealVNC? (3) Suponho que você também execute cálculos de tensorflow na mesma máquina remota; você também pode baixar os arquivos de log para sua máquina local e executar tensorboard em sua máquina local.
Yao Zhang

Respostas:


185

Aqui está o que devo fazer para evitar os problemas de fazer o servidor remoto aceitar seu IP externo local:

  • quando eu ssh na máquina, uso a opção -Lde transferir a porta 6006do servidor remoto para a porta 16006da minha máquina (por exemplo): ssh -L 16006:127.0.0.1:6006 olivier@my_server_ip

O que acontece é que tudo na porta 6006do servidor (in 127.0.0.1:6006) será encaminhado para minha máquina na porta 16006.


  • Você pode então lançar tensorboard na máquina remota usando um padrão tensorboard --logdir logcom a 6006porta padrão
  • Em sua máquina local, acesse http://127.0.0.1:16006 e aproveite seu TensorBoard remoto.

1
Também tive um problema com os gráficos do tensorboard sendo todos pretos no Safari, ele funciona no Chrome (relacionado ao problema # 4856 )
Olivier Moindrot

2
Uma pequena dica: 127.0.0.1aqui está o ip da sua máquina local , então você deve deixá-lo como está. Não mude para o seu ip remoto. Eu perdi 10 minutos nisso. Como sou estúpido!
DarkZero de

isso e a aplicação de IPv4 com o -4sinalizador ssh resolveu. Lendo questões semelhantes, muitos tiveram problemas com endereços IPv6 em seus servidores.
Robert Parcus

Parece que tenho que ficar no shell ssh. Se eu fechar o shell ssh, não haverá resposta do tensorboard remoto. Existe uma maneira de ainda estar conectado ao tensorboard ao desligar o shell ssh?
Fan

@Fan: verifique a outra resposta abaixo . Basicamente, você pode adicionar o -Nsinalizador para evitar a abertura de um shell ssh. Adicionar -fcoloca a conexão ssh em segundo plano.
Olivier Moindrot

78

Você pode encaminhar a porta com outro sshcomando que não precisa estar vinculado ao modo como você está se conectando ao servidor (como alternativa à outra resposta). Portanto, a ordenação das etapas abaixo é arbitrária.

  1. de sua máquina local , execute

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

  2. na máquina remota , execute:

    tensorboard --logdir <path> --port 6006

  3. Em seguida, navegue até (neste exemplo) http: // localhost: 16006 em sua máquina local.

(explicação do comando ssh:

-N : nenhum comando remoto

-f : colocar ssh em segundo plano

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

encaminhar <machine2>:<portB>(escopo remoto) para <machine1>:<portA>(escopo local)


conforme mencionado por @ 0xcaff, você deve ouvir em suas outras interfaces
mmohaveri

Para a porta específica, ssh -p PORTNUMBER -N -f -L localhost: 16006: localhost: 6006 <usuário @ remoto>.
Wey Shi de

63

Você não precisa fazer nada extravagante. Apenas corra:

tensorboard --host 0.0.0.0 <other args here>

e conecte-se com o url e a porta do servidor. O --host 0.0.0.0diz ao tensorflow para ouvir as conexões em todos os endereços IPv4 na máquina local.


Esta deve ser a resposta correta ... provavelmente o tensorboard não está vinculado a um endereço visível para serviços externos.
Duane,

1
Não funciona para mim para um servidor remoto ... O que estou perdendo?
Idan azuri

Se você quiser apenas ouvir em seu IP público, pode fazer: tensorboard --host $ (hostname -I) <other args here> E então você pode copiar e colar a URL que o tensorboard imprime: TensorBoard 1.12.2 em 10.0 .50.42: 6006 (Pressione CTRL + C para sair)
Morten

1
@Idanazuri Você tem acesso http à sua máquina remota ou ela está protegida por firewall (por exemplo: acessível apenas por meio de uma conexão ssh)? Se for apenas ssh, essa resposta não funcionará para você.
drevicko

17

Outra opção se você não conseguir fazê-lo funcionar por algum motivo é simplesmente montar um diretório logdir em seu sistema de arquivos com sshfs:

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

e execute o Tensorboard localmente.


10
  1. Encontre seu IP externo local pesquisando no Google "whats my ip"ou digitando este comando:wget http://ipinfo.io/ip -qO -
  2. Determine seu IP externo remoto . Provavelmente é o que vem depois do seu nome de usuário ao efetuar ssh-ing no servidor remoto. Você também pode wget http://ipinfo.io/ip -qO -voltar a partir daí.
  3. Proteja o tráfego do servidor remoto para aceitar apenas o endereço IP externo local
  4. Execute o Tensorboard. Observe a porta padrão:6006
  5. Digite seu endereço IP externo remoto em seu navegador, seguido pela porta:123.123.12.32:6006

Se o seu servidor remoto estiver aberto ao tráfego de seu endereço IP local, você deve ser capaz de ver seu Tensorboard remoto.

Aviso : se todo o tráfego da Internet pode acessar seu sistema (se você não especificou um único endereço IP que pode acessá-lo), qualquer pessoa pode ser capaz de ver os resultados do TensorBoard e fugir com a criação de SkyNet.


7

Esta não é uma resposta adequada, mas um solucionador de problemas, espero que ajude outros networkers menos experientes como eu.

No meu caso (firefox + ubuntu16) o navegador estava se conectando, mas mostrando uma página em branco (com o logotipo do tensorboard na guia), e nenhuma atividade de log foi mostrada. Eu ainda não sei qual pode ser a razão para isso (não olhei muito para isso, mas se alguém souber, por favor, avise!), Mas resolvi mudar para o navegador padrão do Ubuntu. Aqui estão as etapas exatas, praticamente as mesmas da resposta de @Olivier Moindrot:

  1. No servidor, inicie o tensorboard: tensorboard --logdir=. --host=localhost --port=6006
  2. No cliente, abra o túnel ssh ssh -p 23 <USER>@<SERVER> -N -f -L localhost:16006:localhost:6006
  3. Abra o Ubuntu Browsere visite localhost:16006. A página do tensorboard deve carregar sem muito atraso.

Para verificar se o túnel SSH está funcionando de maneira eficaz, um servidor de eco simples como este script Python pode ajudar:

  1. Coloque o script em um <ECHO>.pyarquivo no servidor e execute-o com python <ECHO>.py. Agora o servidor terá o script de eco ouvindo em 0.0.0.0:5555 .
  2. No cliente, abra o túnel ssh ssh -p <SSH_PORT> <USER>@<SERVER> -N -f -L localhost:12345:localhost:5555
  3. No cliente, no mesmo terminal utilizado para abrir o túnel (passo 2.), o emissor telnet localhost 12345irá conectar-se ao script echo em execução no servidor. Digitar helloe pressionar Enter deve imprimir de hellovolta. Se for esse o caso, seu túnel SSH está funcionando. Este foi o meu caso e me levou à conclusão de que o problema envolvia o navegador. A tentativa de conexão de um terminal diferente fazia com que o terminal travasse.

Como eu disse, espero que ajude!
Saúde,
Andres


Eu tenho exatamente o mesmo problema no chromium + ubuntu14, pior ainda, funciona perfeitamente bem para a porta encaminhada de um computador, mas mostra a mesma página em branco (com o favicon correto) para outro. O Firefox funciona perfeitamente. Ainda não descobri, apenas usando o Firefox agora.
LucasB

Sim, muitos fatores envolvidos, mas contanto que funcione ... outra coisa a notar é que a versão TB que vem com o TF é diferente da versão autônoma de TB que pode ser encontrada aqui ... https://github.com/dmlc/tensorboardapenas para adicionar mais alternativas ao configuração. Saúde
fr_andres de

7

Você pode executar diretamente o seguinte comando no terminal do seu servidor remoto para executar o tensorboard:

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

Ou você também pode iniciar o tensorboard em seu notebook ipython:

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

4

Você deve criar uma conexão ssh usando o encaminhamento de porta:

ssh -L 16006:127.0.0.1:6006 user@host

Então você executa o tensorboardcomando:

tensorboard --logdir=/path/to/logs

Depois, você pode acessar facilmente o tensorboardem seu navegador em:

localhost:16006/

3

--bind_all opção é útil.

$ tensorboard --logdir runs --bind_all

A porta será selecionada automaticamente a partir de 6006 incrementalmente. (6006, 6007, 6008 ...)


1

Para quem deve usar as chaves ssh (para um servidor corporativo).

Basta adicionar -i /.ssh/id_rsano final.

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


0

Ao executar o tensorboard, dê mais uma opção --host = ip do seu sistema e então você pode acessá-lo de outro sistema usando http: // ip do seu sistema host : 6006


0

Outra abordagem é usar um proxy reverso , que permite visualizar o Tensorboard de qualquer dispositivo conectado à Internet sem SSHing . Essa abordagem pode tornar muito mais fácil / tratável visualizar o Tensorboard em dispositivos móveis, por exemplo.

Passos:

1) Baixe o proxy reverso Ngrok em sua máquina remota que hospeda o Tensorboard. Consulte https://ngrok.com/download para obter instruções (configuração de ~ 5 minutos).

2) Execute ngrok http 6006(supondo que você esteja hospedando o Tensorboard na porta 6006)

3) Salve o URL gerado pelo ngrok:

insira a descrição da imagem aqui

4) Insira isso em qualquer navegador para visualizar o TensorBoard:

insira a descrição da imagem aqui

Agradecimentos especiais a Sam Kirkiles

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.