如何在远程服务器上运行Tensorboard?


116

我是Tensorflow的新手,可以从我所做的一些可视化中受益匪浅。我了解Tensorboard是有用的可视化工具,但是如何在远程Ubuntu计算机上运行它?


一些可能的解决方案:(1)它可能与在本地计算机上运行的相同,尽管我尚未验证:在运行它之后,它会为您提供端口号,您可以从本地的浏览器访问它机。(2)是否可以使用RealVNC等远程桌面软件?(3)我假设您也在同一台远程机器上运行tensorflow计算;您还可以将日志文件下载到本地计算机,然后在本地计算机上运行tensorboard。
姚章

Answers:


185

为了避免使远程服务器接受本地外部IP的问题,我将采取以下措施:

  • 当我SSH进入计算机时,我使用该选项将远程服务器的端口-L转移600616006我的计算机的端口中(例如): ssh -L 16006:127.0.0.1:6006 olivier@my_server_ip

它的作用是在端口上,一切都6006在服务器(在127.0.0.1:6006)将被转发到我的机器的端口上16006


  • 然后您可以使用tensorboard --logdir log具有默认6006端口的标准在远程机器上启动tensorboard
  • 在本地计算机上,转到http://127.0.0.1:16006并使用您的远程TensorBoard。

1
在Safari上,张量板图也全黑时也有问题,它可以在Chrome上运行(与问题#4856有关
Olivier Moindrot 2016年

2
一个小提示:127.0.0.1这是您的本地计算机ip,因此您应保持原样。不要将其更改为您的远程IP。我为此浪费了10分钟。我真笨!
DarkZero

这并通过-4ssh标志强制执行IPv4即可解决。读过类似的问题,许多人在服务器中遇到IPv6地址问题。
罗伯特·帕库斯

似乎我必须留在ssh shell中。如果我关闭ssh shell,则远程张量板没有响应。关闭ssh shell时是否仍然可以连接到张量板?
风扇

@粉丝:检查下面的其他答案。基本上,您可以添加-N标志以避免打开ssh shell。添加-f将ssh连接置于后台。
奥利维尔·莫恩德罗

78

您可以使用ssh不需要与您如何连接到服务器的方式绑定的另一个命令进行端口转发(作为另一个答案的替代方法)。因此,以下步骤的顺序是任意的。

  1. 本地计算机运行

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

  2. 远程计算机上,运行:

    tensorboard --logdir <path> --port 6006

  3. 然后,导航到(在本示例中)本地计算机上的http:// localhost:16006

(ssh命令的解释:

-N :没有远程命令

-f :将ssh放在后台

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

转发<machine2>:<portB>(远程作用域)到<machine1>:<portA>(本地作用域)


如@ 0xcaff所述,您应该改用其他界面收听
mmohaveri,

对于特定端口,ssh -p PORTNUMBER -N -f -L localhost:16006:localhost:6006 <user @ remote>。
Wey Shi

63

您不需要做任何花哨的事情。赶紧跑:

tensorboard --host 0.0.0.0 <other args here>

并连接您的服务器网址和端口。该--host 0.0.0.0告诉tensorflow从在本地计算机上的所有IPv4地址连接听。


这应该是正确的答案..很可能张量板没有绑定到外部服务可见的地址。
杜安

1
对于远程服务器,它对我不起作用...我缺少什么?
伊丹·阿祖里

如果您只想听公共IP,则可以执行以下操作:tensorboard --host $(hostname -I)<此处其他参数>然后可以复制粘贴Tensorboard打印出的URL:TensorBoard 1.12.2 at 10.0 .50.42:6006(按CTRL + C退出)
Morten

1
@Idanazuri您是否对远程计算机具有http访问权限,或者它是否已被防火墙保护(例如:只能通过ssh连接访问)?如果仅ssh,则此答案对您不起作用。
drevicko

17

如果由于某种原因而无法使它正常工作的另一种选择是简单地使用sshfs在文件系统上挂载logdir目录:

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

然后在本地运行Tensorboard。


10
  1. 通过谷歌搜索或输入以下命令来查找本地外部IP "whats my ip"wget http://ipinfo.io/ip -qO -
  2. 确定您的远程外部IP。SSH到远程服务器时,这可能是用户名后面的内容。您也可以wget http://ipinfo.io/ip -qO -从那里再次。
  3. 保护远程服务器流量,使其仅接受本地外部IP地址
  4. 运行Tensorboard。请注意它默认为的端口:6006
  5. 在浏览器中输入远程外部IP地址,然后输入端口:123.123.12.32:6006

如果您的远程服务器已开放使用本地IP地址进行通信,则应该可以看到远程Tensorboard。

警告:如果所有互联网流量都可以访问您的系统(如果您尚未指定可以访问它的单个IP地址),则任何人都可以查看TensorBoard结果并自行创建SkyNet。


7

这不是一个正确的答案,而是一个疑难解答,希望可以帮助其他像我这样经验不足的人。

就我而言(firefox + ubuntu16),浏览器正在连接,但显示空白页(选项卡上带有tensorboard徽标),并且根本没有显示日志活动。我仍然不知道这可能是什么原因(没有深入研究,但是如果有人知道,请告诉我们!),但是我解决了切换到ubuntu默认浏览器的问题。这里的确切步骤与@Olivier Moindrot的答案几乎相同:

  1. 在服务器上,启动tensorboard: tensorboard --logdir=. --host=localhost --port=6006
  2. 在客户端上,打开ssh隧道 ssh -p 23 <USER>@<SERVER> -N -f -L localhost:16006:localhost:6006
  3. 打开ubuntu Browser并访问localhost:16006。tensorboard页面应立即加载。

要检查SSH隧道是否有效,一个简单的回显服务器(例如python脚本)可以帮助您:

  1. 将脚本放入<ECHO>.py服务器中的文件中,然后使用运行它python <ECHO>.py。现在,服务器将在0.0.0.0:5555上监听echo脚本。
  2. 在客户端上,打开ssh隧道 ssh -p <SSH_PORT> <USER>@<SERVER> -N -f -L localhost:12345:localhost:5555
  3. 在客户端上,在用于打开隧道的同一终端(步骤2)中,发出telnet localhost 12345将连接到服务器中运行的echo脚本。键入hello并按Enter键将hello回打印。在这种情况下,您的SSH隧道正在运行。这就是我的情况,使我得出结论,该问题涉及浏览器。尝试从其他终端连接导致终端冻结。

如我所说,希望能有所帮助!
干杯,
安德烈斯


我在chromium + ubuntu14上遇到了完全相同的问题,甚至更糟,它对于从一台计算机转发的端口非常正常,但是对于另一台计算机却显示相同的空白页(带有正确的图标)。Firefox可以正常工作。仍然没有弄清楚,只是现在使用firefox。
LucasB

是的,涉及许多因素,但只要它能起作用...另一点要注意的是,TF随附的TB版本与可在此处找到的TB独立版本不同... https://github.com/dmlc/tensorboard只是为该版本添加了更多替代方案建立。欢呼声
fr_andres

7

您可以在远程服务器的终端上直接运行以下命令来运行tensorboard:

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

或者您也可以在ipython笔记本中启动tensorboard:

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

4

您必须使用端口转发创建ssh连接:

ssh -L 16006:127.0.0.1:6006 user@host

然后运行tensorboard命令:

tensorboard --logdir=/path/to/logs

然后,您可以tensorboard在浏览器中轻松访问以下网址:

localhost:16006/

3

--bind_all 选项很有用。

$ tensorboard --logdir runs --bind_all

该端口将自动从6006中递增选择。(6006、6007、6008 ...)


1

对于必须使用ssh密钥的任何人(对于公司服务器)。

只需-i /.ssh/id_rsa在末尾添加即可。

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


0

在运行tensorboard时,再给系统一个--host = ip选项,然后您可以使用主机系统的 http:// ip从其他系统访问它:6006


0

另一种方法是使用反向代理,该代理使您可以从任何与Internet连接的设备查看Tensorboard,而无需使用SSH。例如,这种方法可以使在移动设备上查看Tensorboard更加容易/易于处理。

脚步:

1)在托管Tensorboard的远程计算机上下载反向代理Ngrok。有关说明(请参见https://ngrok.com/download)(约5分钟的设置)。

2)运行ngrok http 6006(假设您在端口6006上托管Tensorboard)

3)保存ngrok输出的URL:

在此处输入图片说明

4)将其输入到任何浏览器中以查看TensorBoard:

在此处输入图片说明

特别感谢Sam Kirkiles

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.