九章智算云

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_workerspin_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                              # 列出所有会话

后续

最后更新于

这篇文档对你有帮助吗?

目录