此文写给实验室的学弟学妹们,以便快速配置环境少踩坑。计算资源是公共资源,学长学姐有自己的研究任务,无法像企业运维人员那样周到的看护服务器,服务器的稳定运行有赖于每个使用者合理使用。菜,是原罪(推眼镜)。【和你用同一个服务器的人正在跑实验,突然挂掉了,发现是你在瞎搞,内心会很崩溃】
目前的部署是单服务器的形式,使用起来也很简单,一般也就把程序放在一个服务器上跑,有在准备分布式,是后话了。
大伙用自己的电脑就行了,window或者mac都行。本地写代码,远程连接,上传,程序在服务器上跑,本地图形化界面还是很方便的,多媒体支持也好,你可以一边写代码,一边听音乐,在程序提交以后看看文章或是做PPT。
同学们可能本科时候Linux用的少,不熟练是正常的,好好补充相关知识,是少搞事的关键,况且linux是开发绕不开的。
首先是linux基本的目录结构:https://www.runoob.com/linux/linux-system-contents.html
同学们的东西一般在 /home/[账户名]/ 的目录下,例如/home/Alice/,大家井水不犯河水
关于linux的root权限:
root说白了就是超级管理员账户,你干啥都畅通无阻,但也有了搞瘫服务器的机会,学长信任你把账号给你可能就是悲剧的开始。网上有一些教程上来就拿权限,因为人家在自己的电脑的ubuntu上搞,崩了也无所谓,省事,但服务器公共资源,底层环境坏了影响别人,root权限还是不给的好,各位同学看教程也辩证的看。
然后基本的linux命令自己学,最好知其所以然。命令太多了,不搞运维,常用的会了就行,要用的临时查。
放一点常用的:https://blog.csdn.net/heros_never_die/article/details/106363409
特别注意粘贴该用shit+insert,ctrl+c在这是键盘中断。
本机windows配置IDE就够了,远程服务器配置python和各种框架。
方案有很多种,我各种都用过了,核心功能都差不多的,剩下的那些萝卜青菜各有所爱,知乎上比较一堆,聊聊核心区别。
pycharm和vscode。最有区别的地方之一是远程模式。
实际上专业版的pycharm也有远程同步功能,不过如果用的社区版的话,就得用模式1那种,vscode目前免费。
总的来说,找到的教程是裸python的多,因为有不少在自己机子的ubuntu上用root玩的,还有的github也这么写(因为通用),服务器上搞非root装乱七八糟的东西也费劲,推荐使用Anaconda,真的香,学会了以后那些pip装的换成conda指令就行了。
网上教程有不少,但是比较碎片化,或者有的不是对服务器而言的,新版本有的还是有可视化窗口发生了写变化,下面再简略的写一些吧。
官网搞一份或者直接问学长学姐拷。地址:https://www.anaconda.com/products/individual
教研室网有奇怪的网关,上不去建议套一下学校的VPN或者去清华的源下载。
关于版本的选择,我们服务器是Linux的,U是Intel的所以是x86的,power是IBM的。至于python3.7和python2.7区别不大,这里指离线包里包含哪个版本,Ananconda是个环境管理软件,实际上你装的python3.7版也可以用命令下载pythob2.7。类似于那种万能驱动,包里自带一些东西,接上网了还可以下载各种东西。
下载得到文件 Anaconda3-2020.02-Linux-x86_64.sh
通过你的sftp软件传到服务器上你的目录下,然后进入这个目录(通过cd命令)
(为什么不直接在服务器用wget命令?因为那样走服务器小水管下载,而自己上传用的局域网上传)
接着输入 bash Ana,按Tab键会帮你自动补全,回车开始安装;之后就是让你接受协议,回车就行了;再输个yes回车;接着问你安装目录,要改就改,不改就回车;接着问你要不要初始化conda,输入yes。
以下界面就是说你装好了(人家还给pycharm打广告了)
接着关了这个会话重开,这时候你的目录前面多了(base)就对头了
原本你输入python命令是服务器的python,一般是2.7,安装时间还很早,有base的时候,就是自己装的python了。
剩下的东西参考下面:
https://blog.csdn.net/xi_zhong/article/details/83422225
https://www.jianshu.com/p/e298b9d3afae
关于环境变量都保存在.bashrc文件里,用maba xterm的,可以直接双击打开,像记事本那样该,关闭的时候会问你要不要上传。
用vim编辑的话,不要傻乎乎的复制教程里的命令,~/的意思是相对路径,本身就在路径里的话,vim .bashrc 打开文件就好了。你要按insert键进入编辑模式才好编辑,改完以后按esc退出编辑模式,按下分号键进入命令模式,输入wq保存,vim的具体使用自己查。
另外提一句,换清华源很重要,不然有的下的很慢。
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --set show_channel_urls yes 这句是设置每次安装包的时候,显示一下源,用来确认用的。
这句是用来创建环境的:conda create -n your_env_name python=your_python_version
例如:conda create -n myenv python=2.7
接着你要进入这个环境的话就使用 conda activate myenv
conda info 显示conda的各种信息(这里也会显示你有哪些源,路径在哪,系统版本和cuda版本)
conda info --env 显示你已经配置了哪些环境。
conda list 显示当前环境下已经安装了哪些包。
conda activate env1 激活(进入)某个环境
conda install tensorflow-gpu=1.6.0 安装xxx,可以接版本号。
(记得看清自己目前在哪个环境里,另外能对于深度学习框架自动配置CUDA,装新包的时候会调整其他包保持兼容)
conda search pytorch 搜索某个包,虽然在pip里面叫torch,在anaconda里叫pytorch
(装torch记得装上全家桶,比如torchvision,conda install torchvision)
应该没难度,也不需要破解,地址:https://code.visualstudio.com/
2.1 设置成中文(非必要)
ctrl+shift+p 调出命令框,找到命令Configure Display Language(输一些内容直到显示这个选项)
然后跳出选项Install additional languages(安装额外语言包),点一下,装上你需要的语言。装好后右下角会提示器重启vscode。
2.2 装个SSH插件
插件栏搜索SSH,点安装,然后提示需要重新加载,点一下就会重新加载。
2.3 新建远程连接
这时候边栏多了远程连接的图标,你可以点加号添加新的连接,也可以点那个齿轮调整config文件。实际上加号连接的东西也会问你记录在哪个config里面。至于选那个config,第一个就行了,其他的好像也能用。加号的添加方式按照里面的提示填就行了。ssh 用户名@地址,地址可以使域名也可以是普通ip,实验内都是局域网ip。
接着会提示你成功添加了一个host,你可以直接点连接,也可以点host旁边的小按钮在新窗口中连接,弹出窗口以后会问你服务器系统是什么,记得点一下。接着会提示你没有RSA授权要不要连接,yes就行,然后输入密码,会下载一点必要的组件。
左下角的绿条是你的连接状态,边上两个提示你有几个error几个warning。右上角是控制终端的栏目。+号是新建终端,垃圾桶是关闭终端(注意这个install终端不要关啊),剩下的按钮还要终端分栏和终端全屏,鼠标放上去可以自己看说明。
接着点击打卡文件夹就能打开服务器上的项目工程了,接着可以在里面创建python文件什么的,ctrl+s是保存,会直接修改服务器闪上的文件。左上角还会提醒你一个文件未保存。记得按照右下角安装python扩展。装的是pylint,装了这个以后就有自动补全了,以及ctrl+鼠标左键点击进入函数定义等必要功能。
正确安装的话你可以看到,本地也可以安装一份,注意区别。一般你连接哪边的项目就会提示你安装哪边插件。
之后就可以享受coding了
2.4 我不想每次都在vscode里输ssh密码
在终端输入
ssh-keygen -t rsa 建立rsa公钥密钥对
接着会问你创建文件在哪,可以手动输入,也可以直接回车保存在默认的位置/home/你的的目录/.ssh/id_rsa
接着问密码并验证密码,回车两次可以跳过。
cd .ssh 可以进入这个文件,里面有id_rsa和id_rsa.pub两个文件
cat ./id_rsa >> ./authorized_keys 接着输如这句话,cat作用是把文件内容打印到终端屏幕,>>是重定向,意思就是这段不去原本的输入,而是换个地方,目标就是后面的authorized_keys文件(不存在会建立一个),这句话的实际想过相当于把id_ras_pub的内容添加到了authorized_keys尾部,换句话说,你用sftp手动复制粘贴进去也行。最终我们产生了如下三个文件,在只有一个公钥的情况下,实际上authorized_keys和id_rsa_pub内容一样的。
接着我们用sftp把密钥放到自己的windows电脑上,路径就是之前config所在的ssh路径。顺便改一下config里面的文件,把服务器和密钥文件关联起来,如下图所示。
主要添加
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_246
现在问题来了,我连接好几个服务器,他们的密钥不不能都叫id_rsa吧,所以记得要改一改名字。服务器那边不一定要改,因为主要起作用的是authorized_keys里的内容,不过保持统一是个好习惯。
那么如果你还有一台笔记本电脑,用类似的方法配置一遍,服务器始终只有一份authorized_keys公钥,台式和笔记本各有一份id_rsa_246。
至此,以后vscode登录特定服务器就不需要密码了。
根据菜单栏上的运行可知,ctrl+F5运行,有加断点的话也可以F5调试。
当然你可以使用下方的bash终端,像普通终端一样输入指令运行就行了, 例如:python test.py
关于解释器的选择在左下角,点一下以后可以选择不同的解释器路径,如果想使用anaconda的环境则使用anaconda路径的解释器,路径名里有你起的环境名,好辨认的。vscode会自动激活环境。
调通程序之类的都可以使用这些方法,但如果你的模型要跑一两天的话,你应该挂在后台。
直接在终端里跑,会话消失的时候进程就结束了。换句话说,你的终端要一直开着且保持稳定,如果意外断网了,你的训练模型就停止了。比较稳妥的方式是使用screen和tmux。
screen -S train 建立一个名为train的窗口,这样即使终端会话中断了,窗口依然存在。
conda activate py2 激活你的环境
CUDA_VISIBLE_DEVICES=1,2 python train.py 设置显卡1和2为可用显卡,使用python运行train.py文件
这里说明一下CUDA_VISIBLE_DEVICES=1,2tensorflow是默认利用所有显卡的,所以直接运行代码的话,很容易占用全服务器资源,给别人添麻烦,所以记得加这条命令限制显卡的使用。而pytorch默认是使用显卡0的,所以也可能和别人撞车。利用显卡跑程序之前先使用nvidia-smi看一看各个显卡的利用情况,选用空闲的显卡。当然限制显卡命令也有类似的语句可以直接加在py文件里
import os
os.environ[“CUDA_VISIBLE_DEVICES”] = “0”
但是显卡使用情况不同时刻不同,换卡运行要到py文件里去修改,恒定一张卡的时候这个挺方便,看情况使用。
在窗口内,先按ctrl+a再按d,可以退出窗口,窗口挂在后台,里面程序还在跑。
先按ctrl+a再按k,可以彻底关闭窗口,进程会关掉。
screen -ls 列出现有窗口
screen -r train 恢复名为train的窗口。
screen -D -r train 强制恢复名为train的窗口,有时候会用到。
更多的见上文提到的linux常用指令,或自己查询screen和tmux的使用方法。