一、架构概览

TensorFlow 的系统结构以 C API 为界,将整个系统分为前端和后端两个子系统:

前端系统:提供编程模型,负责构造计算图;

后端系统:提供运行时环境,负责执行计算图,后端系统的设计和实现可以进一步分解为 4 层;

  1. 运行层:分别提供本地模式和分布式模式,并共享大部分设计和实现;

  2. 计算层:由各个 OP 的 Kernel 实现组成;在运行时,Kernel 实现执行 OP 的具
      体数学运算;

  3. 通信层:基于 gRPC 实现组件间的数据交换,并能够在支持 IB 网络的节点间实
      现 RDMA 通信;

  4. 设备层:计算设备是 OP 执行的主要载体,TensorFlow 支持多种异构的计算设备
      类型。

从图操作的角度看待系统行为,TensorFlow 运行时就是完成计算图的构造、编排、及
其运行。

1. 表达图:构造计算图,但不执行图;

2. 编排图:将计算图的节点以最佳的执行方案部署在集群中各个计算设备上执行;

3. 运行图:按照拓扑排序执行图中的节点,并启动每个 OP 的 Kernel 计算。

二、主要模块

Client

前端系统主要组成部分,用于构造计算图,支持多种语言,python 的 API 最为完善。

注意本部仅仅构造计算图,不执行计算图,后面和后台计算引擎建立 Session 后,以之为桥梁,建立 Client 与 Master 的通道,将 Protobuf 格式的 GraphDef 序列化后传给 Master,才能启动图的执行计算过程。

Master

Client 执行 Session.run 时,传递整个计算图给 Master,完整的计算图称为Full Graph,随后, Master 根据 fetches、feeds 参数列表,反向遍历 Full Graph,按照依赖关系,剪枝图,得到最小依赖子图,称为 Client Graph。

接着,Master 负责将 Client Graph 按照任务的名称分裂 ( SplitByTask ) 为多个 GraphPartition;其中,每个 Worker 对应一个 Graph Partition。随后,Master 将 Graph Partition分别注册到相应的 Worker 上,以便在不同的 Worker 上并发执行这些 Graph Partition。最后,Master 将通知所有 Work 启动相应 Graph Partition 的执行过程。

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

Worker

对于每一个任务,TensorFlow 都将启动一个 Worker 实例。Worker 主要负责如下 3 个方面的职责:

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

首先,Worker 收到 Master 发送过来的图执行命令,此时的计算图相对于 Worker 是完整的,也称为 Full Graph,它对应于 Master 的一个 Graph Partition。随后,Worker 根据当前可用的硬件环境,包括 (GPU/CPU) 资源,按照 OP 设备的约束规范,再将图分裂(SplitByDevice)为多个 Graph Partition;其中,每个计算设备对应一个 Graph Partition。
接着,Worker 启动所有的 Graph Partition 的执行。最后,对于每一个计算设备,Worker将按照计算图中节点之间的依赖关系执行拓扑排序算法,并依次调用 OP 的 Kernel 实现,完成 OP 的运算 ( 一种典型的多态实现技术 ) 。

其中,Worker 还要负责将 OP 运算的结果发送到其他的 Worker 上去,或者接受来自其他 Worker 发送给它的运算结果,以便实现 Worker 之间的数据交互。TensorFlow 特化实现了源设备和目标设备间的 Send/Recv。

1. 本地 CPU 与 GPU 之间,使用 cudaMemcpyAsync 实现异步拷贝;
2. 本地 GPU 之间,使用端到端的 DMA 操作,避免主机端 CPU 的拷贝。

对于任务间的通信,TensorFlow 支持多种通信协议。

1. gRPC over TCP;

2. RDMA over Converged Ethernet。

