TensorBoard以及远程访问(ssh端口转发)

时间:2022-02-17 15:23:37

一 TensorBoard简介

TensorBoard是Tensorflow提供的可视化工具,TensorBoard可以有效地展示Tensorflow在运行过程中的计算图、各种指标随着时间的变化趋势以及训练中使用到的图像等信息。TensorBoard不需要额外的安装过程,在Tensorflow安装完成时,TensorBoard会被自动安装。

TensorBoard通过Tensorflow程序运行过程中输出的日志文件,可视化Tensorflow程序的运行状态。

下面开始一个简单的Tensorflow程序,并且使用TensorBoard进行可视化。

要使用TensorBoard,添加以下语句:

writer = tf.summary.FileWriter('./graphs', sess.graph)

创建一个writer对象,将操作写入日志文件,并存放在文件夹logs_dir,比如 “./graphs”

import tensorflow as tf

a = tf.constant(2)
b = tf.constant(3)
x = tf.add(a,b)

with tf.Session() as sess:

#添加writer对象
writer = tf.summary.FileWriter('./graphs', sess.graph)
print (sess.run(x))

# 关闭
writer.close()

接下来,运行python文件:

$ python [yourprogram].py

启动TensorBoard,运行下面的命令会启动一个服务,这个服务的端口默认为6006。

$ tensorboard --logdir="./graphs"

通过浏览器打开 localhost:6006 即可。
在graph栏,可以查看上面程序Tensorflow计算图的可视化结果,如下有三个结点:
TensorBoard以及远程访问(ssh端口转发)

“Const”和”Const_1”分别对应于a和b,结点”Add”对应于x。这样的可读性显然不是很高,要想使TensorBoard显示操作的名字,必须在定义时明确命名。即:

a = tf.constant(2,name='a')
b = tf.constant(3,name='b')
x = tf.add(a,b)

现在,计算图如下:

TensorBoard以及远程访问(ssh端口转发)

计算图定义操作(ops)和依赖(dependencies),并没有显示values。

二 远程访问Tensorboard

我是采用ssh连接实验室的服务器来跑模型(有和我一样的小伙伴可以参考~),如何远程访问TensorBoard。

先说方法,参考Stack overflow:

TensorBoard以及远程访问(ssh端口转发)

  • 实验室的服务器和我的电脑连接在同一个局域网内,所以我只需要浏览器中输入(即可启动Tensorboard):


    服务器ip:端口

    #即:服务器ip:6006
  • 使用SSH进行端口转发

    ssh -L 16006:127.0.0.1:6006 user@hostname

    在连接SSH时创建端口转发,浏览器输入 127.0.0.1:16006就可以了。

三 关于SSH端口转发

也是因为这个问题,我也算是了解了SSH可以实现端口转发。

下面简单记录一下(参考):

ssh 主要用于通过网络远程访问另一个主机,并且提供做大的保护。

ssh会自动加密和解密所有ssh客户端和服务端之间的网络数据。除此之外,ssh还提供了端口转发的功能,能够将其他TCP端口的网络数据通过ssh链接来转发,并且自动提供了相应的加密及解密服务。

因为ssh为其他TCP链接提供了一个安全的通道来进行传输,这一过程也被叫作”隧道”。

ssh端口转发能够提供两大功能:

  • 加密ssh client端至ssh server端之间的通讯数据。
  • 突破防火墙的限制完成一些之前无法建立的TCP连接。

TensorBoard以及远程访问(ssh端口转发)

如上图所示,使用了端口转发之后,TCP端口A和B之间现在并不是直接通讯,而是转发到了ssh客户端和服务端来通讯,从而自动实现了数据加密并同时绕过了防火墙的限制。

本地端口转发

命令格式:
ssh -L <local port>:<remote host>:<remote port><SSH hostname>

在LdapClientHost上执行如下命令即可建立一个SSH的本地端口转发,例如:

$ ssh -L 7001:localhost:389 LdapServerHost

TensorBoard以及远程访问(ssh端口转发)

上例中,使用7001端口作为本地的监听端口。(在选择端口时需要注意非管理员账号无权绑定1-1023端口,一般选用一个1024-65535之间的且尚未被使用的端口号即可)

注意:

  • SSH 端口转发是通过 SSH 连接建立起来的,我们必须保持这个 SSH 连接以使端口转发保持生效。一旦关闭了此连接,相应的端口转发也会随之关闭。
  • 我们只能在建立 SSH 连接的同时创建端口转发,而不能给一个已经存在的 SSH 连接增加端口转发。

本地转发:

LdapClientHost 同时是应用的客户端,也是 SSH Client,这两个连接都从它指向 LdapServertHost(既是LDAP 服务端,也是 SSH Server)。