如何在远程服务器上运行 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
它的作用是将服务器的端口6006
(127.0.0.1:6006
)上的所有内容转发到我的机器上的端口16006
。
然后您可以使用标准
tensorboard --logdir log
和默认 6006
port 在远程机器上启动 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在运行 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)这不是一个正确的答案,而是一个疑难解答,希望可以帮助像我这样的其他经验不足的网络人员。
在我的情况下(firefox+ubuntu16),浏览器正在连接,但显示一个空白页面(标签上有 tensorboard 徽标),并且根本没有显示任何日志活动。我仍然不知道这可能是什么原因(没有深入研究,但如果有人知道请告诉我!),但我解决了它切换到 ubuntu 的默认浏览器。这里的确切步骤与@Olivier Moindrot 的答案几乎相同:
-
在服务器上,启动张量板:
tensorboard --logdir=. --host=localhost --port=6006
在客户端打开ssh隧道ssh -p 23 <USER>@<SERVER> -N -f -L localhost:16006:localhost:6006
打开ubuntu的Browser
并访问localhost:16006
。张量板页面应该没有太多延迟加载。
要检查 SSH 隧道是否有效工作,像 this python script 这样的简单回显服务器可以提供帮助:
-
将脚本放入服务器中的
<ECHO>.py
文件中,并使用python <ECHO>.py
运行它。现在服务器将在 0.0.0.0:5555 上监听 echo 脚本。
在客户端打开ssh隧道ssh -p <SSH_PORT> <USER>@<SERVER> -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