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

Posted

技术标签:

【中文标题】如何在远程服务器上运行 Tensorboard?【英文标题】:How can I run Tensorboard on a remote server? 【发布时间】:2016-10-25 13:33:07 【问题描述】:

我是 Tensorflow 的新手,我将从我正在做的一些可视化中受益匪浅。我知道 Tensorboard 是一个有用的可视化工具,但是如何在我的远程 Ubuntu 机器上运行它?

【问题讨论】:

一些可能的解决方案:(1)它可能和在本地机器上运行一样,虽然我没有验证过:运行它之后,它会为你提供一个端口号,你从本地计算机上的浏览器访问它。 (2) 可以使用RealVNC等远程桌面软件吗? (3) 我假设你也在同一台远程机器上运行 tensorflow 计算;您还可以将日志文件下载到本地机器,并在本地机器上运行 tensorboard。 【参考方案1】:
    通过谷歌搜索 "whats my ip" 或输入以下命令找到您的 本地 外部 IP:wget http://ipinfo.io/ip -qO - 确定您的远程外部 IP。这可能是 ssh 进入远程服务器时您的用户名之后出现的内容。您也可以从那里再次wget http://ipinfo.io/ip -qO -。 确保您的远程服务器流量仅接受您的本地外部 IP 地址 运行张量板。注意它默认的端口:6006 在浏览器中输入您的远程外部 IP 地址,然后是端口:123.123.12.32:6006

如果您的远程服务器对来自本地 IP 地址的流量开放,您应该能够看到远程 Tensorboard。

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

【讨论】:

【参考方案2】:

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

当我ssh进入机器时,我使用选项-L将远程服务器的端口6006传输到我机器的端口16006(例如): ssh -L 16006:127.0.0.1:6006 olivier@my_server_ip

它的作用是将服务器的端口6006127.0.0.1:6006)上的所有内容转发到我的机器上的端口16006


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

【讨论】:

在 Safari 上也有张量板图全黑的问题,它适用于 Chrome(与问题 #4856 相关) 一个小提示:127.0.0.1 这是你的本地机器IP,所以你应该保持原样。不要将其更改为您的远程IP。我在这上面浪费了 10 分钟。我是多么愚蠢! this 并使用 -4 ssh 标志强制 IPv4 解决了它。阅读类似的问题后,许多人在他们的服务器中遇到了 IPv6 地址的问题。 看来我必须留在 ssh shell 中。如果我关闭 ssh shell,远程张量板没有响应。有没有办法在关闭 ssh shell 时仍然连接到 tensorboard? @Fan:查看另一个答案below。基本上,您可以添加 -N 标志以避免打开 ssh shell。添加-f 会将ssh 连接置于后台。【参考方案3】:

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

    从您的本地机器上运行

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

    远程机器上,运行:

    tensorboard --logdir <path> --port 6006

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

(ssh命令说明:

-N:没有远程命令

-f : 将 ssh 置于后台

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

转发<machine1>:<portA>(本地范围)到<machine2>:<portB>(远程范围)

【讨论】:

正如@0xcaff 提到的,你应该在你的其他接口上监听 特定端口,ssh -p PORTNUMBER -N -f -L localhost:16006:localhost:6006 . 根据“man ssh”页面,-L 选项执行从本地范围到远程范围的端口转发。但否则很好的答案。 @BonRyu 你是对的,谢谢!我已经确定了答案【参考方案4】:

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

【讨论】:

【参考方案5】:

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

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

然后在本地运行 Tensorboard。

【讨论】:

【参考方案6】:

你不需要做任何花哨的事情。运行:

tensorboard --host 0.0.0.0 <other args here>

并连接到您的服务器 url 和端口。 --host 0.0.0.0 告诉 tensorflow 监听本地机器上所有 IPv4 地址上的连接。

【讨论】:

这应该是正确的答案.. 很可能 tensorboard 只是没有绑定到外部服务可见的地址。 远程服务器对我不起作用...我错过了什么? 如果你只想监听你的公共 IP,你可以这样做: tensorboard --host $(hostname -I) 然后你可以复制粘贴 tensorboard 打印的 URL出:TensorBoard 1.12.2 10.0.50.42:6006(按 CTRL+C 退出) @Idanazuri 您是否可以通过 http 访问您的远程计算机,或者它是否有防火墙(例如:只能通过 ssh 连接访问)?如果它只是 ssh,那么这个答案对你不起作用。 此答案与您在专用 LAN 上的系统上进行培训并且只想对培训过程进行临时检查的情况特别相关。您将需要指定您的 logdir(您可能会发现它是检查点目录的子目录,其文件类似于“events.out.tfevents.1604862122.blah.blah.blah”)【参考方案7】:

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

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

    在服务器上,启动张量板:tensorboard --logdir=. --host=localhost --port=6006 在客户端打开ssh隧道ssh -p 23 &lt;USER&gt;@&lt;SERVER&gt; -N -f -L localhost:16006:localhost:6006 打开ubuntu的Browser并访问localhost:16006。张量板页面应该没有太多延迟加载。

要检查 SSH 隧道是否有效工作,像 this python script 这样的简单回显服务器可以提供帮助:

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

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

【讨论】:

我在 chromium+ubuntu14 上遇到了完全相同的问题,更糟糕的是,它对于从一台计算机转发的端口工作得非常好,但在另一台计算机上显示相同的空白页面(带有正确的 favicon)。 Firefox 工作得很好。还是没弄明白,现在就用firefox。 是的,涉及的因素很多,但只要它有效...另外需要注意的是,TF 附带的 TB 版本与可以在此处找到的 TB 独立版本不同。 . https://github.com/dmlc/tensorboard 只是为设置添加更多替代方案。干杯【参考方案8】:

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

ssh -L 16006:127.0.0.1:6006 user@host

然后你运行tensorboard 命令:

tensorboard --logdir=/path/to/logs

然后您可以在浏览器中轻松访问tensorboard

localhost:16006/

【讨论】:

【参考方案9】:

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

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

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

【讨论】:

【参考方案10】:

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

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

或者你也可以在你的 ipython notebook 中启动 tensorboard:

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

【讨论】:

什么意思 "0.0.0.0" ,我需要用别的东西代替吗? 它是你本地机器的端口,如果你有不同的主机,你可以改变它【参考方案11】:

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

步骤:

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

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

3) 保存 ngrok 输出的 URL:

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

特别感谢Sam Kirkiles

【讨论】:

【参考方案12】:

--bind_all 选项很有用。

$ tensorboard --logdir runs --bind_all

端口会自动从6006中增量选择。(6006,6007,6008...)

【讨论】:

以上是关于如何在远程服务器上运行 Tensorboard?的主要内容,如果未能解决你的问题,请参考以下文章

远程访问Tensorboard

两次端口转发:在本机远程使用服务器上的TensorBoard

两次端口转发:在本机远程使用服务器上的TensorBoard

服务器上安装并使用tensorboard

远程服务器使用Tensorboard

技术分享:国民远控向日葵如何通过BBR算法提升远控体验?