Appearance
主线导航与总纲
Abstract
这篇是
mainline/的唯一总入口。它同时承担三件事:
- 说明 为什么要按 BFS 梳理代码
- 给出
run_benchmark -> pipeline的 总顺序图- 给出后续
Level 1 ~ Level 5的 阅读入口
0. 第一性
这一组 mainline 文档的第一性是:
把 TFB 的 benchmark 主线,从命令行参数到日志文件输出,按稳定的层级和接口重新梳理清楚。
也就是说,这一组文档回答的是:
- 框架是怎么跑起来的
- 各层接口分别是什么
- 哪一步该先看,哪一步该后看
- 后续局部精读应该挂在哪个节点下
不是回答:
- 某个模型内部细节
- 某个 attention 公式细节
- 某篇论文理论本身
这些分别属于 modelread/ 或 deepread/。
1. 为什么这里必须用 BFS
这条 benchmark 主线不适合一开始就 DFS 到最底层。
原因很直接:
- 外层有
run_benchmark.py - 中层有
pipeline(...) - 再往下有
eval_model(...) - 再往下有
strategy.execute(...) - 再往下才进入
_eval_batch(...)
如果一开始就追某个深层函数,很容易:
- 看懂一小段代码
- 但不知道它挂在哪个父节点下
- 也不知道它为什么在这条主线上出现
所以这里固定的方法是:
text
先高层顺序
-> 再当前层的逻辑分块
-> 再对某个关键子块继续展开也就是:
先 BFS,再 DFS。
1.1 顺序图表示什么
顺序图回答:
运行时,大体按什么先后顺序推进。
例如:
text
run_benchmark
-> pipeline
-> eval_model
-> strategy.execute1.2 树图表示什么
树图回答:
为了理解,某一步内部应该怎样分块。
例如:
text
_eval_batch
├─ 切数据
├─ 训练
├─ 预测
└─ 打分1.3 一个必须记住的判别规则
- 外层壳和被它调用/调度的任务体:优先画成包含关系
- 同一函数体内部的职责分块:可以画成并列子块
所以:
eval_model -> schedule -> strategy.execute是包含链_eval_batch的训练/预测/打分是并列块
2. run_benchmark.py 到 pipeline(...) 的总顺序图
这一组文档的总主线,先固定成:
这里先钉死三层边界:
run_benchmark.py:最外层总控pipeline(...):实验执行主线report(...):结果展示层
2.1 run_benchmark.py 的第一性
把命令行参数和 JSON 配置,组装成可执行的 benchmark 配置,并调用
pipeline(...)和report(...)。
2.2 pipeline(...) 的第一性
把已经组装好的
data/model/evaluation配置,变成log_filenames。
2.3 report(...) 的第一性
把
log_filenames变成 leaderboard / csv / dash 这类展示结果。
3. pipeline(...) 的四大块总图
pipeline(...) 真正负责的是四大块:
- 准备数据
- 准备模型工厂
- 执行评测
- 收集结果并写日志
这张图之后,后面 Level 主线就只需要继续下钻 1 -> 2 -> 3 -> 4 里的关键节点。
4. 主线 Level 树
这棵树的意思是:
mainline/只负责把框架主线稳定到_eval_batch(...)- 再往下的源码精读,进入
deepread/ - 再往下的模型内部,进入
modelread/
5. 每一层到底解决什么
| 层级 | 文档 | 解决的问题 | 出口 |
|---|---|---|---|
| Level 1 | [[21-Level1-run_benchmark总顺序]] | run_benchmark.py 怎样组装配置并调用 pipeline | pipeline(...) |
| Level 2 | [[22-Level2-pipeline四大块]] | pipeline(...) 怎样分成四大块 | 2A~2D |
| Level 3 | [[23-Level3-执行评测总顺序]] | eval_model(...) 怎样把任务提交出去 | strategy.execute(...) |
| Level 4 | [[24-Level4-rolling任务主体]] | strategy.execute(...) 怎样走到 _eval_batch(...) | _eval_batch(...) |
| Level 5 | [[25-Level5-_eval_batch四段总览]] | _eval_batch(...) 怎样分成切数/训练/预测/打分 | 5A~5D |
6. 固定阅读顺序
严格按这个顺序:
- [[21-Level1-run_benchmark总顺序]]
- [[22-Level2-pipeline四大块]]
- [[23-Level3-执行评测总顺序]]
- [[24-Level4-rolling任务主体]]
- [[25-Level5-_eval_batch四段总览]]
然后分流:
- 继续源码精读:[[../deepread/00-精读导航]]
- 继续模型精读:[[../modelread/00-模型精读导航]]
7. 收束与复习入口
7.1 主线收束
- [[36-完整层级与接口总树]]
- [[40-TFB完整架构总讲解]]
- [[33-DLinear在完整benchmark中的全链坐标总图]]
- [[38-Informer在完整benchmark中的全链坐标总图]]
7.2 分支与迁移
- [[37-分支树地图-从1x1到mxn]]
- [[39-phase1与当前主线的映射]]
7.3 自检
- [[34-学习缺口与自检Checkpoints]]
- [[35-自检复习卡片与下一步]]
8. 对 10 和 20 的处理
这两篇原来分别承担:
20:BFS 方法论10:run_benchmark -> pipeline总图
现在它们的核心内容都已经吸收到这篇 00 里。
所以:
- [[10-run_benchmark与pipeline-总图]] 现在只作为旧入口重定向
- [[20-代码梳理-BFS方法与当前主线]] 现在只作为旧入口重定向
以后只从这篇 00 进入。