如何使用 tmux、screen 和 nohup 在 Linux 服务器上保持训练任务不中断#
在进行深度学习或其他长时间运行的任务时,SSH 会话的断开可能会导致任务中断。如果没有使用适当的工具来管理这些任务,训练进程就可能被停止,导致所有的进展丢失。
为了避免这种情况,本文介绍了如何使用 tmux、screen 和 nohup 等工具,在远程服务器上保持训练任务的持续运行。无论你遇到会话断开或网络中断的情况,这些工具都能确保任务在后台继续运行。
1. 使用 tmux 保障任务持续运行#
tmux 是一个终端复用工具,允许创建多个会话,即使会话断开,任务仍然会在后台继续执行。以下是使用 tmux 保护训练任务的步骤。
1.1 安装 tmux#
首先,在服务器上安装 tmux。执行以下命令:
| |
1.2 启动 tmux 会话#
安装完成后,启动一个新的 tmux 会话:
| |
这会启动一个新的会话,并可以在其中运行训练任务。
1.3 运行训练任务#
在 tmux 会话中运行命令:
| |
1.4 分离会话#
训练开始后,如果需要断开 SSH 连接,可以分离当前的 tmux 会话。按下 Ctrl+B 然后按 D 键,这会将会话分离,任务继续在后台运行。
1.5 删除 tmux 会话#
如果已经连接到一个 tmux 会话并想要退出并删除它,可以使用以下命令:
| |
这会关闭当前会话并将其从 tmux 会话列表中删除。
强制终止会话
如果想要强制删除一个会话(例如,某个会话无响应),可以使用以下命令:
| |
1.6 恢复 tmux 会话#
当重新连接服务器时,可以使用以下命令查看当前的 tmux 会话:
| |
然后通过以下命令恢复会话:
| |
2. 使用 screen 保护任务不中断#
screen 是另一个常用的终端复用工具,具有类似 tmux 的功能,可以确保任务在后台持续运行。以下是使用 screen 管理训练任务的步骤。
2.1 安装 screen#
首先,在服务器上安装 screen:
| |
2.2 启动 screen 会话#
执行以下命令启动一个新的 screen 会话:
| |
2.3 运行训练任务#
在 screen 会话中运行训练命令:
| |
2.4 分离会话#
和 tmux 类似,可以分离 screen 会话。按下 Ctrl+A 然后按 D 键,这会将会话分离,训练任务继续在后台运行。
2.5 恢复 screen 会话#
当你重新连接服务器时,使用以下命令查看当前的 screen 会话:
| |
然后,通过以下命令恢复会话:
| |
2.6 退出 screen 会话#
完成任务后,可以使用以下命令退出 screen 会话:
| |
3. 使用 nohup 简单后台运行任务#
nohup 是一个简单且有效的工具,适用于需要在后台运行的单个任务。它允许在断开 SSH 连接后继续运行任务。与 tmux 和 screen 不同,nohup 不提供会话管理,但它适用于单个任务的长期运行。
3.1 使用 nohup 运行任务#
你可以使用 nohup 命令启动训练任务,并将输出重定向到 nohup.out 文件:
| |
这样,训练任务将在后台继续运行,且不会受到 SSH 会话断开的影响。
3.2 查看任务输出#
nohup 会将输出保存到 nohup.out 文件,可以使用 tail 命令查看任务日志:
| |
3.3 断开 SSH 连接#
可以安全地断开 SSH 连接,任务将继续运行,直到完成。
如何恢复已断开的任务#
使用
tmux和screen恢复会话:如果使用
tmux或screen来管理任务,并且 SSH 会话断开,可以通过以下命令恢复会话:tmux会话恢复:1tmux attach -t <session_name>screen会话恢复:1screen -r <session_id>
使用
nohup:如果使用了
nohup启动任务,任务会继续运行,无法恢复会话,但可以查看nohup.out文件来检查任务的状态。
总结#
tmux和screen提供了强大的终端复用功能,允许在后台管理多个任务,并且在 SSH 会话断开后恢复任务。nohup是一个简单的工具,适用于运行单个任务,确保任务在后台继续执行。- 在长时间运行的训练任务中,使用这些工具可以避免任务中断,提高工作效率。
这些工具非常适合在远程服务器上运行深度学习训练任务,并确保即使遇到网络问题或会话中断,任务也能够持续执行。
