基本命令(linux/shell)
记录深度学习使用服务器一些常用的shell操作。
基本操作
连接服务器
ssh username@ipaddress
(直接用命令行连接,但scp传文件等必须是linux系统,最开始安了ubuntu,后来发现用windows也能搞定,我太懒了所以更喜欢用windows。)
windows系统+MobaXterm(配完一次之后都可以一键登录,非常傻瓜式很好用)
查看GPU状态
跑代码前要先看一下哪个gpu比较空,把模型放到空的gpu上跑。
nvidia-smi
watch -n 1 nvidia-smi
更喜欢用下面这种,每隔1s查看一次gpu状态,可以更准确判断哪个gpu比较空闲。
进程管理
- kill 进程
kill [pid]
kill -s 9 [pid]
强制终止退出 - 后台运行代码
有的时候实验室老是断网,跑的程序就会挂掉,这个时候用后台运行代码就可以解决这个问题。
nohup python -u test.py > test.log 2>&1 &
-
nohup: no hang up 不挂断的运行程序 教程
-
-u: 表示不启用缓存,实时输出打印信息到日志文件
-
> test.log: 指将打印信息输出到test.log这个日志文件
-
2>&1: 表示将标准错误输出转变化标准输出,可以将错误信息也输出到日志文件中(0-> stdin, 1->stdout, 2->stderr)
-
&: 指后台运行程序
tips:
- 运行完上述命令后会出现一个进程的PID 号
- 使用
ps -ef|grep [pid]
就能看到该进程的信息 - 使用
kill -s 9 [pid]
来杀掉该进程
- ps查看进程信息
ps -aux
查看所有进程的信息
a
:显示所有程序u
:以用户为主的格式来显示x
:显示所有程序,不以终端机来区分
一键导出环境 / 配置环境
-
pip
pip freeze > requirements.txt
自动生成requirement.txt
pip install -r requirements.txt
一键安装完所需要的第三方库 -
conda
conda env export > environment.yaml
保存环境的yaml文件,注意从conda导出的时候不会导出pip安装的内容
conda env create -f environment.yaml
完成环境配置
conda env update -f environment.yaml
更新环境配置(注意会和之前导出的环境叫一个名字)
复制/移动
-
复制
cp [选项] 源文件或目录 目的文件或目录
-b 同名,备分原来的文件
-f 强制覆盖同名文件
-r 按递归方式保留原目录结构复制文件->复制目录
cp -r /root/movie /tmp
# movie目录和目录下的文件复制到tmp目录下
来自:cp 复制文件或目录
-> 复制目录下所有文件
sudo cp -r /home/xxx/* /home/newenv
-> 复制目录下所有隐藏文件
sudo cp -r /home/xxx/.[^.]* /home/newenv
-
跨服务器复制
只能linux复制到linux,如果是想电脑传文件到服务器那你必须是linux系统(windows系统+MobaXterm的话直接拖拽就可以了)
文件夹 把当前服务器AAA文件夹复制到另一个服务器BBB中
scp -r /mnt/data3/AAA user@172.16.x.xxx:/mnt/data/BBB
文件 把当前服务器xxx.txt文件复制到另一个服务器BBB中
scp /mnt/data3/data/xxx.txt user@172.16.x.xxx:/mnt/data/BBB/
-
移动
mv [选项] 源文件或目录 目的文件或目录
-f force,强制直接移动而不询问
-i 若目标文件(destination)已经存在,就会询问是否覆盖
-u 若目标文件已经存在,且源文件比较新,才会更新
e.g.将/test1目录下的file1复制到/test3 目录,并将文件名改为file2
mv /test1/file1 /test3/file2
如果是移动文件夹下的所有文件的话就可以文件夹后面跟上 /*
mv /data/new/* /data/old/
移动文件夹的话就不要再加 / 了
mv /data/new /data/old/
(移动/data/new 到/data/old/文件夹下) -
挂载数据
最近从师兄那里学到的最爽的命令
sudo sshfs -o allow_other user@172.16.2.24:/mnt/data3/yc/videoGAN/dataset/ /mnt/data/zq/videoGAN/dataset
-
pwd (显示当前路径)
pip下载很慢
将pip源换成清华源,不然慢到报错
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
国内源:
-
华中理工大学:http://pypi.hustunique.com/
-
山东理工大学:http://pypi.sdutlinux.org/
升级
pip install --upgrade pip
虚拟环境conda
跑代码一般需要配相应环境( 比如有的要用python2、有的用特定版本的tensorflow…)。不要直接对默认环境下手,因为服务器不止你一个人用时,随便改变包的版本会把其他人的程序带崩。解决方案是配自己的虚拟环境,用conda就可以搞定。
conda可以理解为一个工具,也是一个可执行命令,其核心功能是包管理与环境管理。包管理与pip的使用类似,环境管理则允许用户方便地安装不同版本的python并可以快速切换。conda的设计理念——conda将几乎所有的工具、第三方包都当做package对待,甚至包括python和conda自身。
Anaconda则是一个打包的集合,里面预装好了conda、某个版本的python、众多packages、科学计算工具等等。
conda常用命令如下:
-
conda create -n $env_name(虚拟环境名称) python=X.X(2.7、3.6..)
env_name文件可以在Anaconda安装目录envs文件下找到。
最后面其实是在创建环境时除了基本包以外一起安的包,除了python还可以安别的且可以安多个。比如 conda create -n $env_name numpy matplotlib python=2.7
conda remove -n $env_name(虚拟环境名称) --all
删除虚拟环境 -
conda create -n BBB --clone AAA
克隆环境:在本地的conda里已经有一个AAA的环境,创建一个新环境跟它一模一样的叫BBB。
conda create -n new_env --clone exist_env -
Linux: conda activate $env_name 或 source activate $env_name
Windows: activate $env_name
激活虚拟环境
Linux: conda deactivate 或 conda activate root
windows:deactivate $env_name
关闭虚拟环境 -
conda install -n $env_name [package]
安装package到env_name中
conda remove --name $env_name $package_name
删除环境中的某个包。
conda install xxx
在当前环境安装xxx包
conda uninstall xxx
在当前环境卸载xxx包
(在虚拟环境中用pip安装也是会安装到当前环境。pip安装的是python官方认可的包,两者有很多细微区别,总之优先用conda) -
conda env list
或conda info -e
查看当前存在哪些虚拟环境 -
conda list
查看安装了哪些包。 -
conda update conda
检查更新当前conda -
conda config --show envs_dirs
查看环境目录
添加环境目录
conda config --append envs_dirs targetEnvPath
(targetEnvPath为所要添加环境)
删除环境目录
conda config --remove envs_dirs targetEnvPath
NotWritableError: The current user does not have write permissions to a required path.解决方案 参考文章
cd到anaconda文件夹所在位置,运行以下命令即可
sudo chown -R xxx anaconda3
参考:https://blog.csdn.net/a493823882/article/details/87888509 |
https://blog.csdn.net/weixin_41481113/article/details/88410973 |
https://zhuanlan.zhihu.com/p/225691964
shell脚本串行调参
正在研究写shell脚本,实现睡觉调参(串行调参),目前一知半解还没有机会用到。
转载:
大部分场合下我们没有那么多充裕的GPU可以用,我们一般只能一次挂一个任务,但是我们又有很重的调参任务,那怎么办呢?
依然很简单啦,首先,装好python-fire这个工具。它可以非常轻松的将你的python程序变成命令行程序,并且可以轻松的将你要调的参数封装成命令行参数的形式。
然后,写一个调参shell脚本,把你要调的参数全都写进去!比如就像这样:
(当然别忘在代码里将训练的summary写到某个文件里)
然后就可以挂上这个脚本去睡觉啦~睡到天亮发现各个最优参数都找到了,超级开心有木有
参考:https://zhuanlan.zhihu.com/p/32496193
tensorboard可视化训练过程
tensorboard --logdir=./path to model