MistGPU博客

分享深度学习知识
提供在线GPU出租

服务器终端使用教程

Deep Mist Tech's Avatar 2022-11-27

  1. 1. 进入服务器终端
  2. 2. 常用终端操作
    1. 2.1. 重要提示
    2. 2.2. 常用命令
      1. 2.2.1. 当前目录
      2. 2.2.2. 查看文件
      3. 2.2.3. 进入目录
    3. 2.3. screen使用指南
      1. 2.3.1. 新建/启动会话
      2. 2.3.2. 解绑(detach)会话
      3. 2.3.3. 恢复会话
      4. 2.3.4. 结束(terminate)会话
    4. 2.4. 运行py代码
    5. 2.5. 其他命令
      1. 2.5.1. 云存储相关
      2. 2.5.2. 查询类命令
      3. 2.5.3. 环境相关
      4. 2.5.4. 杀进程

进入服务器终端的方式有很多种,不同方式之间并无区别,选择最合适的即可。

进入服务器终端

常用终端操作

重要提示

SSH连接遇到网络波动时会中断,前台运行的进程会被终止

如果程序没有挂到后台或代码没有保存断点的话,您的程序很有可能因此白跑。

因此如果需要长时间运行程序,请务必使用nohup或screen挂到后台运行,并建议在代码中设置保存断点。

方法一:运行命令改为 nohup 原命令 &,输出在nohup.out文件中
方法二:(推荐!) 在运行程序前 先在终端中输入 screen -SL 会话名 -Logfile 日志名 新建会话

会话名与日志名自定。
需要在运行程序前启动screen,开始运行后无法操作

之后输入需要执行的命令(如python 文件名.py)。
输入 screen -dr 会话名 恢复会话;程序输出可恢复会话或查看日志文件

常用命令

当前目录

在使用服务器终端的过程中,需要留意终端的当前目录。

在zsh中会以黄色字体显示当前目录,如下图红箭头所指的位置。如果没有显示,可以输入pwd查询当前路径

默认的终端目录应该为主目录/home/mist/,也就是~/~/home/mist等价。

查看文件

在终端中输入ls(小写LS)可查询当前目录下的文件。

  • ls -l可查看到更详细的输出
  • ls -a可查看隐藏文件

在上图中目录以浅蓝色字体显示,在ls -l中可以看到最左边有字母d

进入目录

在终端中输入cd 文件夹名可进入到某个文件夹内,相当于鼠标双击了某个文件夹。

  • cd ../可返回上一级目录
  • cd ~/cdcd /home/mist 可返回主目录

screen使用指南

新建/启动会话

输入 screen -SL 会话名 -Logfile 日志名 新建会话,会话名与日志名均可自定义

新建会话后并没有明显的提示(窗口会刷新一下),其他与正常终端并无区别

在启动screen后输入screen -list时可以看到会话名与Attached的字样,说明此时激活了这个会话

解绑(detach)会话

在screen会话中,先按下Ctrl-a后按d可解绑会话,相当于最小化窗口。 解绑后会提示detached from xxx.会话名

一般确认代码开始运行后就可以解绑会话了,解绑会话后可关掉命令行窗口。只要程序不报错,服务器不关机,代码就一直在后台运行。

解绑会话后输入screen -list可以看到会话名与detached的字样,说明此时会话在后台

恢复会话

输入screen -dr 会话名可恢复之前解绑的会话,一般重新进入终端后使用此命令。

结束(terminate)会话

在screen会话中,输入exit即可退出会话,相当于关闭窗口。

结束会话后会提示screen is terminating

运行py代码

在运行代码前,需要通过以上三步进入到项目目录下,直到在ls中能看到需要运行的文件名。

本例需要运行的train.py文件,可以在ls中看到。

如果代码需要长时间运行,请使用screen挂到后台。
如果有创建虚拟环境,则在运行程序前请使用对应的方法激活。
建议在运行程序前使用nvidia-smi命令查询显卡是否空。

执行python 文件名.py即可开始运行,如果代码需要参数也可一并加上。

其他命令

云存储相关

控制台-上传数据集中上传的文件在云存储中,挂载在服务器/data目录下,任意一台服务器都能访问到。

在服务器主目录下有个名为cloud的文件夹(/home/mist/cloud),这个文件夹是云存储内的一个子文件夹

  • 使用ls -l /data可查看云存储下的文件
  • 使用cp -v /data/文件名 /home/mist/可将云存储内的文件复制到主目录下
  • 使用unzip /data/文件名.zip -d /home/mist/可将云存储下的压缩包(仅zip文件)直接解压到主目录下
  • 使用cp -v 文件名 /data/可将服务器的文件复制到云存储中
  • 使用zip -r9 /data/压缩后的文件名.zip 要压缩的目录名可将服务器的文件夹压缩并直接保存到云存储中

查询类命令

  • lscpu 查询cpu型号
  • free -h 查询内存占用
  • df -h /home/mist/ 查询硬盘可用空间
  • du -hs 文件名 查询文件或文件夹总占用空间
  • nvcc -V 查询默认环境的cuda版本
  • which python 查询默认环境python的路径
  • tophtopnmon 查询某个进程的资源占用情况
  • nvidia-smi 查询显卡相关占用情况

nvidia-smi输出如上图所示,主要关注

  1. 红框1所示的显存占用。由于部分机器有安装桌面操作系统,因此有几m-几十m左右的占用。
  2. 红框2所示的整体占用。

环境相关

  • pip list 查询pip中安装的包
  • pip install 包名 使用pip安装其他包
  • pip uninstall 包名 使用pip卸载某个包
  • sudo apt update; sudo apt install 包名 使用apt安装包

杀进程

当没有程序正在跑,且用nvidia-smi查询到显存占用高时,有可能是之前的程序进程没有正常退出。此时需要清掉之前的残留进程以释放显存。

最无脑的释放方法是在控制台关掉服务器,再重新开机

可以使用ps x命令查询当前正在运行的进程名以及对应PID,如下图所示

可以看到当前有若干个python开头的命令正在运行,如粉色1框所示。

在每个进程的开头,有对应的进程PID,如绿色2框所示,此时在终端执行sudo kill <PID>即可杀掉对应的进程。

如果需要杀的进程很多,可以使用sudo pkill -x <进程名>命令。进程名如橙色3框所示,

-x 代表完全匹配进程名,不加的话只要进程名里包含有python的都会被杀,比如进入环境的Jupyter服务

本例执行sudo pkill -x python,可以看到执行完后显存已空

本文最后更新于 天前,文中所描述的信息可能已发生改变