Tmux使用

为什么需要它们?

SSH 远程连到 4090 服务器上跑训练。如果:

  • 关掉终端窗口
  • 网络断开
  • 笔记本合盖

默认情况下,正在跑的命令会被一起杀掉,训练就中断了。

nohuptmux 都是用来 让程序在后台继续跑,即使断开 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

相关推荐
高磊20052 小时前
LVS(Linux virual server)
linux·服务器·lvs
拳里剑气2 小时前
C++算法:多源BFS
c++·算法·宽度优先·多源bfs
ysa0510303 小时前
【板子】短序列dp(换成维护更小常数维度的dp)
c++·笔记·算法·板子
shwill1233 小时前
PID 算法(三)--- 增量 PID ↔ 单神经元 PID 等价映射
linux·算法
山峰哥3 小时前
数据库性能救星:Explain执行计划深度拆解
服务器·开发语言·数据库·sql·启发式算法
wabs6664 小时前
关于图论【卡码网110.字符串迁移的思考】
数据结构·算法·图论
hanlin035 小时前
刷题笔记:力扣第242、349题(哈希表)
笔记·算法·leetcode
aramae5 小时前
C++ IO流完全指南:从C标准库到C++流式编程
服务器·c语言·开发语言·c++·后端
浮沉9876 小时前
二分查找算法例题(二)
算法