在服务器上同时训练多个深度学习模型【nohup、后台、重定向】

在服务器上同时训练多个深度学习模型

在服务器上跑深度学习或其他程序时,如果程序没有提供命令行参数设置,我们常常需要多次修改代码后重新部署。本文将介绍如何通过命令行工具和编辑器查看代码特定行的方法,并展示如何同时训练多个基于不同ResNet层数的框架。

一、查看代码特定行的方法

当我们需要查看 train.py 文件的第 191 行,可以使用以下几种方法:

方法一:使用命令行工具

  1. sed 命令

    bash 复制代码
    sed -n '191p' train.py
  2. awk 命令

    bash 复制代码
    awk 'NR==191' train.py
  3. head 和 tail 命令

    bash 复制代码
    head -n 191 train.py | tail -n 1

方法二:使用文本编辑器

  1. nano 编辑器

    打开 train.py 文件并跳转到第 191 行:

    bash 复制代码
    nano +191 train.py
  2. vim 编辑器

    打开 train.py 文件并跳转到第 191 行:

    bash 复制代码
    vim +191 train.py
  3. less 命令

    使用 less 查看文件内容并跳转到第 191 行:

    bash 复制代码
    less train.py

    在 less 中输入 191g,然后按 Enter 键跳转到第 191 行。

方法三:使用 IDE

  1. Visual Studio Code

    在终端中打开 train.py 文件:

    bash 复制代码
    code -g train.py:191
  2. PyCharm

    在 PyCharm 中打开 train.py 文件并跳转到第 191 行:

    1. 打开 train.py 文件。
    2. 按 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,它们的排列顺序通常是根据启动的顺序来显示的。每行包含以下信息:

  1. 作业编号(方括号内的数字):这是由 shell 分配给每个后台作业的唯一编号。
  2. 进程ID (PID):这是由操作系统分配给每个运行进程的唯一标识符。
  3. 作业状态:表示作业当前的状态,例如 "Running"。
  4. 命令:启动作业的完整命令。

解释每一列的内容:

  • [1] 是作业编号,3136874 是这个作业的进程 ID,Running 表示这个作业正在运行,后面是启动这个作业的完整命令及其输出重定向。
  • [2] 是第二个作业,以此类推。

作业编号的符号含义:

  • + 和 - 是作业控制符,用来标记前台作业控制的优先级:
    • + 表示当前的作业。
    • - 表示上一个作业。
    • 没有符号表示较早的作业。

② 终止后台作业

可以通过 kill 命令终止指定的作业。使用作业编号或者 PID 都可以。

  • 通过作业编号终止(使用 % 前缀):

    bash 复制代码
    kill %1  # 终止作业编号为1的作业
    kill %2  # 终止作业编号为2的作业
    kill %3  # 终止作业编号为3的作业
    kill %4  # 终止作业编号为4的作业
  • 通过 PID 终止:

    bash 复制代码
    kill 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的作业
相关推荐
如若1232 小时前
TRACER 论文解读与复现:面向 ICU 长时程患者监测的多模态 Harness 架构、时序证据建模与工具增强推理
人工智能·深度学习·计算机视觉
镜子AI10 小时前
镜子AI 技术复盘:三条自动化链路上的“停止条件“设计
运维·人工智能·自动化
tianyuanwo10 小时前
NetBox 数据库详解:当“关系型数据库”被装进一个网络运维的领域模型里
运维·数据库·netbox
知已难寻12 小时前
03 · OpenStack的计算管理 Nova
运维·服务器·开发语言·云原生·云计算·openstack·开源软件
huainingning13 小时前
Windows syslog日志服务器搭建与模拟器对接
运维·服务器·智能路由器
say_fall13 小时前
【Linux系统编程】Ext 文件系统:磁盘与存储、文件与目录、现代计算机究竟如何寻找文件
linux·运维·服务器·数据库·c++
wacsii14 小时前
【Linux进程(一)】Linux 进程初探:操作系统如何管理进程?fork() 为什么返回两次?
linux·运维·服务器
共享家952714 小时前
408 操作系统第一章
服务器·数据库·windows
相思难忘成疾14 小时前
从零搭建 Kubernetes 1.30 集群:kubeadm 部署一主多从实战(RHEL 9.3 + Docker + flannel)
linux·运维·kubernetes
PellyKoo15 小时前
【docker】cifs卷改smb密码后容器起不来的解决方法
运维·docker·容器