TensorFlow架构与设计:概述
TensorFlow是什么?
TensorFlow
基于数据流图,用于大规模分布式数值计算的开源框架。节点表示某种抽象的计算,边表示节点之间相互联系的张量。
TensorFlow
支持各种异构的平台,支持多CPU/GPU
,服务器,移动设备,具有良好的跨平台的特性;TensorFlow
架构灵活,能够支持各种网络模型,具有良好的通用性;此外,TensorFlow
架构具有良好的可扩展性,对OP
的扩展支持,Kernel
特化方面表现出众。
系统概述
TensorFlow
的系统结构以C API
为界,将整个系统分为「前端」和「后端」两个子系统:
- 前端系统:提供编程模型,负责构造计算图;
- 后端系统:提供运行时环境,负责执行计算图。
如上图所示,重点关注系统中如下4个基本组件,它们是系统分布式运行机制的核心。
Client
Client
是前端系统的主要组成部分,它是一个支持多语言的编程环境。它提供基于计算图的编程模型,方便用户构造各种复杂的计算图,实现各种形式的模型设计。
Client
通过Session
为桥梁,连接TensorFlow
后端的「运行时」,并启动计算图的执行过程。
Distributed Master
在分布式的运行时环境中,Distributed Master
根据Session.run
的Fetching(需要的到的参数,例a=1+2,a就是feching)
参数,从计算图中反向遍历,找到所依赖的「最小子图」。
然后,Distributed Master
负责将该「子图」再次分裂为多个「子图片段」(有多少个Feching参数,就分裂为多少个子图),以便在不同的进程和设备上运行这些「子图片段」。
最后,Distributed Master
将这些「子图片段」派发给Work Service,有多少个子图,就有多少个WorkService
;随后Work Service
启动「子图片段」的执行过程。
Worker Service
对于每以个任务,TensorFlow
都将启动一个Worker Service
。Worker Service
将按照计算图中节点之间的依赖关系,根据当前的可用的硬件环境(GPU/CPU),调用OP
的Kernel
实现完成OP
的运算(一种典型的多态实现技术)。
另外,Worker Service
还要负责将OP
运算的结果发送到其他的Work Service
;或者接受来自其他Worker Service
发送给它的OP
运算的结果。
Kernel Implements
Kernel
是OP
在某种硬件设备的特定实现,它负责执行OP
的运算。
组件交互
如上图所示,假设存在两个任务:
/job:ps/task:0
: 负责模型参数的存储和更新/job:worker/task:0
: 负责模型的训练或推理
客户端
Client
基于TensorFlow
的编程接口,构造计算图。目前,TensorFlow
主流支持Python
和C++
的编程接口,并对其他编程语言接口的支持日益完善。
此时,TensorFlow
并未执行任何计算。直至建立Session
会话,并以Session
为桥梁,建立Client
与后端运行时的通道,将Protobuf
格式的GraphDef
发送至Distributed Master
。
也就是说,当Client
对OP
结果进行求值时,将触发Distributed Master
的计算图的执行过程。
如下图所示,Client
构建了一个简单计算图。它首先将w
与x
进行矩阵相乘,再与截距b
按位相加,最后更新至s
。
Distributed Master
在分布式的运行时环境中,Distributed Master
根据Session.run
的Fetching
参数,从计算图中反向遍历,找到所依赖的最小子图。
然后Distributed Master
负责将该子图再次分裂为多个「子图片段」,以便在不同的进程和设备上运行这些「子图片段」。
最后,Distributed Master
将这些图片段派发给Work Service
。随后Work Service
启动「本地子图」的执行过程。
Distributed Master
将会缓存「子图片段」,以便后续执行过程重复使用这些「子图片段」,避免重复计算。
如上图所示,Distributed Master
开始执行计算子图。在执行之前,Distributed Master
会实施一系列优化技术,例如「公共表达式消除」,「常量折叠」等。随后,Distributed Master
负责任务集的协同,执行优化后的计算子图。
子图片段
如上图所示,存在一种合理的「子图片段」划分算法。Distributed Master
将模型参数相关的OP
进行分组,并放置在PS
任务上。其他OP
则划分为另外一组,放置在Worker
任务上执行。
SEND/RECV节点
如上图所示,如果计算图的边被任务节点分割,Distributed Master
将负责将该边进行分裂,在两个分布式任务之间插入SEND
和RECV
节点,实现数据的传递。
随后,Distributed Master
将「子图片段」派发给相应的任务中执行,在Worker Service
成为「本地子图」,它负责执行该子图的上的OP
。
Worker Service
对于每个任务,都将存在相应的Worker Service
,它主要负责如下3个方面的职责:
- 处理来自
Master
的请求; - 调度
OP
的Kernel
实现,执行本地子图; - 协同任务之间的数据通信。
Worker Service
派发OP
到本地设备,执行Kernel
的特定实现。它将尽最大可能地利用多CPU/GPU
的处理能力,并发地执行Kernel
实现。
另外,TensorFlow
根据设备类型,对于设备间的SEND/RECV
节点进行特化实现:
- 使用
cudaMemcpyAsync
的API实现本地CPU
与GPU
设备的数据传输; - 对于本地的
GPU
之间则使用端到端的DMA
,避免了跨host CPU
昂贵的拷贝过程。
对于任务之间的数据传递,TensorFlow
支持多协议,主要包括:
- gRPC over TCP
- RDMA over Converged Ethernet
Kernel Implements
TensorFlow
的运行时包含200
多个标准的OP
,包括数值计算,多维数组操作,控制流,状态管理等。每一个OP
根据设备类型都会存在一个优化了的Kernel
实现。在运行时,运行时根据本地设备的类型,为OP
选择特定的Kernel
实现,完成该OP
的计算。

