终端与 Shell:AI 工程师的主战场


文档摘要

终端与 Shell:AI 工程师的主战场 本节摘要:终端(Terminal)是 AI 工程师生活的地方——在这里待得舒服,效率就高。你花在终端里的时间会比任何编辑器都多:训练任务、GPU 监控、日志跟踪、远程 SSH 会话、环境管理,每个 AI 工作流都触到 shell。在这里慢,到处都慢。本节只讲 AI 工作真正用得上的终端技能:用管道(pipe)、重定向与 过滤处理训练日志,用 tmux 建持久多窗格会话同时跑训练与监控(断开 SSH 也不中断),用 、 、 监控系统与 GPU 资源,用 SSH、 、 在本地与远程机器间传文件。读完本节,你能用一条命令搞定日志分析,用 tmux 让训练在你回家后继续跑,用端口转发把远程 Jupyter 当本地用。

终端与 Shell:AI 工程师的主战场

本节摘要:终端(Terminal)是 AI 工程师生活的地方——在这里待得舒服,效率就高。你花在终端里的时间会比任何编辑器都多:训练任务、GPU 监控、日志跟踪、远程 SSH 会话、环境管理,每个 AI 工作流都触到 shell。在这里慢,到处都慢。本节只讲 AI 工作真正用得上的终端技能:用管道(pipe)、重定向与 grep 过滤处理训练日志,用 tmux 建持久多窗格会话同时跑训练与监控(断开 SSH 也不中断),用 htopnvtopnvidia-smi 监控系统与 GPU 资源,用 SSH、scprsync 在本地与远程机器间传文件。读完本节,你能用一条命令搞定日志分析,用 tmux 让训练在你回家后继续跑,用端口转发把远程 Jupyter 当本地用。

对应原课程:Phase 00 · Lesson 10 · terminal-and-shell(原英文 phases/00-setup-and-tooling/10-terminal-and-shell/docs/en.md)。前置:第 01 节「开发环境」。

学习目标

阅读完本节,你应当能够:

  1. 管道、重定向、grep 从命令行过滤与处理训练日志。
  2. tmux 创建持久的多窗格会话,同时跑训练与 GPU 监控。
  3. htopnvtopnvidia-smi 监控系统与 GPU 资源。
  4. SSH、scprsync 在本地与远程机器间传文件。

一、问题与直觉

你花在终端里的时间会比任何编辑器都多:训练任务、GPU 监控、日志跟踪、远程 SSH 会话、环境管理,每个 AI 工作流都触到 shell。在这里慢,到处都慢

本节只讲 AI 工作真正用得上的终端技能——不讲 Unix 历史,不深入 Bash 脚本,只讲你需要的。

典型的 AI 终端工作场景:

三件事同时跑,一个终端窗口搞定。你可以断开(dettach),回家,SSH 重连,再接上(reattach)——训练一直在跑

💡 这就是 tmux 的魔力:它把终端会话与你的 SSH 连接解耦。网络断了、笔记本合上了、下班回家了,会话里的进程都继续跑。这是远程 GPU 训练的标配。

二、从零实现

Step 1 认识你的 shell

echo $SHELL # 多数系统是 bash 或 zsh,本课程命令两者通用

最该先学的快捷键是历史搜索:Ctrl+R 然后输入之前命令的一部分,再按 Ctrl+R 在匹配间循环——这是你将用得最多的快捷键。其他必备:Ctrl+L 清屏,Ctrl+C 取消运行中命令,Ctrl+Z 挂起(用 fg 恢复)。

Step 2 管道与重定向

管道把命令串起来,这是你处理日志、过滤输出、串联工具的方式——会反复用到:

# 统计日志里 "loss" 出现多少次 cat train.log | grep "loss" | wc -l # 从训练输出里只抽 loss 值 grep "loss:" train.log | awk '{print $NF}' > losses.txt # 实时看日志更新,只过滤错误 tail -f train.log | grep --line-buffered "ERROR" # 按最终准确率给实验排序 grep "final_accuracy" results/*.log | sort -t= -k2 -n -r # 标准输出与标准错误分别写两个文件 python train.py > output.log 2> errors.log # 都写进同一个文件 python train.py > train_full.log 2>&1
符号 作用
> 标准输出写文件(覆盖)
>> 标准输出追加到文件
2> 标准错误写文件
2>&1 标准错误送到与标准输出同一处
` `

