在服务器上同时训练多个深度学习模型
在服务器上跑深度学习或其他程序时,如果程序没有提供命令行参数设置,我们常常需要多次修改代码后重新部署。本文将介绍如何通过命令行工具和编辑器查看代码特定行的方法,并展示如何同时训练多个基于不同ResNet层数的框架。
一、查看代码特定行的方法
当我们需要查看 train.py
文件的第 191 行,可以使用以下几种方法:
方法一:使用命令行工具
-
sed
命令bashsed -n '191p' train.py
-
awk
命令bashawk 'NR==191' train.py
-
head
和tail
命令bashhead -n 191 train.py | tail -n 1
方法二:使用文本编辑器
-
nano
编辑器打开
train.py
文件并跳转到第 191 行:bashnano +191 train.py
-
vim
编辑器打开
train.py
文件并跳转到第 191 行:bashvim +191 train.py
-
less
命令使用
less
查看文件内容并跳转到第 191 行:bashless train.py
在
less
中输入191g
,然后按Enter
键跳转到第 191 行。
方法三:使用 IDE
-
Visual Studio Code
在终端中打开
train.py
文件:bashcode -g train.py:191
-
PyCharm
在 PyCharm 中打开
train.py
文件并跳转到第 191 行:- 打开
train.py
文件。 - 按
Ctrl + L
(Windows/Linux)或Cmd + L
(Mac),然后输入191
跳转到第 191 行。
- 打开
二、将训练日志保存到不同文件
为了在服务器上同时训练多个基于不同ResNet层数的框架,我们可以使用 nohup
命令将训练任务放在后台运行,并将输出重定向到不同的日志文件中。
示例命令
bash
nohup python train.py xxxx参数 > resnet18_nohup.out &
通过上述命令,我们可以同时运行多个训练任务,并将每个任务的输出保存到不同的日志文件中。
三、实时查看日志文件
方法一:tail -f
这是最常用的方法,可以实时查看文件的更新内容:
bash
tail -f resnet18_nohup.out
方法二:less +F
使用 less
以更灵活的方式查看文件内容并保持更新:
bash
less +F resnet18_nohup.out
在 less
中,你可以按 Ctrl+C
停止实时查看,进入正常的 less
查看模式。按 Shift+F
可以再次进入实时查看模式。
按下ctrl+C后,如下图所示
通过:q
退出该模式
四、终止后台运行的程序
①查看后台作业
bash
jobs -l
这将列出所有后台作业及其对应的 PID,它们的排列顺序通常是根据启动的顺序来显示的。每行包含以下信息:
- 作业编号(方括号内的数字):这是由 shell 分配给每个后台作业的唯一编号。
- 进程ID (PID):这是由操作系统分配给每个运行进程的唯一标识符。
- 作业状态:表示作业当前的状态,例如 "Running"。
- 命令:启动作业的完整命令。
解释每一列的内容:
[1]
是作业编号,3136874
是这个作业的进程 ID,Running
表示这个作业正在运行,后面是启动这个作业的完整命令及其输出重定向。[2]
是第二个作业,以此类推。
作业编号的符号含义:
+
和-
是作业控制符,用来标记前台作业控制的优先级:+
表示当前的作业。-
表示上一个作业。- 没有符号表示较早的作业。
② 终止后台作业
可以通过 kill
命令终止指定的作业。使用作业编号或者 PID 都可以。
-
通过作业编号终止(使用
%
前缀):bashkill %1 # 终止作业编号为1的作业 kill %2 # 终止作业编号为2的作业 kill %3 # 终止作业编号为3的作业 kill %4 # 终止作业编号为4的作业
-
通过 PID 终止:
bashkill 3136874 # 终止进程ID为3136874的作业 kill 3138054 # 终止进程ID为3138054的作业 kill 3138988 # 终止进程ID为3138988的作业 kill 3149585 # 终止进程ID为3149585的作业
如有需要,可以使用 kill -9
强制终止:
bash
kill -9 %1 # 强制终止作业编号为1的作业
kill -9 3136874 # 强制终止进程ID为3136874的作业