Skip to content

主线导航与总纲

Abstract

这篇是 mainline/ 的唯一总入口。

它同时承担三件事:

  1. 说明 为什么要按 BFS 梳理代码
  2. 给出 run_benchmark -> pipeline总顺序图
  3. 给出后续 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.execute

1.2 树图表示什么

树图回答:

为了理解,某一步内部应该怎样分块。

例如:

text
_eval_batch
├─ 切数据
├─ 训练
├─ 预测
└─ 打分

1.3 一个必须记住的判别规则

  • 外层壳和被它调用/调度的任务体:优先画成包含关系
  • 同一函数体内部的职责分块:可以画成并列子块

所以:

  • eval_model -> schedule -> strategy.execute 是包含链
  • _eval_batch 的训练/预测/打分是并列块

2. run_benchmark.pypipeline(...) 的总顺序图

这一组文档的总主线,先固定成:

这里先钉死三层边界:

  • 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(...) 真正负责的是四大块:

  1. 准备数据
  2. 准备模型工厂
  3. 执行评测
  4. 收集结果并写日志

这张图之后,后面 Level 主线就只需要继续下钻 1 -> 2 -> 3 -> 4 里的关键节点。


4. 主线 Level 树

这棵树的意思是:

  • mainline/ 只负责把框架主线稳定到 _eval_batch(...)
  • 再往下的源码精读,进入 deepread/
  • 再往下的模型内部,进入 modelread/

5. 每一层到底解决什么

层级文档解决的问题出口
Level 1[[21-Level1-run_benchmark总顺序]]run_benchmark.py 怎样组装配置并调用 pipelinepipeline(...)
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. 固定阅读顺序

严格按这个顺序:

  1. [[21-Level1-run_benchmark总顺序]]
  2. [[22-Level2-pipeline四大块]]
  3. [[23-Level3-执行评测总顺序]]
  4. [[24-Level4-rolling任务主体]]
  5. [[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. 对 1020 的处理

这两篇原来分别承担:

  • 20:BFS 方法论
  • 10run_benchmark -> pipeline 总图

现在它们的核心内容都已经吸收到这篇 00 里。

所以:

  • [[10-run_benchmark与pipeline-总图]] 现在只作为旧入口重定向
  • [[20-代码梳理-BFS方法与当前主线]] 现在只作为旧入口重定向

以后只从这篇 00 进入。

*记录并在线阅读我的笔记*