[关闭]
@songying 2018-12-04T19:34:12.000000Z 字数 1405 阅读 1861

TensorFlow 架构设计

TensorFlow


核心简介

视图层 功能 组件
视图层 可视化 TensorBoard
工作流层 数据集准备,存储,加载 keras
计算图层 图构造,操作,优化,执行,前向计算, 后向传播 TensorFlow Core
数值计算层 kernel 实现,矩阵乘法,卷积计算 Eigen,cuBLAS,cuDNN
网络层 通信 gRPC, RDMA
设备层 硬件 CPU, GPU, ASIC

架构

Tensorflow 以C API为界,将整个系统分为前端和后端两个子系统:

其中,后端系统可以进一步分解为四层,从底到顶分别为:

  1. 设备层: 可以实现支持CPU, GPU等多种异构的计算设备
  2. 通信层: 基于gRPC实现组件间的数据交换,并能够在支持IB网络的节点间实现RDMA通信。
  3. 计算层: 这些计算以Tensor为处理对象,依赖网络通信和设备内存分配,实现了各种Tensor操作和计算。
  4. 图计算层/运行时层: 提供本地模式和分布式模式,两种模式共享大部分设计和实现。

其中,在运行时层中,包含了对计算图的创建,编排,优化,和执行等部分。

  1. 表达图: 构造计算图,但不执行图
  2. 编排图: 将计算图的节点以最佳的执行方案部署在集群中哥哥计算设备上执行。
  3. 运行图: 按照拓扑排序执行图中的节点,并启动每隔OP的kernel 计算。

Client

Client 是前端系统的主要组成部分,它是一个支持多语言的编程环境。Client 基于 TensorFlow 的编程接口,构造计算图。此时,TensorFlow 并未执行任何的图计算,直至与后台计算引擎建立 Session,并以Session 为桥梁,建立 Client 与 Master 之间的通道,并将 Protobuf 格式的 GraphDef 序列 化后传递给 Master,启动计算图的执行过程。

Master

  1. 在运行时环境中,Client 执行Session.run时,传递整个计算图给后端的Master。此时,计算图是完整的,常称为 Full Graph。
  2. 随后,Master 根据递给它的fetches, feeds参数列表,反向遍历 Full Graph,并按照依赖关系,对其实施剪
    枝,最终计算得到最小的依赖子图,常称为 Client Graph。
  3. 接着,Master 负责将 Client Graph 按照任务的名称分裂 ( SplitByTask ) 为多个 Graph Partition;其中,每个 Worker 对应一个 Graph Partition。
  4. 随后,Master 将 Graph Partition 分别注册到相应的 Worker 上,以便在不同的 Worker 上并发执行这些 Graph Partition。
  5. 最后,Master 将通知所有 Work 启动相应 Graph Partition 的执行过程。

其中,Work 之间可能存在数据依赖关系,Master 并不参与两者之间的数据交换,它们两两之间互相通信,独立地完成交换数据,直至完成所有计算

Worker

对于每一个任务,TensorFlow 都将启动一个 Worker 实例。Worker做三件事:

  1. 处理来自 Master 的请求;
  2. 对注册的 Graph Partition 按照本地计算设备集实施二次分裂 ( SplitByDevice ) , 并通知各个计算设备并发执行各个 Graph Partition;
  3. 按照拓扑排序算法在某个计算设备上执行本地子图,并调度 OP 的 Kernel 实现;
  4. 协同任务之间的数据通信.

Kernel

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注