BenChuat

Background
跳过正文

**如何使用 `tmux`、`screen` 和 `nohup` 在 Linux 服务器上保持训练任务不中断**

·1423 字·3 分钟
作者
BenChuat
A little bit about BenChuat.
目录

如何使用 tmuxscreennohup 在 Linux 服务器上保持训练任务不中断
#

在进行深度学习或其他长时间运行的任务时,SSH 会话的断开可能会导致任务中断。如果没有使用适当的工具来管理这些任务,训练进程就可能被停止,导致所有的进展丢失。

为了避免这种情况,本文介绍了如何使用 tmuxscreennohup 等工具,在远程服务器上保持训练任务的持续运行。无论你遇到会话断开或网络中断的情况,这些工具都能确保任务在后台继续运行。


1. 使用 tmux 保障任务持续运行
#

tmux 是一个终端复用工具,允许创建多个会话,即使会话断开,任务仍然会在后台继续执行。以下是使用 tmux 保护训练任务的步骤。

1.1 安装 tmux
#

首先,在服务器上安装 tmux。执行以下命令:

1
2
sudo apt update
sudo apt install tmux

1.2 启动 tmux 会话
#

安装完成后,启动一个新的 tmux 会话:

1
tmux new -s <session_name>

这会启动一个新的会话,并可以在其中运行训练任务。

1.3 运行训练任务
#

tmux 会话中运行命令:

1
bash run_train.sh feddg_moe officehome --test_domain p --avg_tokens --num_layers 2

1.4 分离会话
#

训练开始后,如果需要断开 SSH 连接,可以分离当前的 tmux 会话。按下 Ctrl+B 然后按 D 键,这会将会话分离,任务继续在后台运行。

1.5 删除 tmux 会话
#

如果已经连接到一个 tmux 会话并想要退出并删除它,可以使用以下命令:

1
exit

这会关闭当前会话并将其从 tmux 会话列表中删除。

强制终止会话

如果想要强制删除一个会话(例如,某个会话无响应),可以使用以下命令:

1
tmux kill-session -t <session_name>

1.6 恢复 tmux 会话
#

当重新连接服务器时,可以使用以下命令查看当前的 tmux 会话:

1
tmux ls

然后通过以下命令恢复会话:

1
tmux attach -t <session_name>

2. 使用 screen 保护任务不中断
#

screen 是另一个常用的终端复用工具,具有类似 tmux 的功能,可以确保任务在后台持续运行。以下是使用 screen 管理训练任务的步骤。

2.1 安装 screen
#

首先,在服务器上安装 screen

1
2
sudo apt update
sudo apt install screen

2.2 启动 screen 会话
#

执行以下命令启动一个新的 screen 会话:

1
screen

2.3 运行训练任务
#

screen 会话中运行训练命令:

1
bash run_train.sh feddg_moe officehome --test_domain p --avg_tokens --num_layers 2

2.4 分离会话
#

tmux 类似,可以分离 screen 会话。按下 Ctrl+A 然后按 D 键,这会将会话分离,训练任务继续在后台运行。

2.5 恢复 screen 会话
#

当你重新连接服务器时,使用以下命令查看当前的 screen 会话:

1
screen -ls

然后,通过以下命令恢复会话:

1
screen -r <session_id>

2.6 退出 screen 会话
#

完成任务后,可以使用以下命令退出 screen 会话:

1
exit

3. 使用 nohup 简单后台运行任务
#

nohup 是一个简单且有效的工具,适用于需要在后台运行的单个任务。它允许在断开 SSH 连接后继续运行任务。与 tmuxscreen 不同,nohup 不提供会话管理,但它适用于单个任务的长期运行。

3.1 使用 nohup 运行任务
#

你可以使用 nohup 命令启动训练任务,并将输出重定向到 nohup.out 文件:

1
nohup bash run_train.sh feddg_moe officehome --test_domain p --avg_tokens --num_layers 2 &

这样,训练任务将在后台继续运行,且不会受到 SSH 会话断开的影响。

3.2 查看任务输出
#

nohup 会将输出保存到 nohup.out 文件,可以使用 tail 命令查看任务日志:

1
tail -f nohup.out

3.3 断开 SSH 连接
#

可以安全地断开 SSH 连接,任务将继续运行,直到完成。


如何恢复已断开的任务
#

  1. 使用 tmuxscreen 恢复会话:

    如果使用 tmuxscreen 来管理任务,并且 SSH 会话断开,可以通过以下命令恢复会话:

    • tmux 会话恢复:

      1
      
      tmux attach -t <session_name>
      
    • screen 会话恢复:

      1
      
      screen -r <session_id>
      
  2. 使用 nohup

    如果使用了 nohup 启动任务,任务会继续运行,无法恢复会话,但可以查看 nohup.out 文件来检查任务的状态。


总结
#

  1. tmuxscreen 提供了强大的终端复用功能,允许在后台管理多个任务,并且在 SSH 会话断开后恢复任务。
  2. nohup 是一个简单的工具,适用于运行单个任务,确保任务在后台继续执行。
  3. 在长时间运行的训练任务中,使用这些工具可以避免任务中断,提高工作效率。

这些工具非常适合在远程服务器上运行深度学习训练任务,并确保即使遇到网络问题或会话中断,任务也能够持续执行。