TensorFlow架构学习
0 - TensorFlow
基于数据流图,节点表示某种抽象计算,边表示节点之间联系的张量。
Tensorflow结构灵活,能够支持各种网络模型,有良好的通用性和扩展性。
1 - 系统概述
TensorFlow以$C\ API$为界限,分为前端系统(提供编程模型,负责构造计算图)以及后端系统(提供运行时环境,负责执行计算图),如下图。
1.1 - 模块Client
Client是一个支持多语言的编程环境,它提供基于计算图的编程模型,方便用户构造各种复杂的计算图,实现各种形式的模型设计和构建。Client通过Session连接后端系统,启动计算图的执行过程。
1.2 - 模块Distributed Master
在分布式运行环境中,Distributed Master从计算图中反向遍历,找到所依赖的最小值图,然后将最小子图分裂成多个子图片段分布到不同的进程和设备上运行,然后将多个子图片段被分派给Work Service,随后Work Service启动子图片段执行过程。
1.3 - 模块Worker Service
对于每一个任务,启动一个Worker Service,按照计算图中的节点依赖关系,根据当前的硬件环境(GPU or CPU),调用$OP$的$Kernel$实现完成$OP$的运算(一种典型的多态实现技术)。并且因为分布式的环境,Worker Service需要负责将$OP$运算的结果发送到其他的Work Service或者从其他的Work Service接受其$OP$运算的结果。
1.4 - Kernel Implements
$Kernel$是$OP$在某种硬件设备的特定实现,其负责执行$OP$计算。TensorFlow运行时包含200多个标准的$OP$(包括数值计算、多维数组操作、控制流、状态管理等)。每一个$OP$都根据设备类型实现了一个优化的$Kernel$,运行时根据本地设备类型,为$OP$选择特定的$Kernel$实现。其中,大多数$Kernel$基于$Eigen::Tensor$实现(一个使用$C++$模板技术,为多核$CPU/GPU$生成高效的并发代码),但同时,TensorFlow也可以直接使用$cuDNN$实现更加高效的$Kernel$。