其中,大多数Kernel
基于Eigen::Tensor
实现。Eigen::Tensor
是一个使用C++
模板技术,为多核CPU/GPU
生成高效的并发代码。但是,TensorFlow
也可以灵活地直接使用cuDNN
实现更高效的Kernel
。
此外,TensorFlow
实现了矢量化技术,使得在移动设备,及其满足高吞吐量,以数据为中心的应用需求,实现更高效的推理。
如果对于复合OP
的子计算过程很难表示,或执行效率低下,TensorFlow
甚至支持更高效的Kernle
实现的注册,其扩展性表现相当优越。
技术栈
最后,按照TensorFlow
的软件层次,通过一张表格罗列TensorFlow
的技术栈,以便更清晰地对上述内容做一个简单回顾。
TensorFlow架构与设计:概述的更多相关文章
- Android存储系统的架构与设计
一.概述 本文讲述Android存储系统的架构与设计,基于Android 6.0的源码,涉及到最为核心的便是MountService和Vold这两个模块以及之间的交互.为了缩减篇幅,只展示部分核心代码 ...
- Java互联网架构-直播互动平台高并发分布式架构应用设计
概述 网页HTML 静态化: 其实大家都知道网页静态化,效率最高,消耗最小的就是纯静态化的 html 页面,所以我们尽可能使我们的网站上的页面采用静态页面来实现,这个最简单的方法其实也是最有效的方法, ...
- Magento 架构基础知识概述
Megento 架构基础知识概述 Magento整合了面向对象的基于PHP的应用程序的核心架构原则.这些一般原则的综合讨论既有在线的,也有印刷形式.以下讨论主要关注这些主题如何直接应用于Magento ...
- InfoQ 趋势报告:架构和设计领域技术演变详解
https://www.infoq.cn/article/R7lWXd0R4VFf3E0bB*38 本文概述了我们对当前“架构和设计”领域的看法,这个领域侧重于基础设施模式.技术框架模式的实现,以及软 ...
- TensorFlow笔记-01-开篇概述
人工智能实践:TensorFlow笔记-01-开篇概述 从今天开始,从零开始学习TensorFlow,有相同兴趣的同志,可以互相学习笔记,本篇是开篇介绍 Tensorflow,已经人工智能领域的一些名 ...
- Java生鲜电商平台-Java后端生成Token架构与设计详解
Java生鲜电商平台-Java后端生成Token架构与设计详解 目的:Java开源生鲜电商平台-Java后端生成Token目的是为了用于校验客户端,防止重复提交. 技术选型:用开源的JWT架构. 1. ...
- 阿里P8架构师深度概述分布式架构
简介 作为一名架构师,我们要专业,要能看懂代码,及时光着臂膀去机房,也能独挡一面!及时同事搞不定问题,或者撂挑子,你也能给老大一个坚定的眼神:不怕,有我在!还能在会议室上滔滔不绝,如若无人,让不懂技术 ...
- 搭建一套自己实用的.net架构(1)【概述】
入园很久,一直默默的潜水,近来得空想写点什么. 思前想后,那就把自己平时没事干自己摘抄.引用.瞎写的一些东西写出来.帮助自己巩固一下,顺便请高手们指点一二. 我本人很懒 ,一些代码就是直接复制别人的劳 ...
- 基于Flume的美团日志收集系统(一)架构和设计
美团的日志收集系统负责美团的所有业务日志的收集,并分别给Hadoop平台提供离线数据和Storm平台提供实时数据流.美团的日志收集系统基于Flume设计和搭建而成. <基于Flume的美团日志收 ...
随机推荐
- Github的注册经历
姓名 韦军 学号 1413042023 班级 网络141 兴趣爱好 读书 上网 在注册Github时,先去网上下载了一个Github的app,打开一看全是英文,还是看懂了一些,点击开始注册,在注册时还 ...
- Postgres 主从配置(五)
PostgreSQL 9.4 新增的一个特性, replication slot, 1. 可以被流复制的sender节点用于自动识别它xlog中的数据在下面的standby中是否还需要(例如, st ...
- PostgreSQL 表空间
PostgreSQL 表空间 一 介绍使用表空间可以将不同的表放到不同的存储介质或不同的文件系统下,实际上是为表指定一个存储的目录.创建数据库,表,索引时可以指定表空间,将数据库,表,索引放到指定的目 ...
- 更改JupyterNotebook默认文件路径 行之有效!
在安装了Anaconda以后浏览器默认打开的是C盘用户目录,平时不想把一些文件.代码放在C盘尤其是用户目录下,所以考虑将默认路径改掉,尝试了网上的几种方法,终于找到了一种可行有效的. 1.找到jupy ...
- SQL Server中将多行数据拼接为一行数据并且有特殊字符
有表结构如下: 这时,要求显示所有学生的爱好的结果集,代码如下: ) as hobby FROM ( SELECT name, (SELECT hobby+',' FROM student WHERE ...
- sharepoint 2013工具
caml designer 2013 生成caml工具 http://camlbuilder.codeplex.com/ 设计工具 CamlDesigner2013 爬网工具 HtmlAgilityP ...
- Message Loop 原理及应用
此文已由作者王荣涛授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. Message loop,即消息循环,在不同系统或者机制下叫法也不尽相同,有被叫做event loop,也有 ...
- Android ScrollView 去掉 scrollbar 和 阴影
1. 在 layout 里: android:scrollbars="none" android:overScrollMode="never" 2. 代码里 / ...
- Java50道经典习题-程序8 输入数字求和
题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字.例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制. 分析:关键是计算出每一项的值. i ...
- P4016 负载平衡问题 网络流
P4016 负载平衡问题 题目描述 GG 公司有 nn 个沿铁路运输线环形排列的仓库,每个仓库存储的货物数量不等.如何用最少搬运量可以使 nn个仓库的库存数量相同.搬运货物时,只能在相邻的仓库之间搬运 ...