阅读更多
引用
作者:刘光聪
中兴通讯高级系统架构师,专注机器学习算法,分布式系统架构与优化。
原文:TensorFlow架构与设计
责编:王艺 CSDN AI记者,投稿、寻求报道、深入交流请邮件wangyi@csdn.net或扫描文末二维码添加微信。

TensorFlow是什么?
TensorFlow基于数据流图,用于大规模分布式数值计算的开源框架。节点表示某种抽象的计算,边表示节点之间相互联系的张量。

计算图实例

TensorFlow支持各种异构的平台,支持多CPU/GPU,服务器,移动设备,具有良好的跨平台的特性;TensorFlow架构灵活,能够支持各种网络模型,具有良好的通用性;此外,TensorFlow架构具有良好的可扩展性,对OP的扩展支持,Kernel特化方面表现出众。

TensorFlow最初由Google大脑的研究员和工程师开发出来,用于机器学习和神经网络方面的研究,于2015.10宣布开源,在众多深度学习框架中脱颖而出,在Github上获得了最多的Star量。

本文将阐述TensorFlow的系统架构,帮助读者加深理解TensorFlow的工作机理。
引用
本文假设读者已经了解TensorFlow的基本编程模型,包括计算图, OP, Tensor, Session等基本概念。

系统概述
TensorFlow的系统结构以C API为界,将整个系统分为「前端」和「后端」两个子系统:
  • 前端系统:提供编程模型,负责构造计算图;
  • 后端系统:提供运行时环境,负责执行计算图。

TensorFlow系统架构

如上图所示,重点关注系统中如下4个基本组件,它们是系统分布式运行机制的核心。

Client
Client是前端系统的主要组成部分,它是一个支持多语言的编程环境。它提供基于计算图的编程模型,方便用户构造各种复杂的计算图,实现各种形式的模型设计。

Client通过Session为桥梁,连接TensorFlow后端的「运行时」,并启动计算图的执行过程。

Distributed Master
在分布式的运行时环境中,Distributed Master根据Session.run的Fetching参数,从计算图中反向遍历,找到所依赖的「最小子图」。

然后,Distributed Master负责将该「子图」再次分裂为多个「子图片段」,以便在不同的进程和设备上运行这些「子图片段」。

最后,Distributed Master将这些「子图片段」派发给Work Service;随后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: 负责模型的训练或推理
接下来,我们将进一步抽丝剥茧,逐渐挖掘出TensorFlow计算图的运行机制。

客户端
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节点

插入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的计算。

TensorFlow Core

其中,大多数Kernel基于Eigen::Tensor实现。Eigen::Tensor是一个使用C++模板技术,为多核CPU/GPU生成高效的并发代码。但是,TensorFlow也可以灵活地直接使用cuDNN实现更高效的Kernel。

此外,TensorFlow实现了矢量化技术,使得在移动设备,及其满足高吞吐量,以数据为中心的应用需求,实现更高效的推理。

如果对于复合OP的子计算过程很难表示,或执行效率低下,TensorFlow甚至支持更高效的Kernle实现的注册,其扩展性表现相当优越。

技术栈
最后,按照TensorFlow的软件层次,通过一张表格罗列TensorFlow的技术栈,以便更清晰地对上述内容做一个简单回顾。

TensorFlow技术栈
  • 大小: 373.9 KB
  • 大小: 35.1 KB
  • 大小: 34.8 KB
  • 大小: 49.8 KB
  • 大小: 51.3 KB
  • 大小: 55.1 KB
  • 大小: 68 KB
  • 大小: 69.9 KB
  • 大小: 20.3 KB
  • 大小: 55.1 KB
