TensorFlow 源码拆解

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 函数变成 FuncGraphConcreteFunction,再交给 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 → 附录要定位测试、构建、注册表和版本边界

章节地图

如何使用源码锚点

每一章的“源码锚点”优先给出本地相对路径,再给出上游链接。读者可以先用路径定位文件,再用符号名搜索;不要把当前网页中的行号当成稳定 API,因为这份拆解针对的是源码快照而不是永远不变的提交。

范围与取舍

TensorFlow 源码树包含约 2.7 万个文件,覆盖 Python、C++、CUDA、Java、Go、Swift、JavaScript 和多个构建目标。本教程聚焦“核心执行链”与“用户最容易遇到的边界”,不逐个解释每个算子或每个硬件后端。对于硬件特化实现,统一采用 注册 → 选择 → 执行 的方法阅读。

On this page