『TensorFlow Internals』笔记_系统架构相关推荐

  1. 架构师接龙 岑文初VS. 杨海朝_系统架构

    淘宝架构师岑文初:淘宝开放平台技术历程_系统架构 上传者:lwqc_yq      我也要"分享赚钱" 2014/9/8 评论(0) ·注册就送50元:温商贷 - 全国首家挂牌P2 ...

  2. 系统分析师和系统架构设计师难度比较_系统架构设计师,马上开课了!

    一年只考一次的系统架构设计师 7月7日通关指南开课 系统架构设计师考试,是2009年11月计算机资格考试新增专业,这个级别属于高级资格考试. 与该考试同级别的还有系统分析师.信息系统项目管理师.系统规 ...

  3. 软件工程结构化建模的方法和工具_系统架构师之——软件开发方法

    不管你是开发人员,还是互联网行业人员,基本上经常看到各种各样的软件相关的图,如什么架构图什么设计图什么模式图甘特图等.很多时候总是傻傻分不清.对此,我们很有必要对系统开发基础知识有认知.对于一名程序员 ...

  4. python开发系统架构设计师_系统架构设计师的职责

    系统架构设计师需要负责技术难题预研与攻关,解决系统中关键架构问题.以下是学习啦小编整理的系统架构设计师的职责. 系统架构设计师的职责1 职责 1.负责系统及相关产品需求分析及架构设计; 2.对产品的整 ...

  5. ruby json转化成对象_系统架构迁移实例:从Ruby到Rust

    前几年随着RoR(Ruby on Rails)框架的流行,很多初创企业选择Ruby和Rails作为基础开发框架,构建和快速迭代了其业务系统.但是随着业务规模的不断壮大,性能问题成了一个突出的问题,所以 ...

  6. python开发系统架构设计师_系统架构设计师在线题库

    该课程包含了三大重磅性课程,学员 可以分三个阶段进行学习,一步一个脚印深入巩固SpringBoot知识体系栈.消息中间件RabbitMQ以及分布式锁的实现方式 1.SpringBoot实战知识体系~从 ...

  7. 读书笔记 计算机系统--系统架构与操作系统的高度集成 第一章概叙

    大二下开始意识到计算机基础的重要性,就去图书馆随缘找了一本机械工业出版社的大部头书籍开始看, 也为了让自己养成总结和记录的习惯,把每一章的内容结构化的写成读书笔记.以后查阅方便. 这本书是集成的,计算 ...

  8. python开发系统架构设计师_系统架构设计师岗位自我评价怎么写

    自我评价(案例一) 云计算,SDN,Openstack,OpenFlow,OVSDB,Netconf,VxLAN,网络虚拟化 C.JAVA,Python,JavaScript IS-IS路由协议,OS ...

  9. 获取字段 命名空间和类_系统架构之命名规范

    数据库设计规范 表设计规范 表名全部小写,单词间通过'_'间隔 主键命名为'id',类型为Long,长度为20位,`非自增` 2. 外键及索引命名规范 唯一索引:ux_表名_索引字段.如:ux_res ...

  10. python 网页版笔记_系统学习下python网络爬虫 笔记一

    系统学习下python网络爬虫的知识 1.爬虫的定义 Web Spider,把互联网定义为一个蜘蛛网,网络蜘蛛通过网页的链接地址来寻找网页. 具体过程:从网站的某一个网页(通常是首页)开始,读取网页的 ...

最新文章

  1. 在Powerpoint中插入Flash的方法
  2. OpenGL中glTranslate*(),glRotation*(),glScale*()函数的用法(*是参数数据类型)
  3. Android 自动补全提示输入AutoCompleteTextView、 MultiAutoCompleteTextView
  4. OpenCV4每日一练day9:单目相机标定
  5. 查看Json的结构及内容:JsonViewerPackage
  6. Charles的iOS应用程序
  7. 表情识别(三)--基于几何与Gabor小波的多层感知
  8. ideaIU-2020.3.2安装教程以及导入第一个spring boot项目运行和环境配置教程
  9. 在线字节转换工具G,M,Byte
  10. 关于tableau的介绍
  11. 【上班摸鱼系列】文字选择类游戏:《职员默示录 - 启》末日丧尸爆发,你,是什么下场!?
  12. Vue 中获取 package.json 信息
  13. 长沙好吃的地方?这个好吃的地方你可能真的没来过
  14. qq音乐网页版下载歌曲
  15. 【技巧】只改变word背景颜色,并保持其他软件背景颜色不变
  16. 02《区块链财富指北》私钥篇(2):百行Python代码演示一私钥生成多公链公钥原理。
  17. 虚树 virtual-tree
  18. 冷知识:以前飞机上不能玩手机是因为山寨机太多?
  19. msclass 文字滚动_【JS特效】不间断滚动效果通用类
  20. python 拉普拉斯锐化_OpenCV-python 实现基于拉普拉斯算子的图像锐化

热门文章

  1. mysql 对日期的处理函数_MySQL日期处理函数
  2. kali linux 桌面消失_Kali安装好后,需要修改的一些常用配置
  3. ubuntu安装sogou输入法、及安装完成后的配置
  4. vue.js2.0 新手开发_vue.js2.0实战(1):搭建开发环境及构建项目
  5. linux下将多个文件去除文件头合并_使用 PDF Mix Tool 执行常见的 PDF 编辑任务 | Linux 中国...
  6. 工具:sql server profiler(分析器)
  7. 为何HDFS是大数据分析的软肋
  8. 用PHP ping 一个 IP
  9. oracle 密码忘记 找回密码
  10. SCVMM 2012 R2---添加Hyper-V虚拟机