问题背景:
在使用DDP(Huggingface 的accelerate,本质还是DDP) 单机多卡训练时,本来想着用nohup后台运行,这样就不用担心ssh断开连接了,但是DDP使用nohup出现了问题,训练一半的时候会突然中断(收到了中断的信号)
google一下发现了类似的问题:
- DDP Error: torch.distributed.elastic.agent.server.api:Received 1 death signal, shutting down workers
- Torch.distributed.elastic is not stable
- nohup跑一段时间显示Message: ‘Received 1 death signal, shutting down workers’
- 多卡lora训练报错
目前的解决方法就是换成tmux或者screen.
指路👉 解决方法
tmux和screen都是终端复用器(terminal multiplexer),可以启动一系列的终端会话。解绑了会话和终端窗口,关闭终端窗口再打开,会话并不终止,而是继续运行在执行。
screen和tmux大体功能差不多,tmux对个人更友好一些,在分割窗口时候自动创建新会话、状态条显示、自动命名窗口以及其他无关紧要的功能。
session、window、pane的对应关系:
一个session可以创建多个window, 一个window又可以创建多个pane
1 安装
使用apt-get在Ubuntu系统中安装:
sudo apt-get install tmux
使用homebrew在Mac上安装
brew install tmux
2 基本使用
tmux默认的快捷键(前缀prefix)是Ctrl+b,用<prefix>表示
比如,快捷键<prefix>+k的意思是:先同时按下Ctrl和b,然后松开,然后再按k
常用的几条命令:
tmux # 直接启动tmux,并创建了一个空白的window
tmux ls # 查看已经存在的session
tmux new -s <session-name> # 新建session
Ctrl+b d # 临时退出当前的session
tmux a -t <session-name> # 进入已经存在的session, a是attach的缩写
tmux kill-session -t <session-name> # 杀死指定的session
3 功能大全
分类 | 快捷键 | 功能 |
---|---|---|
基础 | ? | 获取帮助信息 |
Session管理 | s | 列出所有会话 |
$ | 重命名当前会话 | |
d | 断开当前会话 | |
Window管理 | c | 创建一个新窗口 |
, | 重命名当前窗口 | |
w | 列出所有窗口 | |
% | 水平分割窗口 | |
" | 垂直分割窗口 | |
n | 选择下一个窗口 | |
p | 选择上一个窗口 | |
0~9 | 选择0~9对应的窗口 | |
l | 在前后两个窗口间切换 | |
w | 通过窗口列表切换窗口 | |
f | 在所有窗口中查找指定文本 | |
Pane管理 | % | 创建水平窗格 |
" | 创建一个垂直窗格 | |
h | 将光标移入下左侧窗格 | |
j | 将光标移入下下方窗格 | |
l | 将光标移入下右侧窗格 | |
k | 将光标移入下上方窗格 | |
q | 显示窗格编号 | |
o | 在窗格间切换 | |
} | 与下一个窗格交换位置 | |
{ | 与上一个窗格交换位置 | |
! | 在新窗口中显示当前窗格 | |
x | 关闭当前窗格 | |
SPC | 循环切换窗格布局 | |
Alt + o | 逆时针旋转窗格面板 | |
Ctrl + o | 顺时针旋转窗格面板 | |
方向键 | 移动光标选择面板 | |
其它 | t | 在当前窗格显示时间 |
z | 最大化和最小化当前窗口 |
参考:
https://zhuanlan.zhihu.com/p/563921220
https://cloud.tencent.com/developer/article/1530522
https://qianxu.run/2021/03/28/tmux-vs-screen/
https://zhuanlan.zhihu.com/p/386085431
https://zhuanlan.zhihu.com/p/58668651