2
0
评论 共 0 条 请登录后发表评论

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 【干货】图解TensorFlow架构与设计-深度学习世界

    转载:【干货】图解TensorFlow架构与设计-深度学习世界 TensorFlow是什么? TensorFlow基于数据流图,用于大规模分布式数值计算的开源框架。节点表示某种抽象的计算,边表示节点之间相互联系的张量。 计算图实例...

  • TensorFlow架构与设计:OP本质论

    作者:刘光聪 ,中兴通讯高级系统架构师,专注机器学习算法,分布式系统架构与优化。 原文:TensorFlow架构与设计:OP本质论 ... 图解TensorFlow架构与设计 TensorFlow架构与设计:图模块 Tens...

  • TensorFlow架构与设计:会话生命周期

    作者:刘光聪 ,中兴通讯高级系统架构师,专注机器学习算法,分布式系统架构与优化。 原文:TensorFlow架构与设计:会话生命周期 ... 图解TensorFlow架构与设计 TensorFlow架构与设计:图模块 Tensor...

  • TensorFlow架构与设计:图模块

    作者:刘光聪 ,中兴通讯高级系统架构师,专注机器学习算法,分布式系统架构与优化。 原文:TensorFlow架构与设计:... 图解TensorFlow架构与设计 计算图是TensorFlow领域模型的核心。本文通过对计算图领域模型...

  • TensorFlow框架

    一、通过代码了解TensorFlow结构1.1、TensorFlow实现一个加法运算代码1.1.1、原生python加法运算1.1.2、TensorFlow实现加法运算1.1.3、TensorFlow实现加法运算1.2、TensorFlow的Hello World二、TensorFlow架构图三、...

  • 图解TensorFlow--大数据平台技术栈16

    回顾:大数据平台技术栈(ps:可点击查看),今天就来说说其中的TensorFlow!来源:知乎,作者:何之源在学习TensorFlow的过程中,有很多小伙伴反映读取数据...

  • Tensorflow 学习-图的概念

    文章目录TensorFlow 是什么TensorFlow架构Graphtf.constant 本文tensorflow 版本1.12(先介绍1.x的版本,后面再学2.x的版本) TensorFlow 是什么 TensorFlow 是一个开源的、基于 Python 的机器学习框架,它由 Google ...

  • TensorFlow LSTM 注意力机制图解

    TensorFlow LSTM Attention 机制图解深度学习的最新趋势是注意力机制。在接受采访时,现任OpenAI研究主管的Ilya Sutskever提到,注意力机制是最令人兴奋的进步之一,他们在这里进行投入。听起来令人兴奋但是什么是...

  • 大白话5分钟带你走进人工智能-神经网络之tensorflow的前世今生和DAG原理图解

    而 tensorflow是深度学习的重要语言,DAG原理图有助于更好的理解tensorflow的设计思想。 我们的愿景是打造全网 AI 最通俗博客,赠人玫瑰,手有余香,在人工智能前行的路上一起前行。以通俗简介的方式,让每一位热爱....

  • 统计学习方法+Python机器学习实践指南+强化学习精要:核心算法与Tensorflow实现+图解深度学习与神经网络从张量到TensorF实现+人工神经网络理论设计及应用+深度卷积网络:原理与实践

    《图解深度学习与神经网络从张量到TensorFlow实现》PDF,338页,带书签目录,文字可以复制。配套源代码。 下载: https://pan.baidu.com/s/1fjqC3RXb7Czat3zoQ_YOxw 提取码: trdp 学习290张图+110个可执行的...

  • Windows 10环境下TensorFlow(gpu版本)配置教程——[图解] [详细版][零基础]

    目录欢迎使用Markdown编辑器PyCharm:功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants...

  • TensorFlow入门

    作者:清华大学数据科学研究院链接:...人工智能、机器学习和深度学习在介绍TensorFlow(以下简称为TF)之前,我们首先了解一下相关背景。TF是一种机器学习框架,而机器学习经常和人工智能,深度学习联系在一起,那...

  • TensorFlow 官方文档中文版

    https://github.com/jikexueyuanwiki/tensorflow-zh ...TensorFlow 官方文档中文版 R语言在线大数据文档集合View on GitHub 起步 介绍 下载及安装 基本用法

  • 世界最清楚tensorflow入门教程

    在介绍TensorFlow(以下简称为TF)之前,我们首先了解一下相关背景。   TF是一种机器学习框架,而机器学习经常和人工智能,深度学习联系在一起,那么三者到底是什么关系呢?   简单来讲三者可以理解为包含于被...

  • 安装gpu版tensorflow

    linux服务器安装gpu版tensorflow 本人尝试在linux服务器安装gpu版tensorflow,在此记录一下我的安装过程。 1. 确定服务器的gpu型号 1、安装gpu版tensorflow需要先安装cuda,而cuda是nvidia显卡厂商推出的运算平台...

  • TensorFlow数据读取方式:Dataset用法

    在TensorFlow中读取数据一般有两种方法:...一、tensorflow读取机制图解 首先需要思考的一个问题是,什么是数据读取?以图像数据为例,读取数据的过程可以用下图来表示: 假设我们的硬盘中有一个图片数据集0001.jpg

  • setting.xml文件,修改Maven仓库指向至阿里仓

    setting.xml文件,修改Maven仓库指向至阿里仓

  • 基于java的玉安农副产品销售系统的开题报告.docx

    基于java的玉安农副产品销售系统的开题报告

Global site tag (gtag.js) - Google Analytics