设计要点:2>&1 是把训练任务的日志(标准输出)与报错(标准错误)都收进一个文件的标准写法——训练出错时,你能在一个文件里同时看到进度日志与异常堆栈,定位快得多。

Step 3 后台进程

训练一跑就是几小时,你不想一直开着终端:

python train.py & # 后台跑(输出仍到终端) nohup python train.py > train.log 2>&1 & # 后台跑,关终端也死不了 jobs # 看后台在跑啥 ps aux | grep train.py # 找进程 fg %1 # 把后台任务调回前台 kill %1 # 杀后台任务 kill $(pgrep -f "train.py") # 按 PID 杀
方法 关终端能活? 能重新接上?
command &
nohup command & 否(看日志文件)
screen / tmux

超过几分钟的任务,用 tmux

Step 4 tmux

tmux 让你创建带多窗格的持久终端会话——这是管理训练任务最有用的单一工具:

tmux new -s training # 起一个命名会话 # Ctrl+B 再按 " 水平分屏 # Ctrl+B 再按 % 垂直分屏 # Ctrl+B 再按方向键 切窗格 # Ctrl+B 再按 d 断开(会话继续跑) tmux attach -t training # 重新接上 tmux ls # 列出会话 tmux kill-session -t training # 杀会话

典型 AI 工作流:

tmux new -s train # 窗格 1: 起训练 python train.py --epochs 100 --lr 1e-4 # Ctrl+B, " 分屏,跑 GPU 监控 watch -n1 nvidia-smi # Ctrl+B, % 垂直分屏,跟踪日志 tail -f logs/experiment.log # Ctrl+B, d 断开 —— 回家,SSH 重连 # tmux attach -t train

Step 5 用 htop 与 nvtop 监控

htop # 系统进程(比 top 好) nvtop # GPU 进程(NVIDIA 卡) nvidia-smi # 快速 GPU 检查 watch -n1 nvidia-smi # 每秒刷新 GPU 用量 nvidia-smi --query-compute-apps=pid,name,used_memory --format=csv # 看谁在用 GPU

htop 常用键:F6/> 按列排序(按内存排找泄漏),F5 切树视图,F9 杀进程,/ 搜索进程名。

Step 6 SSH 连远程 GPU 机器

租了云端 GPU(Lambda、RunPod、Vast.ai)后,你通过 SSH 连接:

ssh user@gpu-box-ip # 基本连接 ssh -i ~/.ssh/my_gpu_key user@gpu-box-ip # 指定密钥 scp model.pt user@gpu-box-ip:~/models/ # 拷文件到远程 scp user@gpu-box-ip:~/results/metrics.json ./ # 从远程拷回 rsync -avz ./data/ user@gpu-box-ip:~/data/ # 同步整个目录(多文件更快) ssh -L 8888:localhost:8888 user@gpu-box-ip # 端口转发,远程 Jupyter 当本地用

把主机写进 ~/.ssh/config 后,直接 ssh gpu 一键连(见第 08 节)。

💡 端口转发是远程开发的杀手锏:ssh -L 8888:localhost:8888 之后,远程的 Jupyter/TensorBoard 就能在你本地浏览器 localhost:8888 打开,体感与本地无异。

Step 7 AI 工作实用别名

把原课程 code/shell_aliases.sh 加进你的 ~/.bashrc~/.zshrc。关键几条:

alias gpu='nvidia-smi --query-gpu=index,name,utilization.gpu,memory.used,memory.total,temperature.gpu --format=csv,noheader' # GPU 一览 alias killtraining='pkill -f "python.*train"' # 杀所有训练进程 alias ae='source .venv/bin/activate' # 快速激活虚拟环境 alias watchloss='tail -f logs/*.log | grep --line-buffered "loss"' # 跟踪训练 loss

