初识tensorflow架构

初识tensorflow架构

tensorflow是目前非常流行的以一款大规模机器学习框架,其前身为DisBelief。今天跟大家一起学习一下tensorflow的整体架构,作为这个专栏的开端,如下图所示便是整个tensorflow的架构,整个tensorflow可以分为五层:设备管理和通信层、数据操作层、图计算层、API接口层、应用层。

初识tensorflow架构

 

设备管理和通信层

 

  • 网络层:对于task之间的通信,tensorflow主要采用了两种不同的通信协议。基于tcp的gRPC以及基于融合以太网(converged ethernet)的RDMA. 

    gRPC 一开始由 google 开发,是一款语言中立、平台中立、开源的远程过程调用(RPC)系统。在 gRPC 里客户端应用可以像调用本地对象一样直接调用另一台不同的机器上服务端应用的方法,使得您能够更容易地创建分布式应用和服务。与许多 RPC 系统类似,gRPC 也是基于以下理念:定义一个服务,指定其能够被远程调用的方法(包含参数和返回类型)。在服务端实现这个接口,并运行一个 gRPC 服务器来处理客户端调用。在客户端拥有一个存根能够像服务端一样的方法。

    RDMA 是通过网络把资料直接传入计算机的存储区,将数据从一个系统快速移动到远程系统存储器中,而不对操作系统造成任何影响,这样就不需要用到多少计算机的处理功能.它消除了外部存储器复制和文本交换操作,因而能腾出总线空间和CPU 周期用于改进应用系统性能. 通用的做法需由系统先对传入的信息进行分析与标记,然后再存储到正确的区域.

  • 设备管理层:设备管理可以实现TF设备异构的特性,支持CPU、GPU、Mobile等不同设备。

 

数据操作层

Tensor的Op Kernels实现。这些Op Kernels以Tensor为处理对象,依赖网络通信和设备内存分配,实现了各种Tensor操作或计算。在tensorflow中包含了超过200种不同的Op kernels,包含了数学、矩阵处理、控制流、状态控制四种。对于同一Op可能存在多种kernels的实现,因为对于不同的device(gpu\cpu等)存在不同的实现。

图计算层

Distributed Master

  • 在分布式的运行时环境中,Distributed Master根据Session.runFetching参数,从计算图中反向遍历,找到所依赖的最小子图。
  • 然后,Distributed Master负责将该子图再次分裂为多个子图片段,以便在不同的进程和设备上运行这些子图片段。
  • 最后,Distributed Master将这些子图片段派发给Work Service
  • 随后Work Service启动子图片段的执行过程。

Dataflow Executor(worker service)

  • 使用可用的硬件kernel(如cpu,gpu)计划执行接收到的graph块表示的计算部分;
  • 与其他work services相互发送和接收计算结果

API接口层

Tensor C API是对TF功能模块的接口封装,便于其他语言平台调用。

 

工作处理流程

假设有如下tensorflow job如下

初识tensorflow架构
处理流程

 

  1. 用户负责在client端编写tensorflow代码,以此形成一个计算graph并发送给disteributed master。client创建一个session,该会话会将graph的定义通过一个tf.GraphDef的protocol buffer 发送给distributed master。
  2. 其中的"/job:worker/task:0" 和"/job:ps/task:0" ,都是worker services上执行的任务。"PS"表示parameter server负责存储和更新模型的参数其他worker会发送他们迭代优化的参数给PS,这种架构我们会在稍后的文章详细讲解。​​​​​​master将所需要执行的subgraph划分成参数更新和迭代优化两部分

    初识tensorflow架构

  3. master在划分好的subgraph上添加所需要的发送和接收接口,为真实任务分发做准备

    初识tensorflow架构

  4.  处理从master发来的请求;基于接收到的subgraph,规划所需要执行的kernels;与其他task直接进行消息交换

    初识tensorflow架构