深度学习常用linux命令

基本命令(linux/shell)

  • 基本操作
    • 连接服务器
    • 查看GPU状态
    • 进程管理
    • 一键导出环境 / 配置环境
    • 复制/移动
  • 虚拟环境conda
  • shell脚本串行调参
    • tensorboard可视化训练过程

记录深度学习使用服务器一些常用的shell操作。

基本操作


连接服务器

ssh username@ipaddress
(直接用命令行连接,但scp传文件等必须是linux系统,最开始安了ubuntu,后来发现用windows也能搞定,我太懒了所以更喜欢用windows。)
windows系统+MobaXterm(配完一次之后都可以一键登录,非常傻瓜式很好用)

查看GPU状态

跑代码前要先看一下哪个gpu比较空,把模型放到空的gpu上跑。
nvidia-smi
watch -n 1 nvidia-smi
更喜欢用下面这种,每隔1s查看一次gpu状态,可以更准确判断哪个gpu比较空闲。

进程管理

  1. kill 进程
    kill [pid]
    kill -s 9 [pid] 强制终止退出
  2. 后台运行代码
    有的时候实验室老是断网,跑的程序就会挂掉,这个时候用后台运行代码就可以解决这个问题。
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:

    1. 运行完上述命令后会出现一个进程的PID 号
    2. 使用 ps -ef|grep [pid] 就能看到该进程的信息
    3. 使用 kill -s 9 [pid] 来杀掉该进程

参考链接

  1. ps查看进程信息
    ps -aux 查看所有进程的信息
    a:显示所有程序 u:以用户为主的格式来显示 x:显示所有程序,不以终端机来区分

一键导出环境 / 配置环境

  1. pip
    pip freeze > requirements.txt
    自动生成requirement.txt
    pip install -r requirements.txt
    一键安装完所需要的第三方库

  2. conda
    conda env export > environment.yaml
    保存环境的yaml文件,注意从conda导出的时候不会导出pip安装的内容
    conda env create -f environment.yaml
    完成环境配置
    conda env update -f environment.yaml
    更新环境配置(注意会和之前导出的环境叫一个名字)

复制/移动

  1. 复制
    cp [选项] 源文件或目录 目的文件或目录
    -b 同名,备分原来的文件
    -f 强制覆盖同名文件
    -r 按递归方式保留原目录结构复制文件

  2. 跨服务器复制
    只能linux复制到linux,如果是想电脑传文件到服务器那你必须是linux系统(windows系统+MobaXterm的话直接拖拽就可以了)
    文件夹
    scp -r /mnt/data3/xxx/ [email protected]:/mnt/data/xx/
    文件
    scp /mnt/data3/data/xxx.txt [email protected]:/mnt/data/xx/

  3. 移动
    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/文件夹下)

  4. 挂载数据
    最近从师兄那里学到的最爽的命令
    sudo sshfs -o allow_other [email protected]:/mnt/data3/yc/videoGAN/dataset/ /mnt/data/zq/videoGAN/dataset

  5. pwd (显示当前路径)

虚拟环境conda


跑代码一般需要配相应环境( 比如有的要用python2、有的用特定版本的tensorflow…)。不要直接对默认环境下手,因为服务器不止你一个人用时,随便改变包的版本会把其他人的程序带崩。解决方案是配自己的虚拟环境,用conda就可以搞定。
conda可以理解为一个工具,也是一个可执行命令,其核心功能是包管理与环境管理。包管理与pip的使用类似,环境管理则允许用户方便地安装不同版本的python并可以快速切换。conda的设计理念——conda将几乎所有的工具、第三方包都当做package对待,甚至包括python和conda自身。
Anaconda则是一个打包的集合,里面预装好了conda、某个版本的python、众多packages、科学计算工具等等。

conda常用命令如下:

  1. 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 删除虚拟环境
  2. conda create -n BBB --clone AAA
    克隆环境:在本地的conda里已经有一个AAA的环境,创建一个新环境跟它一模一样的叫BBB。
  3. Linux: conda activate $env_name 或 source activate $env_name
    Windows: activate $env_name
    激活虚拟环境
    Linux: conda deactivate 或 conda activate root
    windows:deactivate $env_name
    关闭虚拟环境
  4. 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)
  5. conda env listconda info -e 查看当前存在哪些虚拟环境
  6. conda list 查看安装了哪些包。
  7. conda update conda 检查更新当前conda

参考: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脚本,把你要调的参数全都写进去!比如就像这样:
深度学习常用linux命令_第1张图片
(当然别忘在代码里将训练的summary写到某个文件里)

然后就可以挂上这个脚本去睡觉啦~睡到天亮发现各个最优参数都找到了,超级开心有木有
参考:https://zhuanlan.zhihu.com/p/32496193

tensorboard可视化训练过程

tensorboard --logdir=./path to model

你可能感兴趣的:(服务器/linux/shell,linux,深度学习,服务器)