1 TF依赖视图
TF的依赖视图如图1所示,描述了TF的上下游关系链。
TF托管在github平台,有google groups和contributors共同维护。
TF提供了丰富的深度学习相关的API,支持Python和C/C++接口。
TF提供了可视化分析工具Tensorboard,方便分析和调整模型。
TF支持Linux平台,Windows平台,Mac平台,甚至手机移动设备等各种平台。
2 TF系统架构
图2是TF的系统架构,从底向上分为设备管理和通信层、数据操作层、图计算层、API接口层、应用层。其中设备管理和通信层、数据操作层、图计算层是TF的核心层。
底层设备通信层负责网络通信和设备管理。设备管理可以实现TF设备异构的特性,支持CPU、GPU、Mobile等不同设备。网络通信依赖gRPC通信协议实现不同设备间的数据传输和更新。
第二层是Tensor的OpKernels实现。这些OpKernels以Tensor为处理对象,依赖网络通信和设备内存分配,实现了各种Tensor操作或计算。Opkernels不仅包含MatMul等计算操作,还包含Queue等非计算操作。Kernel层可以跑在cpu上也可以跑在gpu上。
第三层是图计算层(Graph),包含本地计算流图和分布式计算流图的实现。Graph模块包含Graph的创建、编译、优化和执行等部分,Graph中每个节点都是OpKernels类型表示。
第四层是API接口层。Tensor C API是对TF功能模块的接口封装,便于其他语言平台调用。
第四层以上是应用层。不同编程语言在应用层通过API接口层调用TF核心功能实现相关实验和应用。
3 TF代码目录组织
图3是TF的代码结构视图,下面将简单介绍TF的目录组织结构。
Tensorflow/core目录包含了TF核心模块代码,后台c++实现部分。
- client: API接口实现文件目录。
- common_runtime: 公共运行库,包含session, executor, threadpool, rendezvous, memory管理, 设备分配算法等。
- distributed_runtime: 分布式执行模块,如rpc session, rpc master, rpc worker, graph manager。
- framework: 包含基础功能模块,如log, memory, tensor
- graph: 计算流图相关操作,如construct, partition, optimize, execute等
- kernels: 核心Op,如matmul, conv2d, argmax, batch_norm等
- lib: 公共基础库,如gif、gtl(google模板库)、hash、histogram等
- ops: 基本ops运算,ops梯度运算,io相关的ops,控制流和数据流操作
- platform: OS系统相关接口文件,如file system, env等
- protobuf: 均为.proto文件,用于数据传输时的结构序列化
- public: API接口头文件目录,用于外部接口调用的API定义,主要是session.h 和tensor_c_api.h。
Tensorflow/stream_executor目录是并行计算框架,由google stream executor团队开发。
Tensorflow/contrib目录存放有其他项目贡献者添加的相关贡献代码。
Tensroflow/python目录是python API客户端脚本。
- 前台Python接口。 该目录下存放了tensorflow使用python编写的相关代码,是和 Tensorflow/core对应的python实现目录。
- 使用python封装了Tensorflow/core 中实现的相关的机器学习算法的调用。
- python方便的编程特性和C++高效的执行效率。
Tensorflow/tensorboard目录是可视化分析工具,不仅可以模型可视化,还可以监控模型参数变化。
third_party目录是TF第三方依赖库。
eigen3: eigen矩阵运算库,TF基础ops调用
gpus: 封装了cuda/cudnn编程库