• 与服务器交互 【转载】 夕小瑶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写到某个文件里)

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

  • 相关阅读:
    php编程 之php基础 表单
    javascript/ajax和php 进阶 之 项目实战
    php编程 之 php基础三
    Ajax基础1
    JavaScript编程基础2
    css3基础一
    html超文本标记语言基础一
    表连接、存储过程及基本编程
    五种函数、子查询及分页查询思路
    数据库与表的创建及增删改查
  • 原文地址:https://www.cnblogs.com/btschang/p/10281383.html
Copyright © 2020-2023  润新知