进入服务器终端的方式有很多种,不同方式之间并无区别,选择最合适的即可。
进入服务器终端
- Jupyter中启动终端
- 本地SSH连接进入终端
- 网页命令行
常用终端操作
重要提示
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 ~/
或cd
或cd /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的路径top
或htop
或nmon
查询某个进程的资源占用情况nvidia-smi
查询显卡相关占用情况
nvidia-smi
输出如上图所示,主要关注
- 红框1所示的显存占用。由于部分机器有安装桌面操作系统,因此有几m-几十m左右的占用。
- 红框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
,可以看到执行完后显存已空