管理远程服务器任务常用Linux命令

小杰克第一次使用服务器进行深度学习模型训练,这下可把他难倒了。之前都是在本地训练模型,直接使用 python yyds.py就可以训练了,但是总不能一直挂着服务器吧,于是他学会了后台运行命令:

nohup python yyds.py

但是这样输出会直接在根目录下的nohup.out文件。后来小杰克发现可以重定向输出到指定文件下:

nohup python yyds.py > mylog.log 2>&1 &

这样运行日志就会输出到指定位置。

小杰克后来发现另外一种命令方式,叫做会话。使用screen命令,方式如下:

# 新创建一个名为php的会话
screen -S php
# 离开会话
ctrl + a + d
# 恢复创建的会话
screen -r php
screen -r # 如果你只创建了一个会话
# 查看已经创建的会话
screen -ls
# 退出screen
exit
# 其他命令
Ctrl + a,d #暂离当前会话
Ctrl + a,c #在当前screen会话中创建一个子会话
Ctrl + a,w #子会话列表
Ctrl + a,p #上一个子会话
Ctrl + a,n #下一个子会话
Ctrl + a,0-9 #在第0窗口至第9子会话间切换

于是,小杰克学会了将脚本挂在后台而不必担心远程连接中断。但是训练模型难免要使用显卡,在服务器上一般是多卡的,所以小杰克使用Nvidia自带的一个nvidia-smi的命令行工具,会显示显存使用情况

nvidia-smi

不过这只是一瞬间的情况。如果需要周期性输出GPU使用情况,可以设置为每 10s 显示一次显存的情况

watch -n 10 nvidia-smi

此外,更通用的工具是使用系统命令

# 查看显存使用系统命令
gpustat
gpustat -cpu
# Linux CPU 利用率
htop

htop会输出很多内容,详细字段解释如下:

PID:进程标志号,是非零正整数
USER:进程所有者的用户名
PR:进程的优先级别
NI:进程的优先级别数值
VIRT:进程占用的虚拟内存值
RES:进程占用的物理内存值
SHR:进程使用的共享内存值
S:进程的状态,其中S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进程优先值是负数
%CPU:该进程占用的CPU使用率
%MEM:该进程占用的物理内存和总内存的百分比
TIME+:该进程启动后占用的总的CPU时间
COMMAND:进程启动的启动命令名称

在训练时,小杰克不小心将中断任务命令ctrl+c按成了停止进程并放入后台命令ctrl+z,发现GPU上一直有这个任务!小杰克发现使用jobs命令后,可以显示所有后台暂停的任务。可以使用如下命令将任务搬回前台

bg %N #使第N个任务在后台运行(%前有空格)
fg %N #使第N个任务在前台运行
#默认bg, fg不带%N时表示对最后一个进程操作

小杰克很开心的开始炼丹。但是马虎的他训练了好久才发现代码是有问题的,也忘记了进程号。怎么中断任务呢?使用抓取进程命令:

ps aux|grep yyds.py

然后获得进程号之后,使用杀死进程命令:

kill -9 进程号

其中-9是强制杀死。然而小杰克发现他使用的是多线程模型。批量打印kill到所有这些进程的命令,有两种命令,kill和kill -9:

# 批量打印kill到所有这些进程的命令,有两种命令,kill和kill -9
ps -ef | grep yyds.py | grep -v grep | awk '{print "kill "$2}'
ps -ef | grep yyds.py | grep -v grep | awk '{print "kill -9 "$2}'
# 批量sh执行
ps -ef | grep yyds.py | grep -v grep | awk '{print "kill "$2}' | sh

ps命令还可以用来看哪些进程比较“霸道”:

# 1.CPU占用最多的前10个进程
ps auxw|head -1;ps auxw|sort -rn -k3|head -10
# 2.内存消耗最多的前10个进程
ps auxw|head -1;ps auxw|sort -rn -k4|head -10
# 3.虚拟内存使用最多的前10个进程
ps auxw|head -1;ps auxw|sort -rn -k5|head -10

小杰克继续了他欢乐的炼丹生活。

未完待续。。。

你可能感兴趣的:(Linux,深度学习)