替换方案 tmux
训练PyTorch模型的时候一个基本步骤:
[terminal]: tmux new -s model-ft # 创建一个会话,并设置会话名:model-ft
[tmux]: conda activate your_env # 在tmux会话中,我们激活我们要使用的conda环境
[tmux]: python train.py # 在tmux会话中,开始训练我们的模型
[tmux]: [ Ctrl+b ] [ d ] # 将会话与窗口分离
[terminal]: tmux ls # 查看我们刚刚创建的会话
[terminal]: watch -n 0.5 nvidia-smi # 监控我们的GPU使用信息
[terminal]: tmux attacth -t model-ft # 激活到我们想要的窗口
使用方法:
Ubuntu 安装
sudo apt-get install tmux
启动
新建session,可以在terminal上输入tmux命令,会自动生成一个id为0的session
tmux
也可以在建立时显式地说明session的名字,这个名字可以用于解绑后快速的重新进入该session:
tmux new -s your-session-name
分离(转到后台)
在tmux窗口中,按下ctrl+b d
或者输入以下命令,就会将当前session与窗口分离,session转到后台执行:
tmux detach
这里你直接关闭这个窗口(右上角X号),也是无所谓的,它也会默认执行 ctrl+b d 操作
查看都有什么窗口
tmux ls
打开已有的窗口
tmux attach -t your-session-name
你也可以使用下面的简写,将attach改为a是一样的
tmux a -t your-session-name
在已经打开的窗口中切换窗口
- ctrl+b w: 从列表中选择窗口(这个最好用)
tmux上下翻屏
使用快捷键ctrl+b [
,就可以通过方向键上下移动 或者 使用PageUp
和PageDown
可以实现上下翻页
退出/杀死
如果你想退出该session,可以杀死session:
tmux kill-session -t your-session-name
也可以使用ctrl+d
关闭该session的所有窗口来退出该session。
Tmux教程 (一文就够)-CSDN博客
【nohup后台挂起的一种替代方式】TMUX命令使用技巧_使用tmux代替nuhup-CSDN博客
为什么要使用tmux而不使用nohup?
nohup可能出现的问题描述:torch.distributed.elastic.multiprocessing.api.SignalException: Process 5262 got signal: 1
训练的时候,如果是保持命令行窗口不关闭,则不会出现这个问题;如果是使用nohup挂在后台运行,则没多久就会出现这个问题。
[2024-04-09 14:51:16,227] torch.distributed.elastic.agent.server.api: [WARNING] Received Signals.SIGHUP death signal, shutting down workers
[2024-04-09 14:51:16,228] torch.distributed.elastic.multiprocessing.api: [WARNING] Sending process 5302 closing signal SIGHUP
[2024-04-09 14:51:16,228] torch.distributed.elastic.multiprocessing.api: [WARNING] Sending process 5303 closing signal SIGHUP
Traceback (most recent call last):
File "/root/miniconda3/envs/MDT/lib/python3.8/runpy.py", line 194, in _run_module_as_main
return _run_code(code, main_globals, None,
File "/root/miniconda3/envs/MDT/lib/python3.8/runpy.py", line 87, in _run_code
exec(code, run_globals)
File "/root/miniconda3/envs/MDT/lib/python3.8/site-packages/torch/distributed/launch.py", line 196, in <module>
main()
File "/root/miniconda3/envs/MDT/lib/python3.8/site-packages/torch/distributed/launch.py", line 192, in main
launch(args)
File "/root/miniconda3/envs/MDT/lib/python3.8/site-packages/torch/distributed/launch.py", line 177, in launch
run(args)
File "/root/miniconda3/envs/MDT/lib/python3.8/site-packages/torch/distributed/run.py", line 797, in run
elastic_launch(
File "/root/miniconda3/envs/MDT/lib/python3.8/site-packages/torch/distributed/launcher/api.py", line 134, in __call__
return launch_agent(self._config, self._entrypoint, list(args))
File "/root/miniconda3/envs/MDT/lib/python3.8/site-packages/torch/distributed/launcher/api.py", line 255, in launch_agent
result = agent.run()
File "/root/miniconda3/envs/MDT/lib/python3.8/site-packages/torch/distributed/elastic/metrics/api.py", line 124, in wrapper
result = f(*args, **kwargs)
File "/root/miniconda3/envs/MDT/lib/python3.8/site-packages/torch/distributed/elastic/agent/server/api.py", line 736, in run
result = self._invoke_run(role)
File "/root/miniconda3/envs/MDT/lib/python3.8/site-packages/torch/distributed/elastic/agent/server/api.py", line 877, in _invoke_run
time.sleep(monitor_interval)
File "/root/miniconda3/envs/MDT/lib/python3.8/site-packages/torch/distributed/elastic/multiprocessing/api.py", line 62, in _terminate_process_handler
raise SignalException(f"Process {os.getpid()} got signal: {sigval}", sigval=sigval)
torch.distributed.elastic.multiprocessing.api.SignalException: Process 5262 got signal: 1
在网上找了下解决办法,发现使用tmux替代nohup是一个可行的方案。