TensorFlow 源码拆解
从 Python API 到 C++ Runtime、设备 kernel 与部署格式的源码阅读地图
本文档不是 TensorFlow API 手册,而是一份“从调用点追到执行点”的源码导览。分析锚点是本地
tensorflow-master快照中的 Release 2.22.0;当上游继续演进时,文件路径与设计主线仍可作为回查入口,但具体行号可能变化。
这份拆解回答什么
你会看到一行 tf.matmul(x, y) 如何经过 Python 运算符与 eager dispatch,进入 EagerContext,选择设备和 kernel;也会看到 @tf.function 如何把 Python 函数变成 FuncGraph 与 ConcreteFunction,再交给 Graph Executor、Grappler、XLA/MLIR 或 TensorFlow Lite。
Python API / Keras
│
├── eager:convert → execute → EagerContext → kernel
│
└── graph:trace → FuncGraph → ConcreteFunction → GraphDef / MLIR
│
┌─────────────────────────┼─────────────────────────┐
▼ ▼ ▼
Executor Grappler XLA / Lite
│ │ │
└────────────── Device + OpKernel / Delegate ───────┘建议阅读顺序
| 路线 | 章节 | 适合谁 |
|---|---|---|
| 核心运行时 | 0 → 1 → 2 → 3 → 4 | 想弄清 TensorFlow 为什么能同时支持 eager 与 graph |
| 训练系统 | 0 → 5 → 6 → 7 | 想从 model.fit 追到梯度和分布式 step |
| 编译与部署 | 0 → 8 → 9 → 10 | 关心 XLA、MLIR、SavedModel 与移动端推理 |
| 工程维护 | 0 → 11 → 附录 | 要定位测试、构建、注册表和版本边界 |
章节地图
0 · 先建立地图
1 · 源码总览与边界
2 · Tensor、设备与内存
3 · Eager 与 Graph
4 · 自动微分
5 · tf.data 数据管线
6 · Keras 训练外壳
7 · 分布式执行
8 · Grappler、XLA 与 MLIR
9 · 构建、注册与测试
10 · TensorFlow Lite
11 · 持久化与可观测性
如何使用源码锚点
每一章的“源码锚点”优先给出本地相对路径,再给出上游链接。读者可以先用路径定位文件,再用符号名搜索;不要把当前网页中的行号当成稳定 API,因为这份拆解针对的是源码快照而不是永远不变的提交。
范围与取舍
TensorFlow 源码树包含约 2.7 万个文件,覆盖 Python、C++、CUDA、Java、Go、Swift、JavaScript 和多个构建目标。本教程聚焦“核心执行链”与“用户最容易遇到的边界”,不逐个解释每个算子或每个硬件后端。对于硬件特化实现,统一采用 注册 → 选择 → 执行 的方法阅读。