Skip to content

gpu-pick:共享服务器选卡 ​

做实验带脚本,结果可复核Python 3.9+ 和 nvidia-smi下载源码(ZIP)

在课题组的共享 GPU 服务器上看清每张卡被谁占着,选出空闲的卡并设置好 CUDA_VISIBLE_DEVICES,提醒占着显存却不计算的进程。

能做什么 ​

共享服务器上最常见的冲突:没看就用了别人正在用的卡,两边都 OOM;或者开着 Jupyter 占着显存一整天。这个技能让 Agent 在启动 GPU 任务之前先看一眼:

  • 列出每张卡的显存、利用率、温度,以及占用它的进程和用户;
  • 按条件(显存、利用率、没有进程、最少空闲显存)选出空闲的卡;
  • 输出 CUDA_VISIBLE_DEVICES,同时设置 CUDA_DEVICE_ORDER=PCI_BUS_ID,让程序里的编号和 nvidia-smi 一致;
  • 提醒“占着显存但几乎不计算”的卡,多半是忘了关的 Jupyter 或调试进程;
  • 说明书里写了共享服务器的使用规范,Agent 在服务器上帮你跑任务时也会遵守。

安装 ​

装到当前项目(.claude/skills/),macOS / Linux
curl -LO https://skills.bnuai.com/download/skills/gpu-pick.zip && mkdir -p .claude/skills && unzip -o gpu-pick.zip -d .claude/skills
装到个人目录,所有项目都能用,macOS / Linux
curl -LO https://skills.bnuai.com/download/skills/gpu-pick.zip && mkdir -p ~/.claude/skills && unzip -o gpu-pick.zip -d ~/.claude/skills
装到当前项目,Windows PowerShell
Invoke-WebRequest https://skills.bnuai.com/download/skills/gpu-pick.zip -OutFile gpu-pick.zip; Expand-Archive gpu-pick.zip -DestinationPath .claude\skills -Force

压缩包从本站下载,不需要 Node.js 或 GitHub。带脚本的技能需要 Python 3.9 以上。更新时重新下载解压、覆盖原文件夹即可。

怎么用 ​

text
帮我在这台服务器上找两张空闲的卡,跑 train.py。
现在哪张卡空着?

示例 ​

text
| GPU | 型号 | 显存(已用/总量 MiB) | 利用率 | 温度 | 进程(用户 PID 显存) | |
|---|---|---|---|---|---|---|
| 0 | NVIDIA A800-SXM4-80GB | 71234/81920 | 97% | 63°C | alice 12345 71000MiB |  |
| 1 | NVIDIA A800-SXM4-80GB | 4/81920 | 0% | 31°C | - | ✅ 选中 |
| 2 | NVIDIA A800-SXM4-80GB | 30512/81920 | 0% | 35°C | bob 23456 30500MiB |  |
| 3 | NVIDIA A800-SXM4-80GB | 2/81920 | 0% | 30°C | - | ✅ 选中 |

在运行实验的终端里执行:
export CUDA_DEVICE_ORDER=PCI_BUS_ID
export CUDA_VISIBLE_DEVICES=1,3

提示:2 号卡占着显存但几乎没有计算,可能是忘了关的 Jupyter 或调试进程,可以提醒对应的同学。

(示例数据。)

直接运行脚本 ​

bash
python3 skills/gpu-pick/scripts/gpupick.py -n 2 --min-free 40000
eval "$(python3 skills/gpu-pick/scripts/gpupick.py -n 1 --export)" && python train.py

权限说明 ​

只读:运行 nvidia-smi 查询显卡,运行 ps 查看进程属于哪个用户。不会结束任何进程。

局限 ​

只看当前时刻。别人的任务可能正处在加载阶段、显存还没涨上来,有组内预约表时以预约为准。