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

我刚来到 Tensorflow,如果能想象一下我正在做的事情,我会受益匪浅。我知道 Tensorboard 是一个非常有用的可视化工具,但是如何在我的远程 Ubuntu 机器上运行它呢?

185126 次浏览
  1. 通过搜索 "whats my ip"或输入以下命令找到您的 本地外部 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 结果和失控与创建天网自己。

下面是我所做的,以避免让远程服务器接受本地外部 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端口在远程计算机上启动张量板
  • 在您的本地机器上,转到 http://127.0.0.1:16006并享受您的远程 TensorBoard。

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

  1. 从你的 本地机器,运行

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

  2. 遥控器机器上,运行:

    tensorboard --logdir <path> --port 6006

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

(ssh 命令的说明:

没有远程指令

-f: 将 ssh 放在后台

返回文章页面

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

在运行张量板时,还有一个选项—— host = 你系统的 IP 地址,然后您可以使用 http://abc1:6006从其他系统访问它

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

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

然后在本地运行 Tensorboard。

你不需要做什么花哨的事,只要跑就行了:

tensorboard --host 0.0.0.0 <other args here>

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

这不是一个正确的答案,而是一个疑难解答者,希望能帮助其他像我这样经验不足的网络工作者。

在我的例子中(firefox + ubuntu16) ,浏览器正在连接,但显示的是一个空白页面(标签上有 tensorboard 标志) ,根本没有显示任何日志活动。我仍然不知道是什么原因(没有深入调查,但如果有人知道,请告诉我!),但我解决了它切换到 ubuntu 的默认浏览器。这里的步骤和@Olivier Moindrot 的回答差不多:

  1. 在服务器上,启动张量板: 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。张量板页面应该没有多少延迟加载。

为了检查 SSH 隧道是否有效工作,简单的 echo 服务器(如 这个巨蟒脚本)可以提供帮助:

  1. 将该脚本放入服务器中的 <ECHO>.py文件中,并使用 python <ECHO>.py运行它。现在服务器将拥有监听 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,然后按回车键,就可以打印出 hello。如果是这种情况,那么您的 SSH 隧道正在工作。这是我的案子,让我得出结论,问题出在浏览器上。试图从另一个终端连接导致终端死机。

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

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

ssh -L 16006:127.0.0.1:6006 user@host

然后运行 tensorboard命令:

tensorboard --logdir=/path/to/logs

然后,你可以很容易地在浏览器中访问 tensorboard:

localhost:16006/

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

在最后加上 -i /.ssh/id_rsa

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

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

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

或者你也可以在你的 ipython 笔记本中启动张量板:

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

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

步骤:

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

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

3)保存 ngrok 输出的 URL:

enter image description here

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

enter image description here

特别感谢 Sam Kirkiles

--bind_all选项是有用的。

$ tensorboard --logdir runs --bind_all

端口将自动从6006中逐步选择。(6006,6007,6008...)