TensorFlow通用工程架构深入分析与解析

TensorFlow系统架构

TensorFlow设计十分精巧,基于分层和模块化的设计思想进行开发的。框架如下图

tensorflow通用工程架构 tensorflow架构分析_ViewUI


整个框架以C API为界,分为前端和后端两大部分。

  1. 前端:提供编程模型,多语言的接口支持,比如Python Java C++等。通过C API建立前后端的连接,后面详细讲解。
  2. 后端:提供运行环境,完成计算图的执行。进一步分为4层
     
  3. 运行时:分为分布式运行时和本地运行时,负责计算图的接收,构造,编排等。
  4. 计算层:提供各op算子的内核实现,例如conv2d, relu等
  5. 通信层:实现组件间数据通信,基于GRPC和RDMA两种通信方式
  6. 设备层:提供多种异构设备的支持,如CPU GPU TPU FPGA等



模型构造和执行流程

TensorFlow的一大特点是,图的构造和执行相分离。用户添加完算子,构建好整图后,才开始进行训练和执行,也就是图的执行。大体流程如下

1. 图构建:用户在client中基于TensorFlow的多语言编程接口,添加算子,完成计算图的构造。

2. 图传递:client开启session,通过它建立和master之间的连接。执行session.run()时,将构造好的graph序列化为graphDef后,以protobuf的格式传递给master

3.图剪枝:master根据session.run()传递的fetches和feeds列表,反向遍历全图full graph,实施剪枝,得到最小依赖子图

4. 图分裂:master将最小子图分裂为多个Graph Partition,并注册到多个worker上。一个worker对应一个Graph Partition。

5. 图二次分裂:worker根据当前可用硬件资源,如CPU GPU,将Graph Partition按照op算子设备约束规范(例如tf.device(’/cpu:0’),二次分裂到不同设备上。每个计算设备对应一个Graph Partition。

6. 图运行:对于每一个计算设备,worker依照op在kernel中的实现,完成op的运算。设备间数据通信可以使用send/recv节点,而worker间通信,则使用GRPC或RDMA协议。

tensorflow通用工程架构 tensorflow架构分析_c/c++_02

前端多语言实现 - swig包装器

swig是个帮助使用C或者C++编写的软件能与其它各种高级编程语言进行嵌入联接的开发工具。在TensorFlow使用bazel编译时,swig会生成两个wrapper文件

  1. pywrap_tensorflow_internal.py:对接上层Python调用
  2. pywrap_tensorflow_internal.cc:对接底层C API调用。

pywrap_tensorflow_internal.py 模块被导入时,会加载_pywrap_tensorflow_internal.so动态链接库,它里面包含了所有运行时接口的符号。而pywrap_tensorflow_internal.cc中,则注册了一个函数符号表,实现Python接口和C接口的映射。运行时,就可以通过映射表,找到Python接口在C层的实现了。

tensorflow通用工程架构 tensorflow架构分析_tensorflow通用工程架构_03

tensorflow 源码结构

TensorFlow源码基本也是按照框架分层来组织文件的。如下

tensorflow通用工程架构 tensorflow架构分析_tensorflow通用工程架构_04

其中core为tf的核心,它的源码结构如下

tensorflow通用工程架构 tensorflow架构分析_ViewUI_05


免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空