BotOf TechAI / IoT / Full-Stack / 植物养护知识分享
W1203 / 剖析并复现系统论文

顶会论文轻量复现

在有限 GPU 下先重现基线,再隔离唯一机制,用原始日志、方差与系统指标检验论文核心主张。

建议时长
10–14 小时
难度
综合实战
课程位置
12 / 12
LEARNING OBJECTIVES

学完这一课,你应该能:

  • 能把论文主张缩小为可执行的复现实验
  • 能锁定环境、数据、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. 与官方实现对照

差异分四类:

  1. 实现差异:公式或数据流不同。
  2. 环境差异:库、kernel、硬件不同。
  3. 规模差异:小模型没有 scaling 行为。
  4. 证据差异:评测协议或统计方法不同。

不要用“可能是环境”结束。列出可验证假设,逐个实验。

9. 失败结果如何写

在 42M 参数、公开语料子集、单 GPU、三 seed 条件下,
方法 A 的验证 Loss 与基线无显著差异;
峰值显存降低 18%,但 TPOT 未改善。
Profiler 显示额外 layout conversion 占 21% 时间。
因此支持内存子主张,不支持当前实现下的延迟子主张。
该结论不能外推到论文的 7B 规模。

这比“没复现出来,可能算力不够”更有信息量。

10. 最终项目选题

三选一:

  1. Transformer-XL:验证 segment recurrence 对长依赖与速度的影响。
  2. RetNet:比较 parallel/recurrent 的结果与资源。
  3. KV Cache/PagedAttention:验证理论缓存、碎片与并发吞吐。

最低交付:可运行仓库、环境锁、数据 hash、baseline + method 三 seed、质量与系统指标、原始日志、自动报告脚本、失败记录与适用边界。

11. 复现完成定义

  • 第三方能用明确命令开始运行。
  • 报告每个数字可追溯到日志。
  • 基线与方法只差声明变量。
  • 负结果未被删除。
  • 结论不超出实验规模。
  • 已知偏差与未验证部分明确列出。

12. 延伸阅读