TensorFlow的系统结构以C API为界,将整个系统分为「前端」和「后端」两个子系统。前端系统扮演了Client的角色,完成计算图的构造,通过转发Protobuf格式的GraphDef
给后端系统的Master,并启动计算图的执行过程。
最终,Master将图进行分裂,通过RegisterGraph
接口,将GraphDef
的子图片段注册到Worker上。因此,GraphDef
是描述计算图的知识模型,整个TensorFlow的计算过程都是围绕GraphDef
所展开的。
领域模型
TensorFlow计算的单位是OP,它表示了某种抽象计算。本章首先阐述NodeDef, OpDef
的元数据模型,然后通过一个简单的例子,讲述元数据的流动过程。
元数据
OP表示某种抽象计算,它拥有0个或多个「输入/输出」,及其0个或多个「属性」。其中,输入/输出以Tensor的形式存在。
在系统实现中,OP的元数据使用Protobuf格式的OpDef
描述,实现前端与后端的数据交换,及其领域模型的统一。
OpDef定义
OpDef定义
OpDef定义包括OP的名字,输入输出列表,属性列表,优化选项等。其中,属性常常用于描述输入/输出的类型,大小,默认值,约束,及其OP的其他特性。
OpDef表示
OP命名
OP通过名字索引,因此必须保证OP的名字全局唯一。按照规范,OP的名字采用「驼峰」的命名风格,而Python前端则使用「小写下划线」的命名风格。后者也常常称为「OP构造器」,也是公开给用户的编程接口(API)。
另外,以下划线开头的OP被系统内部实现保留。例如,_Send, _Recv
,它们用于设备间通信的OP;_Source, _Sink
标识计算图的开始节点和结束节点。
原文链接:
http://www.jianshu.com/p/236335897b30?from=timeline