本文共 1984 字,大约阅读时间需要 6 分钟。
转自工程一:tensorflow/tensorflow
下图是TF的系统架构,从底向上分为设备管理和通信层、数据操作层、图计算层、API接口层、应用层。其中设备管理和通信层、数据操作层、图计算层是TF的核心层。
第一层是底层设备通信层,负责网络通信和设备管理。设备管理可以实现TF设备异构的特性,支持CPU、GPU、Mobile等不同设备。网络通信依赖gRPC通信协议实现不同设备间的数据传输和更新。 第二层是Tensor的OpKernels实现。这些OpKernels以Tensor为处理对象,依赖网络通信和设备内存分配,实现了各种Tensor操作或计算。Opkernels不仅包含MatMul等计算操作,还包含Queue等非计算操作,这些将在第5章Kernels模块详细介绍。 第三层是图计算层(Graph),包含本地计算流图和分布式计算流图的实现。Graph模块包含Graph的创建、编译、优化和执行等部分,Graph中每个节点都是OpKernels类型表示。关于图计算将在第6章Graph模块详细介绍。 第四层是API接口层。Tensor C API是对TF功能模块的接口封装,便于其他语言平台调用。
第四层以上是应用层。不同编程语言在应用层通过API接口层调用TF核心功能实现相关实验和应用。
目录tensorflow 该目录下存放着tensorflow的核心代码
目录google 该目录下存放着protobuf的相关代码,该目录通过在git clone 命令后添加 —recurse-submodules 可以下载得到。protobuf主要用于tensorflow中的各模块通信。(这里没有下载)
目录third_party、tools、util 目前这三个目录中的文件较少,还未看出其相关作用,可能会在接下来的项目发展中变得更加完善。
文件configure 该文件用于配置tensorflow的安装环境,
其中tensorflow为主要模块。下面着重介绍tensorflow模块的结构。
cc目录有一个train的样例
core是c++编写的主要目录。
example目录下有andord系统的一个示例, 以及一个图像标注的例子
g3doc顾名思义,是针对c++、python的版本的代码文档
go目录是go实现
java目录是java实现。
python 目录下 是python的实现,故名思议应该和cc目录对应,然而并没有,实际上是和”core”目录对应的python实现。
stream_executor目录,流处理,看里面还有dnn之类
tensorboard app、web支持,以及脚本支持。
tools 一些工具杂项,pip。
下的文件结构如图:
目录common_runtime 该目录下包含了tensorflow中session执行的通用逻辑流程。
其中包括对内存,驱动等控制(约200个文件)
目录distributed_runtime tensorflow 与分布式相关的执行逻辑。(108个文件)
目录framework 该目录下对tensorflow进行计算过程中的通用组件进行了定义和实现。(约180个文件)
目录graph tensorflow图相关操作的逻辑。由于tensorflow中的数据计算本质上是一个图状结构的计算流程,该过程中存在将图进行切分并且并行化执行的可能性。该目录下的代码逻辑即为对图数据进行结构化定义并进行拆分的相关内容。(59个文件)
目录kernels 对tensorflow中各个单步操作的具体实现。 该目录中共有约470个文件,其中414个文件和op相关,该目录下包含了大量的tensorflow中单步操作的实现方式。(如Variable()) ( 500+文件)
目录util/lib 一些公用的调用方法。(1000+文件)
目录ops 对kernel/ 下的op进行注册和对外声明。(约80文件)
目录protobuf tensorflow下各个模块间进行数据传输的数据结构定义,通过proto进行配置实现。(20文件)
目录public tensorflow对外api的定义和实现 (3个文件)
目录user_ops 用户可进行编写自己的op并添加到该目录。(1个文件)
目录结构如下:
这是我们社群研习tensorflow源码的第一节文章,想参加进来的朋友,可以关注我们头条号。给我留言,加入我们社群。
转载地址:http://zukmi.baihongyu.com/