深色模式
bench-audit:实验代码体检
静态检查测速代码中 GPU 计时没同步、计时包含模型加载、没有预热、没固定种子、只报平均值等问题,再对照清单检查实验设计。
为什么需要
系统论文的结论靠测量支撑。GPU 操作是异步的,计时前后不同步,测到的只是“提交任务”的时间,加速比可能凭空好看好几倍。审稿人最常质疑的也是这些:计时准不准、基线公不公平、为什么只报平均值。
能做什么
静态检查(只读代码,不运行):
| 规则 | 检查什么 |
|---|---|
| gpu-sync | 用了 CUDA,但计时前后没有 torch.cuda.synchronize() 或 CUDA Event |
| load-in-timing | 计时区间里有 from_pretrained、torch.load、torch.compile |
| wall-clock | 用 time.time() 测时长 |
| warmup | 没有预热 |
| seed | 用了随机数但没有固定种子 |
| mean-only | 只算平均值,没有标准差或分位数 |
| raw-results | 没有保存原始结果 |
| no-grad | 推理测速没有 inference_mode() / no_grad() |
| cudnn-benchmark | 开了 cudnn.benchmark 却没有预热 |
实验设计检查:对照检查清单确认基线是否调到最佳、重复次数、尾延迟、负载来源、硬件和版本记录、消融和敏感性分析。
安装
装到当前项目(.claude/skills/),macOS / Linux
curl -LO https://skills.bnuai.com/download/skills/bench-audit.zip && mkdir -p .claude/skills && unzip -o bench-audit.zip -d .claude/skills装到个人目录,所有项目都能用,macOS / Linux
curl -LO https://skills.bnuai.com/download/skills/bench-audit.zip && mkdir -p ~/.claude/skills && unzip -o bench-audit.zip -d ~/.claude/skills装到当前项目,Windows PowerShell
Invoke-WebRequest https://skills.bnuai.com/download/skills/bench-audit.zip -OutFile bench-audit.zip; Expand-Archive bench-audit.zip -DestinationPath .claude\skills -Force压缩包从本站下载,不需要 Node.js 或 GitHub。带脚本的技能需要 Python 3.9 以上。更新时重新下载解压、覆盖原文件夹即可。
怎么用
text
帮我检查一下 scripts/bench.py 的测速写得对不对。
为什么我测出来的加速比比论文高这么多?帮你写完测速代码后,Agent 也可以主动用它自查一遍。
示例
python
def bench(prompt):
t0 = time.time()
model = AutoModelForCausalLM.from_pretrained("gpt2").cuda()
x = torch.randn(1, 16).cuda()
out = model(x)
t1 = time.time()
print(np.mean([t1 - t0]))text
## 建议改(3)
- [gpu-sync] bad.py:7 bench 中用 time.time() 计时,但没有调用 torch.cuda.synchronize()。GPU 操作是异步的,计时前后都要同步,否则测到的时间偏小
- [load-in-timing] bad.py:8 计时区间(第 7~11 行)里调用了 AutoModelForCausalLM.from_pretrained()。模型加载、编译应该放在计时之外
- [seed] bad.py:9 用到了随机数(torch.randn),但没有固定随机种子。random、numpy、torch 的种子都要固定,并在结果中记录
## 请确认(5)
- [wall-clock] bad.py:7 bench 用 time.time() 测时长……
- [warmup] bad.py:7 没有找到预热(warmup)……
- [mean-only] bad.py:7 只计算了平均值……
- [raw-results] bad.py:7 没有找到保存结果的代码……
- [no-grad] bad.py:7 推理测速建议放在 torch.inference_mode()(或 torch.no_grad())下……正确的写法见技能说明中的示例代码:预热几轮,计时前后同步,保存每一轮的原始数据,再算均值、标准差、P50、P99。
直接运行脚本
bash
python3 skills/bench-audit/scripts/benchaudit.py scripts/
python3 skills/bench-audit/scripts/benchaudit.py bench.py --json权限说明
只读取 .py 文件做语法分析,不运行代码,不联网。
局限
规则是启发式的。同步写在被调用的函数里、预热用了别的名字,都可能误报;反过来,代码“看起来对”也不代表实验设计没问题,清单里的项目要逐条确认。