在服务器上同时训练多个深度学习模型
在服务器上跑深度学习或其他程序时,如果程序没有提供命令行参数设置,我们常常需要多次修改代码后重新部署。本文将介绍如何通过命令行工具和编辑器查看代码特定行的方法,并展示如何同时训练多个基于不同ResNet层数的框架。
一、查看代码特定行的方法
当我们需要查看 train.py 文件的第 191 行,可以使用以下几种方法:
方法一:使用命令行工具
- sed命令- sed -n '191p' train.py
- awk命令- awk 'NR==191' train.py
- head和- tail命令- head -n 191 train.py | tail -n 1
方法二:使用文本编辑器
-  nano编辑器
 打开train.py文件并跳转到第 191 行:nano +191 train.py
-  vim编辑器
 打开train.py文件并跳转到第 191 行:vim +191 train.py
-  less命令
 使用less查看文件内容并跳转到第 191 行:less train.py在 less中输入191g,然后按Enter键跳转到第 191 行。
  
方法三:使用 IDE
-  Visual Studio Code 
 在终端中打开train.py文件:code -g train.py:191
-  PyCharm 
 在 PyCharm 中打开train.py文件并跳转到第 191 行:- 打开 train.py文件。
- 按 Ctrl + L(Windows/Linux)或Cmd + L(Mac),然后输入191跳转到第 191 行。
 
- 打开 
二、将训练日志保存到不同文件
为了在服务器上同时训练多个基于不同ResNet层数的框架,我们可以使用 nohup 命令将训练任务放在后台运行,并将输出重定向到不同的日志文件中。
示例命令
nohup python train.py xxxx参数 > resnet18_nohup.out &
通过上述命令,我们可以同时运行多个训练任务,并将每个任务的输出保存到不同的日志文件中。
三、实时查看日志文件
方法一:tail -f
 
这是最常用的方法,可以实时查看文件的更新内容:
tail -f resnet18_nohup.out
方法二:less +F
 
使用 less 以更灵活的方式查看文件内容并保持更新:
less +F resnet18_nohup.out
在 less 中,你可以按 Ctrl+C 停止实时查看,进入正常的 less 查看模式。按 Shift+F 可以再次进入实时查看模式。
 
按下ctrl+C后,如下图所示
 
通过:q退出该模式
四、终止后台运行的程序
①查看后台作业
  jobs -l

这将列出所有后台作业及其对应的 PID,它们的排列顺序通常是根据启动的顺序来显示的。每行包含以下信息:
- 作业编号(方括号内的数字):这是由 shell 分配给每个后台作业的唯一编号。
- 进程ID (PID):这是由操作系统分配给每个运行进程的唯一标识符。
- 作业状态:表示作业当前的状态,例如 “Running”。
- 命令:启动作业的完整命令。
解释每一列的内容:
- [1]是作业编号,- 3136874是这个作业的进程 ID,- Running表示这个作业正在运行,后面是启动这个作业的完整命令及其输出重定向。
- [2]是第二个作业,以此类推。
作业编号的符号含义:
- +和- -是作业控制符,用来标记前台作业控制的优先级:- +表示当前的作业。
- -表示上一个作业。
- 没有符号表示较早的作业。
 
② 终止后台作业
 可以通过 kill 命令终止指定的作业。使用作业编号或者 PID 都可以。
-  通过作业编号终止(使用 %前缀):kill %1 # 终止作业编号为1的作业 kill %2 # 终止作业编号为2的作业 kill %3 # 终止作业编号为3的作业 kill %4 # 终止作业编号为4的作业
-  通过 PID 终止: kill 3136874 # 终止进程ID为3136874的作业 kill 3138054 # 终止进程ID为3138054的作业 kill 3138988 # 终止进程ID为3138988的作业 kill 3149585 # 终止进程ID为3149585的作业
如有需要,可以使用 kill -9 强制终止:
kill -9 %1  # 强制终止作业编号为1的作业
kill -9 3136874  # 强制终止进程ID为3136874的作业