zoukankan      html  css  js  c++  java
  • 与服务器交互 【转载】 夕小瑶https://www.jiqizhixin.com/articles/2018-07-02-15

    ssh免密快速登录

    首先,将你的登录命令写入你的pc端的bash启动脚本中。Mac系统为 ~/.bash_profile ,linux系统为 ~/.bashrc 。例如你的服务器用户名为dlnlp,ip为102.10.60.23,那么就把这句登录命令写进去:

    alias sshdlnlp="ssh dlnlp@102.10.60.23"

    还有一种更科学强大的方法:将你的服务器信息写入PC端的ssh配置文件中,配置文件位于 ~/.ssh/config ,例如你的服务器用户名为dlnlp,ip为102.10.60.23,那么就把这句写进去:

    Host dlnlp
    [一个Tab]User dlnlp
    [一个Tab]Hostname 102.10.60.23
    [一个Tab]Port 22

    (Host后面那个dlnlp是你起的名字,你也可以用更简短的名字) 这样可以 ssh dlnlp 也能快捷登录,注意中间的空格哈。而且scp也更加方便了

    保存后别忘  source ~/.bash_profile  或者source ~/.bashrc  激活一下启动脚本哦。

    然后,经过第一步后,只需要再敲密码就可以进入啦。但是懒癌至深的我们怎么能容忍敲密码这么麻烦的事情呢!(划掉,应该是小仙女怎么能容忍敲密码这种事情呢)但是我们又不能牺牲服务器的安全性,那怎么办呢?考验大学里计算机网络基础的时候到了~

    也很简单,把你PC端的ssh公钥写入服务器的ssh信任列表里就可以啦。首先用`ssh-keygen`命令生成rsa密钥对(生成一只私钥和一只公钥),一路enter即可,但是注意:

    之前有已经生成过的同学在此处就选择n吧,没有生成过的同学就一路next~

    然后去 ~/.ssh/ 文件夹下将公钥发送到服务器上的某文件夹里:

    然后去服务器上,把你PC端的公钥丢进ssh信任列表:

    cat id_rsa.pub >> ~/.ssh/authorized_keys

    ssh会把你每个你访问过计算机的公钥(public key)都记录在~/.ssh/known_hosts。当下次访问相同计算机时,OpenSSH会核对公钥。如果公钥不同,OpenSSH会发出警告,如果我们重新安装系统,其公钥信息还在,连接会出现如下截图情况

    ssh连接所生成的known_hosts出现的问题

    解决方法: rm -rf ~/.ssh/known_hosts

    关于jupyter notebook

    jupyter notebook这个神器小夕在历史文章中写过啦,也是一个重量级调参神器!或者直接可以说深度学习神器!在服务器端依然犀利的无可替代,只需要如下的tricks。

    1、服务器端开启jupyter notebook后

    然后复制最后那一行的 token=xxx ,这个token就是远程访问的密码!同时记下 最后那行显示的端口号 8888(因为如果服务器上同时开多个的话,端口号就不一定是8888了哦),然后去PC端做一个端口映射!即通过ssh隧道来将服务器端的8888端口号映射到本地(PC端)的某个端口(如1234):

    ssh -L 1234:localhost:8888 dlnlp@102.10.60.23
    

    (这个操作同样可以用于远程监视服务器端tensorboard)

    这时就可以在PC端的浏览器

    http://localhost:1234
    

    直接访问服务器上的jupyter notebook啦~当然,访问时会让你输入密码,这时就输入之前记下的那个token哦。

    2、让jupyer notebook跟anaconda开发环境融合。

    默认的情况下jupyter notebook是运行在系统默认环境里的,如果要让它运行在我们自己用ananconda创建的环境中,要进入那个环境中,然后安装 nb_conda 这个库:

    conda install nb_conda
    

    这时再开启jupyter notebook就能选择在我们这个环境里运行代码啦。

    多任务管理(并行调参)

    如果你的服务器上有多个GPU,或者你的任务消耗GPU资源不多,那么并行的训练模型调参数是极大提高开发效率的!这里小夕给出几种场景下的常用方案:

    1、比如我们在服务器上除了训练还要接着干别的事情(比如还要捣鼓一下贪吃蛇什么的),那么我们就可以直接将训练任务挂后台。具体如下。

    在linux中,在命令后面加上 & 符号可以将命令在后台执行,为了能看到训练日志,我们当时还需要输出重定向(否则会打印到屏幕上干扰正常工作的),所以比如我们调batchsize参数时可以这样:

    dlnlp@ubuntu:~$ python train.py --batchsize=16 > log_batch16.txt &
    

    当然再挂上其他batchsize大小,如:

    dlnlp@ubuntu:~$ python train.py --batchsize=16 > log_batch16.txt &
    dlnlp@ubuntu:~$ python train.py --batchsize=64 > log_batch64.txt &
    dlnlp@ubuntu:~$ python train.py --batchsize=128 > log_batch128.txt &
    

    通过 jobs 命令可以看到后台任务的运行状况(running、stopped等),通过 bg [任务号] 可以让后台stopped的命令继续running,通过 fg [任务号] 可以让后台的任务来前台执行。对于前台已经执行起来的任务,可以 ctrl+z 来丢进后台(丢后台时stop了的话用bg让其run起来)。

    感谢微信用户A Bad Candy在微信订阅号后台留言提醒上面的丢后台方法会在ssh断开连接后进程终止,因此:

    如果我们还不希望ssh断开后导致训练任务终止,那么需要再在命令前面加上 nohup 。如:

    dlnlp@ubuntu:~$ nohup python train.py --batchsize=16 > log_batch16.txt &
    

    2、如果我们特别着急,不仅要并行挂着很多训练任务,而且都要实时的监控它们的训练进展,那么使用 screen命令吧,这个命令就相当于可以让你同时开很多个窗口(就像桌面上那样,你可以开很多应用程序的很多窗口),而且多个窗口之间可以轻松切换,同样这种方法不会因为ssh的断开而停止训练任务。

    具体的操作可以直接在linux下 man screen 来查看screen命令的帮助文档。英文恐惧症的童鞋可以看本文参考文献[1]。

    睡觉调参模式(串行调参)

    大部分场合下我们没有那么多充裕的GPU可以用,我们一般只能一次挂一个任务,但是我们又有很重的调参任务,那怎么办呢?

    依然很简单啦,首先,装好python-fire这个工具。

    它可以非常轻松的将你的python程序变成命令行程序,并且可以轻松的将你要调的参数封装成命令行参数的形式。

    然后,写一个调参shell脚本,把你要调的参数全都写进去!比如就像这样:

    (当然别忘在代码里将训练的summary写到某个文件里)

    然后就可以挂上这个脚本去睡觉啦~睡到天亮发现各个最优参数都找到了,超级开心有木有。

  • 相关阅读:
    Linux常用命令-centos
    USACO 2006 Open, Problem. The Country Fair 动态规划
    USACO 2007 March Contest, Silver Problem 1. Cow Traffic
    USACO 2007 December Contest, Silver Problem 2. Building Roads Kruskal最小生成树算法
    USACO 2015 February Contest, Silver Problem 3. Superbull Prim最小生成树算法
    LG-P2804 神秘数字/LG-P1196 火柴排队 归并排序, 逆序对
    数据结构 并查集
    浴谷国庆集训 对拍
    1999 NOIP 回文数
    2010 NOIP 普及组 第3题 导弹拦截
  • 原文地址:https://www.cnblogs.com/btschang/p/10281383.html
Copyright © 2011-2022 走看看