远程使用内网服务器的visdom,TensorBoard,Jupyter notebook

之前在实验室小伙伴的建议下,在GPU服务器上装了docker,具体配置可以链接deepo,按照流程可以非常轻松地在服务器上完成配置,并且绑定了Jupyter notebook,可以很方便的使用。

但总觉得对docker不熟悉,且之前在服务器上已经配置了anaconda3和PyTorch,所以决定暂时不使用docker。

后期使用PyTorch时,想要可视化神经网络及训练过程,便于分析和理解。一开始还不知道PyTorch的远程可视化神器visdom,所以就借用这里的教程PyTorch中如何使用tensorboard导入一个脚本实现TensorBoard可视化。

后来又发现Facebook有专门为PyTorch开发的一款可视化工具visdom,那肯定优先使用原生产品。关于visdom的使用,可以看这里PyTorch的远程可视化神器visdom。

通过以上几个链接,可视化问题正常情况下都可以解决。但是,我遇到了一个问题,对于新手来说或者对计算机网络协议不是很了解的朋友来说可能是一个问题。

就是在服务器上开启jupyter notebook,或者TensorBoard,或者visdom服务时,会给出一个IP地址和端口号,可以在浏览器中运行。但是我在本地浏览器中输入这个地址并不能连接服务。

后通过Google及Stack Overflow,找到解决方案,原因在于本地访问服务器应用需要建立SSH通道,SSH端口转发需要SSH连接,而SSH连接是有方向的,从SSH Client到SSH Server。而我们所要访问的应用也是有方向的,应用连接的方向也是从应用的Client端连接到应用的Server端。比如我们要访问服务器上的Web站点时,HTTP应用的方向就是我们这台主机(Client)到服务器(Server)。

我们这个问题中,开启jupyter notebook,TensorBoard,或是visdom,都属于本地转发(Local Forward),即SSH连接和应用的连接这两个连接的方向一致。具体解决方法是在本地终端建立SSH通道:

ssh -L <local host>:<local port>:<remote host><remote port> <SSH hostname>

比如visdom端口号是8097,则建立SSH通道:

ssh -L 127.0.0.1:8097:127.0.0.1:8097 username@hostIP

然后进入服务器终端界面,开启visdom服务:

python3 -m visdom.server

创建visdom环境:

vis=visdom.Visom(env=‘model_1’)

在本地浏览器中输入127.0.0.1:8097,就可以看到我们的环境。

jupyter notebook和TensorBoard也大致相同,都是需要建立SSH通道,然后才能使用。

但是这样有一个问题,我每次开启服务都需要建立SSH通道,每次都要敲命令很麻烦。因此可以直接在本地修改SSH中的config文件,具体操作如下:

本地打开终端,输入:

vim ~/.ssh/config

在config文件中输入:

# visdom
LocalForward 127.0.0.1:8097 127.0.0.1:8097

当然,你给出的访问端口号必须是没有被占用的,我为了方便记忆,就用了和服务器一样的端口号。

其实,这里也给出了解决方案。visdom
远程使用内网服务器的visdom,TensorBoard,Jupyter notebook_第1张图片

关于SSH其他功能可以看这里。SSH Cheat Sheet

PS:由于计网知识很欠缺,这部分内容或许表述不是很清晰,大家参考即可,可以通过我给出的链接获取你想要的知识。通过Google和Stack Overflow就可以解决问题了,这一次体会颇深,用baidu搜索寻找解决方案犹如大海捞针,很多博客也是东拼西凑,表述不清。所以为了节省时间,请用Google。

你可能感兴趣的:(linux)