为什么需要它们?
在 SSH 远程连到 4090 服务器上跑训练。如果:
- 关掉终端窗口
- 网络断开
- 笔记本合盖
默认情况下,正在跑的命令会被一起杀掉,训练就中断了。
nohup 和 tmux 都是用来 让程序在后台继续跑,即使断开 SSH 也不受影响。
nohup --- 最简单
no hang up = 「别因为挂断连接而退出」。
nohup lerobot-train ... > outputs/train/dp_full_100k.log 2>&1 &
各部分含义:
|-------------|----------------------|
| 部分 | 含义 |
| nohup | 忽略「挂断信号」,SSH 断了训练继续跑 |
| > xxx.log | 把输出写到日志文件 |
| 2>&1 | 错误信息也写进同一个 log |
| & | 放到后台,终端还能继续输入别的命令 |
查看是否在跑:
ps aux | grep lerobot-train
看训练进度:
tail -f outputs/train/dp_full_100k.log
(Ctrl+C 只是退出「看日志」,不会停训练)
缺点: 不能随时回到「那个训练窗口」交互,只能看 log。
tmux --- 更灵活(推荐长期用)
tmux 是一个 终端复用器:在服务器上开「虚拟终端会话」,可以断开再连回来,像没离开过一样。
基本用法
# 1. 新建一个叫 train 的会话
tmux new -s train
# 2. 在这个会话里正常跑训练(不用 nohup)
conda activate lerobot
cd ~/lerobot
lerobot-train ... 2>&1 | tee outputs/train/dp_full_100k.log
# 3. 暂时离开(训练继续跑):按 Ctrl+B,松开后按 D
# 屏幕底部会显示 [detached]
# 4. SSH 断开、关电脑,都没关系
# 5. 下次连上服务器,恢复会话
tmux attach -t train
# 又能看到训练进度条了
常用命令
|------------------------------|---------------------|
| 命令 | 作用 |
| tmux new -s train | 新建名为 train 的会话 |
| tmux ls | 列出所有会话 |
| tmux attach -t train | 重新连上 train 会话 |
| Ctrl+B 然后 D | 离开会话(detach),程序继续跑 |
| tmux kill-session -t train | 删掉 train 会话(训练也会被停) |
怎么选?
|-----------|---------------|
| 场景 | 建议 |
| 第一次、图省事 | nohup ... & |
| 想随时回去看进度条 | tmux |
两条示例可直接复制的命令
方案 A:nohup(最简单)
conda activate lerobot
cd ~/lerobot
nohup lerobot-train \
--dataset.repo_id=feng0724821/so101_test_record \
--policy.type=diffusion \
--output_dir=outputs/train/dp_full_100k \
--job_name=dp_full_100k \
--policy.device=cuda \
--batch_size=8 \
--steps=100000 \
--log_freq=100 \
--save_freq=10000 \
--policy.scheduler_warmup_steps=500 \
--policy.num_train_timesteps=100 \
--policy.num_inference_steps=10 \
--num_workers=4 \
--eval_steps=1000 \
--wandb.enable=true \
--wandb.project=so101-dp \
--policy.push_to_hub=false \
> outputs/train/dp_full_100k.log 2>&1 &
echo "训练已在后台启动,查看日志: tail -f outputs/train/dp_full_100k.log"
方案 B:tmux(可随时回去看)
tmux new -s train
# 进入 tmux 后执行:
conda activate lerobot
cd ~/lerobot
lerobot-train \
--dataset.repo_id=feng0724821/so101_test_record \
...(同上参数)... \
2>&1 | tee outputs/train/dp_full_100k.log
# 想离开:Ctrl+B 然后 D
# 想回来:tmux attach -t train
如果服务器上还没有 tmux,可以试 tmux -V;没有的话需要管理员装(sudo apt install tmux)