如何与深度学习服务器优雅的交互?(长期更新)

0. 故事序言

如果有人问小夕:"小夕,要是人工智能的就业岗位一夜之间消失了,你会去转行做什么呢?"

答曰:"当然是去做Linux运维啊23333"

小夕有一台自己负责的GPU服务器,她可让小夕操碎了心呐,真是好不容易把这娇气的小公举拉扯大了。下面就向各位服务器宝宝的爸爸妈妈们传授一下育女经验,让她早日成长为一个省心的深度学习服务器。

下面小夕将依次介绍:

  1. 操作系统建议
  2. ssh免密快速登录
  3. 内网穿透(跨网段访问服务器)
  4. 文件传输与实时同步
  5. 多开发环境管理
  6. 多任务管理(并行调参)
  7. 睡觉调参模式(串行调参)
  8. 关于Jupyer Notebook
  9. 单任务霸占GPU模式
  10. 来自订阅号评论区的其他神操作

v2-4a6341db78434a225a8bd4d843980b43_b.jpg

1. 操作系统建议

如果你主要用tensorflow来作为你的深度学习框架,那么小夕还是建议安装16.04服务器版。注意是服务器版!为什么呢?因为有很多显卡的高版本驱动与桌面版的图形界面不兼容,导致容易出现循环登陆问题,要解决循环登陆问题也是极其的麻烦,小夕曾经在所里配的笔记本上捣鼓过一周多,重装10余次系统,尝遍国内外各种方法,最终放弃╮(╯▽╰)╭

所以这一次小夕直接为服务器装了ubuntu16.04的服务器版!注意服务器版是没有图形界面的,对shell不熟悉的童鞋要尽快打好基础哦。果然,在服务器版下装驱动装cuda一路next,0errors,0warnings

v2-08b8ae53edc55f09378f9e5a1e499bfe_b.jpg

由于小夕在高中时实在讨厌炸了国产软件全家桶对windows的狂轰滥炸,导致一遍遍的重复

        while True:系统变乱系统变卡重装系统

