首先,当然得是要用自己的PC连接上服务器。如果你的PC是linux系统,那么可以直接通过ssh指令进行远程访问,这里不详细说明。接下来我们主要说PC是windows上的操作。首先,我们要下一个用于ssh连接的工具,个人推荐的是Xshell。其打开后的界面如下图所示:
输入名称——>主机(服务器ip地址)——>连接——>输入在服务器上的用户名及密码,确定之后就会建立了连接。之后的界面就可以操作服务器上的文件了。
如果想往服务器上传文件,可以安装利用xftp,安装之后打开左侧是本地目录,右侧是服务器目录,可以拖动相互传输文件。
由于实验室的网实在是不稳定,所以经常遇到跑了好几个小时的代码快要出结果的时候却断网了,导致与服务器的连接中断,代码也就自然而然的停止运行了(至于其中的具体原因可以自行百度)。这点真的让人很苦恼。同时,当你的ssh在执行一个代码时,你如果不新建一个连接,你在这个连接中是无法干其他的事情的,这一点也很不好。于是,考虑可以把代码放到服务器后台运行。
第一种 nohup
最开始的做法是
$ nohup python test.py
1
这样执行的时候会将代码放在服务器后台执行,你的终端是看不到运行过程的,期间运行的结果(代码运行过程中打印出来的)会在一个生成的nohup.out文件中保存。
第二种 screen (服务器安装screen好像需要root权限,所以我没有尝试这个方法)
可以简单的认为用这个命令你可以为不同的任务开不同的窗口,这个窗口之间是可以切换的,同时,窗口和你的会话连接基本上没有任何区别,这样你可以在开一个连接的时候同时干多件事情,并且在终端看得到运行过程的同时而不会由于断网而导致代码停止运行。其常用命令如下:
创建一个窗口
screen -S name #创建一个窗口,并且为这个窗口命名 s c r e e n − S y o l o 当 你 执 行 完 以 上 命 令 后 , 就 会 自 动 跳 入 名 为 y o l o 的 窗 口 , 在 这 个 窗 口 里 可 以 干 你 想 干 的 事 情 。 当 你 不 想 呆 在 这 个 窗 口 时 , 你 可 以 通 过 快 捷 键 C t r l + a + D 断 开 这 个 窗 口 的 连 接 而 回 到 连 接 会 话 界 面 。 即 显 示 如 下 [ d e t a c h e d f r o m 28113. y o l o ] u s e r @ u b u n t u − S u p e r − S e r v e r : / c o d e screen -S yolo 当你执行完以上命令后,就会自动跳入名为yolo的窗口,在这个窗口里可以干你想干的事情。 当你不想呆在这个窗口时,你可以通过快捷键Ctrl+a+D断开这个窗口的连接而回到连接会话界面。即显示如下 [detached from 28113.yolo]user@ubuntu-Super-Server:~/code screen−Syolo当你执行完以上命令后,就会自动跳入名为yolo的窗口,在这个窗口里可以干你想干的事情。当你不想呆在这个窗口时,你可以通过快捷键Ctrl+a+D断开这个窗口的连接而回到连接会话界面。即显示如下[detachedfrom28113.yolo]user@ubuntu−Super−Server: /code
1
说明从yolo这个窗口断开回到了会话界面。但是这个断开只是不显示那个窗口,而窗口对应的任务是在后台运行的。
查看已创建的所有窗口
KaTeX parse error: Expected 'EOF', got '#' at position 12: screen -ls #̲可以查看已创建的所有窗口 执行… screen -lsThere are screens on: 28475.ssd (2017年11月27日 20时07分41秒) (Detached) 28113.yolo (2017年11月27日 19时57分26秒) (Detached)
1
重新连接Detached的窗口
如果想看其中一个窗口任务的执行状态,可以通过如下指令:
$screen -r ssd #重新连接到yolo窗口,显示其运行过程
杀死某个窗口
如果想直接停止某个窗口任务的运行,可以直接通过杀死id的方式 KaTeX parse error: Expected 'EOF', got '#' at position 15: kill -9 28475 #̲终止ssd窗口对应任务的运行,… screen -lsThere is a screen on: 28113.yolo (2017年11月27日 19时57分26秒) (Detached)
总结一下,screen可以实现代码在后台运行时的可视化,同时,能在开一个会话连接时创建多个窗口处理不同的任务。用起来也很方便。
对于使用tensorflow的同学,tensorboard是个很好的工具。通过以下的命令可以打开tensorboard,这个port可以自己改,默认的是6006。
$tensorboard --logdir=log --port=6006
1
尴尬的是,当你在服务器上执行上段指令时,他会给你个地址让你在浏览器上打开。但是,使用服务器上的浏览器基本是件不可能的事情!我怎么将服务器上的信息转到自己的电脑上呢?这时就需要用到***端口转发***。我们最近实现这个有两种方式:
第一种 针对win10用户(我没有尝试这一种)
想必大家都知道2017年win10系统内嵌了一个linux的子系统。首先我们要启用这个子系统。具体步骤是:打开 所有设置->更新与安全->针对开发人员然后选择下图中的开发人员模式。
执行完上述步骤win10会自动下载相关库和包,下载完后在控制面板中找到程序和功能然后选择启用或关闭Windows功能,出现下图菜单:
勾选适用于Linux的Windows子系统(Beta),然后重启电脑。
重启电脑后win+R输入cmd,然后在dos界面输入bash之后就会下载对应的组件,这个时间可能比较长需要耐心等待。下载完成后,输入相应的用户名和密码就好了。这样,我们就完成了win10上的linux子系统的安装。下次打开时,直接通过win+R输入bash即可。
接下来就是用自己电脑的linux与服务器进行ssh连接并进行端口转发。具体步骤是:
首先win+R 输入bash打开win10自带的linux的子系统,在命令行输入以下指令
$ ssh -L 16006:127.0.0.1:6006 [email protected]
1
解释下上面的指令,127.0.0.1是自己PC的本地地址(localhost),16006代表的本地的16006端口,192.168.1.115是服务器的ip地址(同样服务器和PC在一个局域网下)usr是在服务器上想登陆的用户名,6006是服务器上的6006端口,上面的指令就可以实现将服务器上6006端口的信息转发到本地主机的16006端口上。
当你建立了以上连接后,在你的xshell建立的会话连接中输入打开tensorboard的指令后,我们在自己的电脑浏览器上输入127.0.0.1:16006或者localhost:16006就可以访问到服务器上的tensorboard的信息了。
第二种 依然是使用xshell(我用的这一种,还挺好用的)
具体做法是当你用xshell建立好连接后,点击下图红框中的属性按钮
然后点击属性中的SSH下的隧道,得到如下界面
点击添加:
将侦听端口改为16006(当然也可以是其他的,就是本机的端口),目标主机和源主机保持localhost不变,目标端口就是服务器上打开tensorboard对应的端口6006然后点击确定之后,就建立好了服务器端口16006与自己电脑端口6006的转发。然后按之前的步骤打开tensorboard,在本地浏览器中输入127.0.0.1:16006或者localhost:16006就可以访问到服务器上的tensorboard的信息了,所以说xshell真的特别好用!
注:下面的图片后面再补上, 暂时先这样吧。。。。。
在服务器上jupyter notebook也是经常被用到的,一般输入如下命令便可以打开
$ jupyter notebook --port=8888
这里的port默认是8888。同样,在不能使用服务器浏览器的情况下想本地PC能读到服务器8888端口的信息,也需要建立端口转发。整个过程同tensorboard的设置类似,不过是把端口号更改就好。当端口转发建立后。我们在服务器输入上述指令,会得到以下输出:
[I 23:17:08.227 NotebookApp] Writing notebook server cookie secret to /run/user/1002/jupyter/notebook_cookie_secret[I 23:17:08.275 NotebookApp] JupyterLab alpha preview extension loaded from /home/yuwei/anaconda3/lib/python3.6/site-packages/jupyterlabJupyterLab v0.27.0Known labextensions:[I 23:17:08.277 NotebookApp] Running the core application with no additional extensions or settings[I 23:17:08.280 NotebookApp] Serving notebooks from local directory: /home/yuwei[I 23:17:08.280 NotebookApp] 0 active kernels [I 23:17:08.280 NotebookApp] The Jupyter Notebook is running at: http://localhost:8888/?token=d4846a751b41bb288ac8c38b1da7976c0677b6aa51430705[I 23:17:08.280 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).[C 23:17:08.280 NotebookApp] Copy/paste this URL into your browser when you connect for the first time, to login with a token: http://localhost:8888/?token=d4846a751b41bb288ac8c38b1da7976c0677b6aa51430705
1
需要做的只是将最后一行的地址复制到本地浏览器然后将8888(服务器端口)改为转发的本地端口(如:16006或8888)就可以了。这样我们在自己的电脑上也可以使用服务器上的jupyter notebook了,如下图所示。