GPU Pod 里的 Linux 速查
SSH 进 pod 后最常用的 ~40 条命令 —— 文件 / 权限 / 打包 / SCP / nvidia-smi 占卡排查 / 杀进程
Alaya NeW 的 GPU 实例默认是 Ubuntu 22.04 LTS。本页是 SSH 进 pod 后最常摸到的命令速查,不教 Linux 入门,只列你日常会反复用的那一小撮。
配套阅读:Tmux 终端复用(SSH 断了任务还在跑) · GitHub 国内加速 · HF 镜像加速
1. 文件与目录
切目录(cd)
cd / # 根目录
cd ~ # home
cd - # 上次访问的目录(高频)
cd ../ # 上一级
cd /data/checkpoints # 任意绝对路径输入路径时按 Tab 自动补全 —— 训练数据集路径动辄几十层,补全是肌肉记忆。
列内容(ls)
ls # 当前目录
ls -a # 包括隐藏文件(.cache / .gitignore 等)
ls -lh # 列表形式 + 人类可读的大小(120M / 4.0G)
ls -lhS # 按大小倒序 —— 找占盘大文件神器
ls -lt # 按时间倒序 —— 找最新写入的 checkpoint创建 / 删除 / 移动
mkdir -p /data/runs/exp-001/logs # -p 自动创建中间目录
touch a.txt # 创建空文件
rm a.txt
rm -rf <dir> # 递归强删,无确认
mv old.pt new.pt # 改名 / 移动
cp -r src/ dst/ # 递归复制(模型 checkpoint 常用)rm -rf 没有回收站。在 GPU pod 里跑 rm -rf $TMP/* 之前,务必先 echo $TMP 看一眼,空变量 + 这条命令 = 灾难。
找文件
find . -name "*.safetensors" # 找当前目录下所有模型权重
find . -type f -size +1G # 找所有大于 1G 的文件
find . -type f -mtime -1 # 最近 24 小时改动过的文件
find /data -name "checkpoint-*" -type d # 找训练 checkpoint 目录看路径
pwd # 当前在哪
realpath ./model.bin # 解析为绝对路径(挂载点排查必备)2. 看文件
cat config.json # 整个文件打到屏幕
less train.log # 分页看大文件,q 退出,/keyword 搜索
head -50 train.log # 前 50 行
tail -50 train.log # 后 50 行
tail -f train.log # 实时追加(看训练 loss 必备)tail -f train.log 是训练任务运行时最常用的命令之一 —— 配合 Tmux 不掉线。
3. vim 三件事就够
vim 学全要写本书,在 pod 里你只需要会做 3 件事:
vim config.yaml进入后:
| 想做什么 | 怎么做 |
|---|---|
| 改东西 | 按 i 进插入模式,改完按 Esc 退出插入模式 |
| 存盘退出 | Esc → 输入 :wq → 回车 |
| 不存盘退出 | Esc → 输入 :q! → 回车 |
加上 4 个常用动作:
| 想做什么 | 怎么做 |
|---|---|
| 跳到第 100 行 | :100 回车 |
找关键字 loss | /loss 回车,按 n 下一个 |
| 删除当前行 | 按 dd |
| 撤销 | 按 u |
不会用 vim 也行 —— 直接 VS Code Remote-SSH 在本地编辑器里改 pod 上的文件。
4. 权限(chmod)
chmod +x run.sh # 加可执行权限(脚本最常用)
chmod 755 run.sh # 等价写法
chmod -R 755 /data/scripts # 递归改整个目录8421 法速记:r=4,w=2,x=1,加起来就是数字。
| 数字 | 含义 |
|---|---|
7 (4+2+1) | 读 + 写 + 执行(rwx) |
6 (4+2) | 读 + 写(rw-) |
5 (4+1) | 读 + 执行(r-x) |
4 | 只读(r--) |
chmod 755 file 三位分别对应:拥有者 / 同组用户 / 其他人。
ls -l 看权限:
-rwxr-xr-x 1 user user 4096 May 3 12:00 run.sh
^-^^^^^^^^^
| | | |
| | | └── 其他人:r-x
| | └──── 同组:r-x
| └────── 拥有者:rwx
└──────── - 是文件,d 是目录5. 打包与解压
# tar(Linux 原生)
tar -czvf data.tar.gz data/ # 打包 + gzip 压缩
tar -xzvf data.tar.gz # 解到当前目录
tar -xzvf data.tar.gz -C /target/ # 解到指定目录
tar -tf data.tar.gz | head # 不解压,只看里面有什么
# zip(跨平台,常用于把模型权重传给同事)
zip -r weights.zip checkpoint-*/
unzip weights.zip
unzip -l weights.zip # 只看清单参数记忆:c=create / x=extract / z=gzip / v=verbose / f=file。
6. 文件传输(本地 ↔ Pod)
Alaya NeW pod 通过 SSH 端口暴露,假设你的连接信息是 ssh -p 31029 user@example.alayanew.com。
本地传到 pod
# 单个文件
scp -P 31029 model.safetensors user@example.alayanew.com:/data/
# 整个目录
scp -rP 31029 dataset/ user@example.alayanew.com:/data/从 pod 拉回本地
scp -P 31029 user@example.alayanew.com:/data/checkpoint-1000.pt ./
scp -rP 31029 user@example.alayanew.com:/data/runs/exp-001/ ./⚠️
scp大文件慢且会断。> 1 GB 用rsync -avzP,带断点续传,只传变化的部分。
rsync -avzP -e "ssh -p 31029" /data/dataset/ user@example.alayanew.com:/data/dataset/从公网下载
wget https://example.com/file.tar.gz # 简单下载
wget -c https://example.com/file.tar.gz # 断点续传(-c)
wget -O model.bin https://... # 指定保存名
curl -LO https://example.com/file.tar.gz # curl 等价用法GitHub release 走加速:见 GitHub 国内加速。 HuggingFace 模型权重走镜像:见 HF 镜像加速。
7. 进程与资源监控
看系统资源
free -h # 内存(-h 人类可读)
df -h # 磁盘各分区使用
df -h /data # 看 /data 这个挂载点
du -sh /data/* # /data 下每个子目录占多少
top # 实时进程,按 q 退出,默认按 CPU 排序
htop # 比 top 好看,但 pod 里可能没装 → apt install htop找进程并杀掉
ps -ef | grep python # 列出所有 python 进程
ps aux --sort=-%mem | head # 按内存倒序前 10
kill <pid> # 友好结束
kill -9 <pid> # 强杀(进程不响应时用)
pkill -f train.py # 按命令行匹配杀(模糊匹配)8. GPU 专用速查 ⭐️
最高频的 GPU 排错场景 —— 看占用、找占卡进程、放卡。
nvidia-smi 输出怎么读
nvidia-smi+-----------------------------------------------------------------------------+
| NVIDIA-SMI 535.86.10 Driver Version: 535.86.10 CUDA Version: 12.2 |
+-------------------------------+----------------------+----------------------+
| GPU Name | Bus-Id | ... | Memory-Usage | GPU-Util | Pwr:Usage/Cap |
| 0 NVIDIA H100 80GB HBM3 | ... | | 78234MiB/81559MiB | 98% | 412W/700W |
+-------------------------------+----------------------+----------------------+
| Processes: |
| GPU GI CI PID Process name GPU Memory |
| 0 N/A N/A 1234 python train.py 78GiB |
+-----------------------------------------------------------------------------+| 字段 | 含义 |
|---|---|
Memory-Usage | 已用 / 总显存。显存接近上限 = 容易 OOM |
GPU-Util | 计算单元利用率。< 30% 说明 IO 瓶颈或 batch size 太小 |
Pwr:Usage/Cap | 当前功率 / 最大功率。长期 < 50% 说明卡没跑满 |
Processes.PID | 占卡的进程 ID,kill 用得上 |
实时刷新
nvidia-smi -l 1 # 每 1 秒刷一次(自带刷新,不用 watch)
watch -n 1 nvidia-smi # 等价用法
nvidia-smi --query-gpu=memory.used,utilization.gpu --format=csv -l 1 # 只看关心的列找出占卡进程并放卡
# 1. 看哪些 PID 在占卡
nvidia-smi
# 2. 假设 PID 1234 是上次没跑完的训练
ps -ef | grep 1234 # 确认是不是你自己的进程
kill -9 1234 # 杀掉
# 3. 一行命令杀掉所有 GPU 上的进程(慎用 —— 会把你正在跑的也干掉)
fuser -k /dev/nvidia*fuser -k /dev/nvidia* 会杀掉当前 pod 内所有占用 GPU 的进程。在多人共享的 pod 上慎用。
nvidia-smi 实战:为什么我训练特别慢?
| 现象 | 多半是 |
|---|---|
GPU-Util 0%,显存满 | 进程挂死 / 在等数据 IO |
GPU-Util 跳动 0%↔100% | DataLoader 慢,加 num_workers 或 pin_memory=True |
GPU-Util 持续 < 30% | Batch size 太小 / 模型本身就小 |
| 显存接近上限就 OOM | 减 batch size / 开 gradient checkpointing / 切换到 ZeRO-3 |
9. 几个救命的"我记不住怎么办"
history | tail -50 # 最近 50 条命令(找上次跑的训练命令)
history | grep python # 历史里所有含 python 的命令
!1234 # 重跑历史第 1234 条
!! # 重跑上一条(配 sudo 用:sudo !!)
ctrl + r # 反向搜索历史(强烈推荐肌肉记忆)
ctrl + c # 中断当前命令
ctrl + z # 挂起到后台(用 fg 拉回来)
which python # 看用的是哪个 python(虚拟环境排查)
echo $PATH # 看可执行文件搜索路径
env | grep CUDA # 看 CUDA 相关环境变量10. 任务跑起来就别管它(配合 Tmux)
GPU 训练任务动辄几小时几天,SSH 一断就废 —— 任何长任务都先开 Tmux:
tmux new -s train # 新建会话
# … 在里面跑训练 …
# 按 ctrl+b 然后按 d 脱离(任务继续跑)
tmux attach -t train # 重新连回去
tmux ls # 列出所有会话后续
- 学完速查 → Tmux 多会话训练
- 想用 IDE 直接编辑 pod 文件 → VS Code Remote-SSH
- 跑分布式训练 → Ray 分布式 PyTorch
最后更新于
