Skip to content

bench-audit:实验代码体检 ​

做实验带脚本,结果可复核Python 3.9+,无第三方依赖下载源码(ZIP)

静态检查测速代码中 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 文件做语法分析,不运行代码,不联网。

局限 ​

规则是启发式的。同步写在被调用的函数里、预热用了别的名字,都可能误报;反过来,代码“看起来对”也不代表实验设计没问题,清单里的项目要逐条确认。