的过程,于是大学里在一学长的诱惑下,成功入了mac的坑,从此整个世界都清净了,同时对命令行(mac与linux都是基于posix标准,命令行/shell语法高度相似)的沦陷一发不可收拾。。。(好像又跑题了?咳咳,小夕是想说,由于最近几年很少接触windows了,所以本文所列tricks可能对windows的兼容性略差。不过话说回来,做深度学习的日常怎么可能在windows上进行啊喂,不知道pytorch都懒得出windows版本了嘛。(放钩--->


2. ssh免密快速登录

远程登录最最方便的当然就是ssh啦。看小夕的一键登录!

v2-5a8dcc4426155e8acf047a1de2ebeb21_b.jpg

第一行黄色的是小夕的用户名、电脑名、当前目录。小夕设置的命令就是sshdlnlp,敲上这个命令直接进入服务器!当然,这个方法其实非常歪门邪道╮( ̄▽ ̄"")╭更加合理的是写在ssh配置文件中。

不过,实现这个歪门邪道非常简单,分两步:

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

        alias sshdlnlp="ssh dlnlp@102.10.60.23"  
感谢评论区 @karajan1001 补充更科学强大的方法:将你的服务器信息写入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也更加方便了。

当然,登录命令叫sshdlnlp,你也可以改成别的。保存后别忘 source ~/.bash_profile 或者 source ~/.bashrc 激活一下启动脚本哦。

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

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

v2-4caf762d4648f366adcb23dc05fdad94_b.jpg

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

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

v2-505040d0a11a5d5ba45af596377e5e91_b.jpg

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

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

好啦~搞定啦,再回到你的PC端登录试试吧,是不是连输入密码都省掉啦。

3. 内网穿透(跨网段访问服务器)

但是注意哦,如果你的服务器是在局域网内,那你的PC离开这个局域网的时候当然就找不到你的服务器啦。想要在家里用GPU服务器?很简单,小夕教你分分钟内网穿透!

在内网穿透方面,小夕试了好几种方案后,感觉还是花生壳对新手最友好也最稳定。我们的内网穿透只需要将服务器内网ip以及22端口号(即ssh端口号)映射到外网ip的某个端口号。这个过程使用花生壳非常简单,在网上有很多教程,小夕就不啰嗦啦。之后我们要做的就是将这个外网ip和端口号也封装成一条命令,比如花生壳分配给我们的外网ip是103.44.145.240,端口是12560,那么只需要把这个写入客户端shell启动脚本:

        alias sshdlnlp_remote="ssh -p 12560 dlnlp@103.44.145.240"
(别忘用source刷新启动脚本)

之后就可以在世界各地用一条命令访问你的gpu服务器啦。

---- 10.19 更新 ----

放弃花生壳了,改用更稳定并且开源免费的frp了,当然这个需要你事先有一台外网服务器,推荐阿里云(学生每月10元)。在你的外网服务器上用frp搭一个反向代理超级容易,傻子都能学会,去frp的github看一下吧~亲测比花生壳好用最少一万倍,并且超级稳定。

4. 文件传输与同步

对于一次性的文件传输,这方面最简单的当然还是直接使用scp命令啦,文件夹和文件都能轻松传输。

但是我们做深度学习的话,在服务器端大面积改代码、重量级调试的话还是不方便,毕竟服务器上没有图形界面,大部分人还是用不惯vim的,那么能不能在PC端用漂亮的编辑器修改代码,将修改结果实时的同步到服务器端呢?当然可以!这里小夕推荐文件同步神器syncthing

剩下的就是傻瓜式配置啦。记得要更改文件夹刷新频率哦(默认是60秒,我们可以改的短一点,比如3秒),这样在客户端我们用漂亮的文本编辑器对代码的改动就能实时的同步到服务器上啦,在服务器端就只需要负责运行就可以咯。

5. 多开发环境管理

如果不幸你的GPU服务器并不是你一个人用,那么这时多人(尤其是混入小白多话)经常把服务器默认的python环境弄的乌烟瘴气,比如有人用python2,有人用python3,有人用tensorflow1.3,有人用0.12等...最后导致大家的程序全跑崩了。

所以在服务器端管理深度学习的开发环境是极其必要的,这里anaconda直接搞定!每个人建立和管理自己的开发环境,包括python版本、各种库的版本等,互不干扰。而且在发布project时,也方便直接将环境导出为requirements文件,免得自己去手写啦。

6. 多任务管理(并行调参)

如果你的服务器上有多个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]。

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

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

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

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

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

v2-65c4751a21d99fc1f642d3446414bf3b_b.jpg

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

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

8. 关于jupyter notebook

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

1、服务器端开启jupyter notebook后

v2-e777f00637e4c3fa6ce06cc1a710416a_b.jpg

然后复制最后那一行的 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就能选择在我们这个环境里运行代码啦。

9. 单任务全霸占模式

有时我们的训练任务非常重要且急迫,且绝对不允许被别人挤崩,或者我们明知要占用全部GPU资源了,那么这时我们就可以。。。emmm事先说明,非必要时刻请勿频繁使用哦:

使用linux中的 run-one 命令,这个命令可以保证同一条命令最多同时运行一个。比如 run-one python xxx 就会只允许运行一个python程序,后来的python程序在这个python程序执行完毕前是得不到执行的(一执行就会出错返回)。所以我们可以写入.bashrc:

        alias python='run-one python'

(别忘source激活哦)

这时

v2-5c6c877a01a7cde6e398854b921253c9_b.jpg

看,我通过将第一个python挂到后台了,后面的python完全执行不起来。除非前一个python结束。(所以其他小伙伴可能以为自己的程序出问题了,然后emmm陷入了无尽的困惑)

参考文献

[1] 跑深度学习代码在linux服务器上的常用操作(ssh,screen,tensorboard,jupyter notebook)

订阅号精彩评论

v2-4043bf04209a2e535f8fecc3b3e44dec_b.jpg

v2-3f66b93fb45e90f4cdfc417acb404973_b.jpg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/481126.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

风控模型师面试准备--技术篇(逻辑回归、决策树、集成学习)

原文地址:https://zhuanlan.zhihu.com/p/56175215 编辑于2019-02-12,持续更新中,有风控建模工作经验的,或者想转行风控建模的小伙伴可以互相交流下... 一.算法 逻辑回归决策树集成学习(随机森林,Adaboost&…

step-by-step: 夕小瑶版神经网络调参指南(上)

距离上一篇文章已经过去好久好久好久啦。闭关几个月后,其实早有继续码文章的打算,先后写了一下核函数与神经网络的一些思考、文本预处理tricks、不均衡文本分类问题、多标签分类问题、tensorflow常用tricks、噪声对比估算与负采样等文章,结果…

谷歌发布端到端AI平台,还有用于视频和表格的AutoML、文档理解API等多款工具

谷歌又有了大动作。在大洋彼岸的谷歌Cloud Next conference大会上,谷歌一口气发布了多款AI新品和工具,主要包括: 端到端的AI平台 用于处理视频和表格数据的AutoML Tables和AutoML Video 文档理解API 联络中心AI 视觉产品搜索 对于开发者…

跨性别,你所不知道的事

今晚原计划在订阅号里推送南溪妹子前几天录制的跨性别科普视频,没想到今天收到南溪的私信,说不做科普了,还是算了吧。急忙去了解了一下原因 (http://www.zhihu.com/pin/963101597957644288) ,才知道南溪因这段视频所遭受的无故攻击…

文本分类问题不需要ResNet?小夕解析DPCNN设计原理(上)

历史回顾回顾一下图像和文本的发展史,似乎这就是一场你追我赶的游戏。在上一阶段的斗争中,朴素贝叶斯、最大熵、条件随机场这些理论完备的统计机器学习模型使得文本分类、中文分词、NER等诸多自然语言处理问题取得了差强人意(释义&#xff1a…

【Tensorflow】TensorFlow的嵌入layer和多层layer

计算图中的操作 # python 3.6 import tensorflow as tf import numpy as npsess tf.Session()# 将张量和占位符对象组成一个计算图,创建一个简单的分类器# 一、计算图中的操作 # 1. 声明张量和占位符,创建numpy数组,传入计算图操作 x_vals …

文本分类问题不需要ResNet?小夕解析DPCNN设计原理(下)

哎呀呀,说好的不拖稿的又拖了两天T_T,小夕过一阵子分享给你们这两天的开心事哦。后台催稿调参系列的小伙伴们不要急,下一篇就是第二篇调参文啦。好啦,接着上一篇文章,直接搬来DPCNN、ShallowCNN、ResNet的对比图。从图…

注意力机制-深度学习中的注意力机制+注意力机制在自然语言处理中的应用

1 深度学习中的注意力机制 https://mp.weixin.qq.com/s?__bizMzA4Mzc0NjkwNA&mid2650783542&idx1&sn3846652d54d48e315e31b59507e34e9e&chksm87fad601b08d5f17f41b27bb21829ed2c2e511cf2049ba6f5c7244c6e4e1bd7144715faa8f67&mpshare1&scene1&src…

【TensorFlow】常用的损失函数及其TensorFlow实现

1 损失函数 定义:将随机事件或其有关随机变量的取值映射为非负实数以表示该随机事件的“风险”或“损失”的函数。 应用:作为学习准则与优化问题相联系,即通过最小化损失函数求解和评估模型。 分类:回归问题、分类问题 2 回归问…

从经典文本分类模型TextCNN到深度模型DPCNN

如今深度学习已经成为NLP领域的标配技术,在图像中大为成功的卷积神经网络(CNN)也开始广泛渗透到文本分类、机器翻译、机器阅读等NLP任务中。但是,在ACL2017以前,word-level的文本分类模型(以单词为语义单位…

从特征分解到协方差矩阵:详细剖析和实现PCA算法

从特征分解到协方差矩阵:详细剖析和实现PCA算法本文先简要明了地介绍了特征向量和其与矩阵的关系,然后再以其为基础解释协方差矩阵和主成分分析法的基本概念,最后我们结合协方差矩阵和主成分分析法实现数据降维。本文不仅仅是从理论上阐述各种…

NLP中常用文本分类模型汇总

如今深度学习已经成为NLP领域的标配技术,在图像中大为成功的卷积神经网络(CNN)也开始广泛渗透到文本分类、机器翻译、机器阅读等NLP任务中。但是,在ACL2017以前,word-level的文本分类模型(以单词为语义单位…

【TensorFlow】随机训练和批训练的比较与实现

一、随机训练和批训练 随机训练:一次随机抽样训练数据和目标数据对完成训练。批训练:一次大批量训练取平均损失来进行梯度计算,批量训练大小可以一次上扩到整个数据集。批训练和随机训练的差异:优化器方法和收敛的不同批训练的难…

「小公式」平均数与级数

喵喵喵,小夕最近准备复习一下数学和基础算法,所以可能会推送或者附带推送点数学和基础算法的小文章。说不定哪天就用(考)到了呢( ̄∇ ̄)注意哦,与头条位的文章推送不同,「小公式」和「…

最新出炉-阿里 2020届算法工程师-自然语言处理(实习生)以及补充:快递最短路径

问题2感觉跟下面的分苹果类似; 问题 G: 分梨 题目描述 zzq非常喜欢吃梨,有一天他得到了ACMCLUB送给他的一筐梨子。由于他比较仗义,就打算把梨子分给好朋友们吃。现在他要把M个梨子放到N个盘子里面(我们允许有的盘子为空&#xff0…

如何匹配两段文本的语义?

喵喵喵,好久不见啦。首先很抱歉大家期待的调参手册(下)迟迟没有出稿,最近两个月连着赶了4个DDL,整个人都不好了。最近几天终于有时间赶一下未完成的稿子了。在赶DDL的时候夹着写了这篇文章,就先发布这一篇吧…

【TensorFlow】实现简单的鸢尾花分类器

代码实现及说明 # python 3.6 # TensorFlow实现简单的鸢尾花分类器 import matplotlib.pyplot as plt import tensorflow as tf import numpy as np from sklearn import datasetssess tf.Session()#导入数据 iris datasets.load_iris() # 是否是山鸢尾 0/1 binary_target …

偏差-方差全面解释

偏差(Bias)与方差(Variance) 目录: 为什么会有偏差和方差?偏差、方差、噪声是什么?泛化误差、偏差和方差的关系?用图形解释偏差和方差。偏差、方差窘境。偏差、方差与过拟合、欠拟合…

「小算法」回文数与数值合法性检验

喵喵喵,小夕最近准备复习一下数学和基础算法,尽量每篇推送下面会附带点数学和基础算法的小文章。说不定哪天就用(考)到了呢( ̄∇ ̄)注意哦,与头条位的文章推送不同,「小公式」和「小算…