顶会论文轻量复现
在有限 GPU 下先重现基线,再隔离唯一机制,用原始日志、方差与系统指标检验论文核心主张。
- 建议时长
- 10–14 小时
- 难度
- 综合实战
- 课程位置
- 12 / 12
学完这一课,你应该能:
- 能把论文主张缩小为可执行的复现实验
- 能锁定环境、数据、seed 与评测协议
- 能区分完整复现、轻量验证与代码跑通
- 能提交可由第三方重建的复现报告
1. 三种“复现”不要混用
代码跑通只说明作者 demo 和环境可用;轻量验证缩小模型或数据,检验核心趋势;完整复现尽可能对齐数据、模型、训练预算、硬件和评测。报告第一段就声明自己属于哪一种。
2. 写可证伪实验合同
claim: retention 在长序列上以更低推理内存保持质量
baseline: parameter-matched Transformer
independent_variable: sequence mechanism
controlled:
- dataset and token budget
- parameter count tolerance
- optimizer and schedule
- precision and hardware
seeds: [17, 42, 73]
quality_metrics: [validation_loss, task_score]
system_metrics: [peak_vram, ttft, tpot, throughput]
falsifier:
- quality gap exceeds tolerance
- efficiency advantage disappears under same kernel
无法写出 falsifier 的实验,容易只寻找支持结论的证据。
3. Baseline first
先运行基线并对照可信参考。若差很多,检查数据预处理、参数量、初始化、学习率、warmup、评测脚本、精度和 kernel。基线不可信时,不要继续解释新机制优势。
4. 锁定环境与数据
code_sha: 4d31...
python: 3.12.4
torch: 2.x
cuda: 12.x
container_digest: sha256:...
dataset:
source: ...
revision: ...
processed_hash: ...
model:
config_hash: ...
hardware:
gpu: ...
count: 1
保存依赖锁、启动命令和环境变量名称,但不把密钥写入报告。记录 Python、NumPy、PyTorch、CUDA seed;即使 deterministic,某些 GPU 算子仍可能不完全确定,要报告实测方差。
5. 参数匹配与训练预算
baseline params: 42.1M
method params: 42.4M
difference: +0.7%
training tokens: identical
optimizer steps: identical
新机制若参数更多、训练 token 更多或调参预算更多,比较就混入额外变量。系统论文还要对齐 kernel:新方法使用优化 kernel、基线使用朴素实现,只能证明当前实现组合更快。
6. 多 seed 与原始日志
runs/
└── method-seed17/
├── config.yaml
├── environment.txt
├── metrics.jsonl
├── samples.jsonl
├── profile.json
├── checkpoint/
└── stderr.log
最终表格由脚本从 metrics.jsonl 自动生成,不能手抄数字。这样图表才能追溯到原始运行。
7. 质量和系统指标同条件测
训练测 tokens/s、peak VRAM、step time 分解和通信比例;推理测 TTFT、TPOT、throughput、P50/P95,并覆盖不同序列长度与并发。
GPU 异步执行时要同步:
torch.cuda.synchronize()
start = time.perf_counter()
output = model(**batch)
torch.cuda.synchronize()
elapsed = time.perf_counter() - start
测量前 warmup,固定输出长度或报告真实 token 数。
8. 与官方实现对照
差异分四类:
- 实现差异:公式或数据流不同。
- 环境差异:库、kernel、硬件不同。
- 规模差异:小模型没有 scaling 行为。
- 证据差异:评测协议或统计方法不同。
不要用“可能是环境”结束。列出可验证假设,逐个实验。
9. 失败结果如何写
在 42M 参数、公开语料子集、单 GPU、三 seed 条件下,
方法 A 的验证 Loss 与基线无显著差异;
峰值显存降低 18%,但 TPOT 未改善。
Profiler 显示额外 layout conversion 占 21% 时间。
因此支持内存子主张,不支持当前实现下的延迟子主张。
该结论不能外推到论文的 7B 规模。
这比“没复现出来,可能算力不够”更有信息量。
10. 最终项目选题
三选一:
- Transformer-XL:验证 segment recurrence 对长依赖与速度的影响。
- RetNet:比较 parallel/recurrent 的结果与资源。
- KV Cache/PagedAttention:验证理论缓存、碎片与并发吞吐。
最低交付:可运行仓库、环境锁、数据 hash、baseline + method 三 seed、质量与系统指标、原始日志、自动报告脚本、失败记录与适用边界。
11. 复现完成定义
- 第三方能用明确命令开始运行。
- 报告每个数字可追溯到日志。
- 基线与方法只差声明变量。
- 负结果未被删除。
- 结论不超出实验规模。
- 已知偏差与未验证部分明确列出。