Step 8 常见 AI 终端模式

# 跑训练,全记日志,完成后通知 python train.py 2>&1 | tee train.log; echo "DONE" | mail -s "Training complete" you@email.com # 两个实验日志并排对比 diff <(grep "accuracy" exp1.log) <(grep "accuracy" exp2.log) # 找最大的模型文件(清理磁盘) find . -name "*.pt" -o -name "*.safetensors" | xargs du -h | sort -rh | head -20 # 从 Hugging Face 下模型 wget https://huggingface.co/model/resolve/main/model.safetensors # 解压数据集 tar xzf dataset.tar.gz -C ./data/ # 统计所有 Python 文件行数(看项目多大) find . -name "*.py" | xargs wc -l | tail -1 # 看磁盘空间(训练数据很快塞满) df -h du -sh ./data/* # 训练前查环境变量 env | grep -i cuda env | grep -i torch

三、框架对比:后台运行三种方式

方式 关终端存活 能重新接上 适用
command & 几秒的快速任务
nohup command & 否(靠日志文件) 几分钟到几小时
screen / tmux 长训练、需要持续交互

💡 决策树:几秒 → &;几分钟且不用回看 → nohup;长训练或要随时回去看 → tmux。AI 工作里 tmux 几乎是必装的,第 03 节讲的云端 GPU 训练,没 tmux 简直没法用。

四、可复用产物

本节产出(原课程 code/outputs/):

  • shell_aliases.sh:一组 AI 工作常用别名(gpu 一览、杀训练、激活 venv、看 loss 等),加进 shell 配置即可。
  • AI 终端模式速查表:上面 Step 8 的那些命令组合,贴在桌面随时查——这些模式在第 3 章起的每个训练任务里都会反复出现。

五、练习

  1. (Easy) 装 tmux,建一个三窗格会话:一个跑 htop,一个跑 watch -n1 date,一个跑个 Python 脚本;练习断开(dettach)与重新接上(reattach),确认断开后进程继续跑。
  2. (Medium)code/shell_aliases.sh 的别名加进你的 shell 配置,source ~/.zshrc(或 ~/.bashrc)重载;造一个假训练日志(for i in $(seq 1 100); do echo "epoch $i loss: $(echo "scale=4; 1/$i" | bc)"; sleep 0.1; done > fake_train.log),再用 greptailawk 抽出纯 loss 值。
  3. (Hard) 给你(或用 localhost 练手)配一个 SSH config 条目,实现 ssh 短名 一键连;再用 rsync -avz 同步一个本地目录到远程,对比 scp 的速度差异;最后用 ssh -L 端口转发,在远程跑一个 Jupyter,本地浏览器打开。

本节要点回顾

  1. 终端是 AI 工程师的主战场:训练、监控、日志、SSH、环境管理都在这,慢则处处慢。
  2. Ctrl+R 历史搜索:最该先学的快捷键,反复按在匹配间循环。
  3. 管道与重定向:| 串联命令、>/>>/2>/2>&1 重定向输出,日志处理的核心。
  4. 2>&1 收齐日志:标准输出与标准错误进同一文件,出错时定位快。
  5. 后台三方式:&(几秒)、nohup(几分钟、不回看)、tmux(长训练、要交互)。
  6. tmux 是训练标配:多窗格持久会话,断开 SSH 也继续跑,回家重连接上即可。
  7. 监控用 htop/nvtop/nvidia-smi:系统与 GPU 资源一目了然,watch -n1 每秒刷新。
  8. SSH + scp/rsync + 端口转发:连远程、传文件、远程 Jupyter 当本地用,远程 GPU 开发的三板斧。
  9. 别名省时间:gpukilltrainingaewatchloss 这类高频命令写成别名。

下一节,我们将进入「面向 AI 的 Linux」——在终端基础上,补齐 AI 工程师在 Linux 服务器上必须掌握的系统级知识与排障技能。


发布者: 作者: Rohit Gupta 转发
评论区 (0)
U