芯片架构变革,戴德曼翻译

你想让自己的手机变成可以随时随地执行人工智能计算的神器吗?一种新型图形处理器芯片让这个梦想走进了现实。据麻省理工学院官网消息,在本周的国际固态电路会议上,该校科研人员展示了一种新型的专门用于运行神经网络的GPU芯片。 GPU芯片是一种专门用于图像计算的芯片,在带有屏幕的计算机设备上十分常见,神经网络大都在GPU上运行。MIT研发的这种新型芯片被命名为Eyeriss,它的运行效率是普通手机GPU的10倍,因此可以直接在移动设备上执行强大的人工智能算法,而不需要将数据上传到互联网进行处理。 手机GPU一般拥有200多个核或者处理单元。Eyeriss高效率运行的关键之处在于将处理单元与内存条交换数据的频率降到最低,因为这一过程会消耗大量时间和能量。普通GPU芯片一般是很多处理单元共享一个内存条,而Eyeriss芯片每个处理单元都有自己的内存,而且它可以在向处理单元发送数据前对数据进行压缩。 另一方面,Eyeriss的每个处理单元都可以直接与相邻的处理单元进行交流,这样如果它们需要共享数据的话,不需要将数据传送到主内存。这对卷积神经网络而言非常重要。CNN算是深度神经网络的前身,与近年来一些人工智能技术的重大进展不无关系。 Eyeriss芯片高效率运行的另一个秘诀在于,它有一个可以向各个处理单元分配任务的特殊电路。处理单元的局部内存不仅会存储它所模拟的网络节点所处理的信息,而且还会存储它对网络节点进行描述的信息。分配电路可以根据不同的神经网络类型进行重新配置,自动在处理单元之间分配多种数据,并且可以使每个处理单元在从主内存获得数据之前最大化地执行数据运算。 在会议上,研究人员利用Eyeriss芯片运行了一种神经网络并进行了图像识别任务,这是神经网络计算首次搭载手机芯片进行展示。

郑文盼      16020150021

图片 1

三, Tensorflow编程模型

Neil Zhu,简书ID Not_GOD,University AI 创始人 & Chief Scientist,致力于推进世界人工智能化进程。制定并实施 UAI 中长期增长战略和目标,带领团队快速成长为人工智能领域最专业的力量。作为行业领导者,他和UAI一起在2014年创建了TASA(中国最早的人工智能社团), DL Center(深度学习知识中心全球价值网络),AI growth等,为中国的人工智能人才建设输送了大量的血液和养分。此外,他还参与或者举办过各类国际性的人工智能峰会和活动,产生了巨大的影响力,书写了60万字的人工智能精品技术内容,生产翻译了全球第一本深度学习入门书《神经网络与深度学习》,生产的内容被大量的专业垂直公众号和媒体转载与连载。曾经受邀为国内顶尖大学制定人工智能学习规划和教授人工智能前沿课程,均受学生和老师好评。

TensorFlow 从名称上看就是两个部分——张量 tensor 和流 flow。非常形象的组合。众所周知,矩阵已经成为机器学习中的基础单元,若干的针对矩阵的计算优化使得现如今的机器学习成为可能。而一些矩阵的方法也是一些重要的机器学习算法的基础。张量 就是矩阵概念的推广,其表示更多维度的矩阵。而计算流是一种抽象过程,在如今的深度学习领域,这种一层层地计算可以很形象地看做是张量在计算模型上的流动。而这里的流可以看做是更加一般的计算过程,可以在不同的层级间跨越式流动。

【嵌牛导读】指数增长的数据量和逐渐陷入瓶颈的芯片性能,二者的不匹配会带来芯片架构的根本性改变。而这种改变,可能将会是颠覆性的改变。

还记得年初小米澎湃芯片发布会吗,一时间“中国芯”情愫让大众大大感动了一把。

在这一章,我们将深度讨论Tensorflow的计算范式。开始,我们会研究Tensorflow的基本架构和计算原理,解释机器学习算法如何在Tensorflow里面使用数据流图语言表征。接下来,我们研究Tensorflow的运行模型,也就是Tensorflow如何把Tensorflow图转化为运行状态。然后,我们调查Tensorflow内在的,针对软硬件的不同算法优化。最后,我们列举一系列算法扩展,以支撑用户在Tensorflow对于计算模型,逻辑模型训练。

本文作者均来自 Google Research:Martín Abadi, Ashish Agarwal, Paul Barham, Eugene Brevdo, Zhifeng Chen, Craig Citro, Greg S. Corrado, Andy Davis, Jeffrey Dean, Matthieu Devin, Sanjay Ghemawat, Ian Goodfellow, Andrew Harp, Geoffrey Irving, Michael Isard, Yangqing Jia, Rafal Jozefowicz, Lukasz Kaiser, Manjunath Kudlur, Josh Levenberg, Dan Mane, Rajat Monga, Sherry Moore, Derek Murray, Chris Olah, Mike Schuster, Jonathon Shlens, Benoit Steiner, Ilya Sutskever, Kunal Talwar, Paul Tucker, Vincent Vanhoucke, Vijay Vasudevan, Fernanda Viegas, Oriol Vinyals, Pete Warden, Martin Wattenberg, Martin Wicke, Yuan Yu, and Xiaoqiang Zheng

【嵌牛鼻子】芯片架构,人工智能

当人们还在陶醉移动芯片技术的国产化突飞猛进的时,新一代AI芯片已经开始来势汹汹。而这浪声势,早已有中国公司的身影。

A. 计算图架构

TensorFlow [1] 是一个表达机器学习算法的接口,并且是执行算法的实现框架。使用 TensorFlow 表示的计算可以在众多异构的系统上方便地移植,从移动设别如手机或者平板电脑到成千的GPU计算集群上都可以执行。该系统灵活,可以被用来表示很多的算法包括,深度神经网络的训练和推断算法,也已经被用作科研和应用机器学习系统在若干的计算机科学领域或者其他领域中,例如语言识别、计算机视觉、机器人、信息检索、自然语言理解、地理信息抽取和计算药物发现。该论文描述了 TensorFlow 的接口和我们在 Google 构建的结构实现。TensorFlow API 和参考实现都已经作为开源项目按照 Apache 2.0 协议在 2015 年 11 月释出,可以在 �这里 查看。

【嵌牛提问】芯片怎样改变才能使性能适应日益增长的需求?

9月2号,华为在2017年德国柏林国际消费电子产品展览会上发布麒麟970芯片,定位为华为首款人工智能AI移动计算平台。这款芯片将在华为手机Mate 10上启用。

在Tensorflow里面,机器学习算法被表证为计算图。计算图或者数据流图是一种有向图。有向图的顶点或者节点代表运算过程,有向图的边代表运算过程之间的数据流。如下图所示,先看左边,输出变量z是输入x和y的二值运算的结果,那么画两条分别从x和y向z的有向边,并且在z上标明运算加号。一个更加完整和复杂的数据流图在右边。下面,对于数据流图里面的元素(operation

Google 大脑项目开始于 2011 年,目的是探索在科研和 Google 的产品中超大规模深度神经网络的使用。作为这个项目的早期工作,我们构建了 DistBelief ——第一代的可扩展分布式训练和推断系统 [14],这个系统工作得很不错。我们和其他 Google 的同事使用 DistBelief 进行了广泛的研究包括非监督学习[31]、语言表示[35,52]、图像分类模型和目标检测[16,48]、视频分类[27]、语音识别[56,21,20]、序列预测[47]、Go 的移动选择[34]、�行人检测[2]、强化学习[38] 等等。另外,和 Google Brain 团队合作中,超过 50 个 Google 内部的团队和其他 Alphabet 公司也已经部署了使用 DistBelief 的深度神经网络在众多产品中,包括 Google Search[11]、广告产品、语音识别系统[50,6,46]、Google Photos[43]、Google Maps 和 街景[19]、Google 翻译[18]、Youtube 和很多其他的产品。

【嵌牛正文】

图片 2

  • 算子,tensor - 张量,variable - 变量和session - 过程)进行更为详尽的讨论。

基于我们使用 DistBelief 的经验和对于期望用来训练和使用神经网络的系统特性和需求更加完备地理解,我们构建了 TensorFlow——第二代大规模机器学习模型的实现和部署的系统。TensorFlow 使用通过类似数据流模型的计算,将这些计算映射到不同的硬件平台例如使用包含一个或者多个 GPU 显卡的装有 Android 和 iOS 的单个机器上进行推断,到运行在数百台包含数千个 GPU 的大规模系统训练推断。拥有一个单一的系统可以扩展分布到众多的平台上可以大大简化真实场景中机器学习系统的使用,正如我们在用分离的系统进行大规模训练和小规模的部署,会产生巨大的维护代价和较差的抽象效果。TensorFlow 的计算被表示为含状态的数据流图,我们聚焦在让这个系统足够灵活能够快速地实验研究中产生的新模型,并同时充分地提升产品级训练的性能和部署机器学习模型健壮性。为扩展神经网络训练搞更大的部署环境,TensorFlow 允许 client 简单地表达不同类型的并行通过复制和并行执行一个核心模型数据流图,依赖不同计算设备合作更新一个共享的参数或者其他的状态。 对计算描述的微妙变动可以使用较低的代价来达到和尝试很多不同的并行的方法。一些 TensorFlow 的用途借助参数更新的一致性来实现灵活性,我们可以在一些更大的部署环境中轻易表达和利用这些同步上的松弛。对比 DistBelief,TensorFlow 的编程模型更加灵活,性能也更好,支持在大规模的异构硬件平台上训练和使用很多的模型。


一晚上的时间,这条消息爆燃网络。大众对芯片的认识,开始准备接受一个新概念:人工智能(AI)芯片。

1)Operations(算子):使用图来表示一个算法的主要好处不仅仅是直观展示计算模型之间的依赖和关联,而且能够更普适的定义运算节点。在Tensorflow里,node(节点)代表着算子,也就是一种运算,更精确来说,代表了输入的数据在有向图上,如何流经这个节点【8】。一个算子可以是0到多个输入,也能产生0到多个输出。因此,一个算子代表一个数学等式,一个变量,一个常量,一个有向控制流,一个文件I/O操作或者甚至是一个网络通讯连接端口。在算子可以表达为一个常量或者变量不是像表达成一个函数那样直观,但是一个常量可以被当成一个没有输入,而且输出恒定的运算。相似的情况也适用于表征一个变量,也就是没有输入,输出当前状态或者当前变量的值。

DistBelief 的内部用户已经切换成 TensorFlow 了。这些客户依赖 TensorFlow 来研究和产品,执行诸如在移动电话计算机视觉模型的推断到使用数百台机器进行千亿级样本的千亿级参数的深度神经网络的训练[11,47,48,18,53,41]。尽管这些应用集中在机器学习和深度神经网络上,我们希望 TensorFlow 的抽象可以用在其他的领域中,例如其他的机器学习算法或者可能其他类型的数值计算。我们按照 Apache 2.0 协议在 2015 年 11 月开源了 TensorFlow API,可以在 www.tensorflow.org 查看。

人工智能倒逼芯片底层的真正变革

上一篇文章《从机器人悠悠,来扒一扒人工智能的历史》扒过人工智能的发展历史,可知这一轮人工智能的革命是深度学习系统派。那么当前诞生的AI芯片,顾名思义就是能满足深度学习计算能力的电子集成处理器。

        任何算子必须要严格的定义和实现。在论文【8】的研究,任何一种实现被当作一个算子的核函数。一种特定的核函数的具体编程都是针对某种硬件,比如CPU或者GPU的运算。

本文下面的部分更加细致地描述了 TensorFlow。第二节介绍编程模型和 TensorFlow 接口的基本概念,第三节介绍单机和分布式的实现 。第四节给出了基本编程模型的扩展,第五节介绍了一些基本实现的优化方法。第六节给出了一些使用 TensorFlow 的实验结果,第七节描述了一些使用 TensorFlow 编程的 idiom,第九节则是一些在 TensorFlow 核心外围的工具。第十节和第十一节分别讨论了未来和相关的工作,最后一节给出了总结性想法。

研究人类的科技发展史,发现科技的进步速度呈现指数型加速态势。尤其在1950年以后进入芯片时代,摩尔定律推动下的每18个月“芯片晶体管同比例缩小一半”带来的性能提升以倍数计。每一次加速的过程推动,都引发了产业的深层次变革,带动从底层到系统的阶跃。我们本篇报告将着重从底层芯片角度出发,探讨人工智能芯片带来的深层次变革。

那么这个AI芯片到底有什么革命性呢?先来搞明白深度学习的需求点。

2)Tensors(张量):在Tensorflow里面,代表数据流从一个算子流向另一个算子的边称之为张量。一个张量是一个具有固定类型同类数据的多维集合。张量维度也称为rank(阶)。张量的形状(shape)描述张量大小的元祖(tuple)。比如,对于每一个维度的元素个数。从数学的观点来看,张量是一个二维矩阵加一个表达张量阶的一维向量或者标量的生成物。

TensorFlow 的计算由一个有向图描述,这个图中由一个节点集合组成。该图表达了数据流计算,作出了一些类型的节点保持和更新持久状态和让分支及循环控制结构类似于 Naiad 的行为方式的扩展。客户一般都会使用 TensorFlow 支持的前端语言(C 或者Python)构建一个计算图。在图 1 中展示了一段样例使用 Python 构建并执行了一个 TensorFlow 的计算图,结构计算图在图 2 中展示。

图片 3

深度学习作为新一代计算模式,本质上是多层次的人工神经网络算法,即模仿人脑的神经网络,从最基本的单元上模拟了人类大脑的运行机制。由于人类大脑的运行机制与计算机有着鲜明的不同,深度学习与传统计算模式有非常大的差别。

        从计算图的观点来看,张量是表征通向输出的算子的符号把手(symbolic handle)。在内存里,张量本身并不包含和存储数据,但是它提供了张量代表的数据访问的接口。在Tensorflow里面创建一个算子的时候,比如x y,返回一个张量对象。然后,这个张量可能作为其他计算的输入,从而张量是连接源算子和目的算子的边。基于这样的认知,数据在Tensorflow的图中川流不息。

图片 4图 1图片 5图 2

然而时至今日,人类精密制造领域(半导体制造是目前为止人类制造领域的最巅峰)遇到硅基极限的挑战,摩尔定律的放缓似乎预示着底层架构上的芯片性能的再提升已经出现瓶颈,而数据量的增长却呈现指数型的爆发,两者之间的不匹配势必会带来技术和产业上的变革升级。

图片 6

        除了通常意义的张量,Tensorflow还支持一种称之为稀疏张量(SparseTensor)的数据结构。这是一种空间有效字典类的数据表证,也就是大量零值的稀疏张量。

在一幅 TensorFlow 图中,每个节点有一个或者多个输入和零个或者多个输出,表示一种操作(operation)的实例化。流过图中正常的边的值都是张量,任意维度的数组其中基础元素类型是指定的或者在图的构造过程中自动推断出来的。特别的边,我们称之为控制依赖(control dependencies),同样也存在在图中:这类边上没有数据流过,但是他们表示源节点必须在目标节点的控制依赖开始执行前完成运行。�由于我们的模型包括可变状态,控制依赖可以被直接用来确保 happens-before 关系。我们的实现同样会插入控制依赖来确保独立操作之间的顺序,比如说作为控制内存使用最高峰值的方式。

图片 7

深度学习的人工神经网络算法与传统计算模式不同,它能够从输入的大量数据中自发的总结出规律,从而举一反三,泛化至从未见过的案例中。因此,它不需要人为的提取所需解决问题的特征或者总结规律来进行编程。人工神经网络算法实际上是通过大量样本数据训练建立了输入数据和输出数据之间的映射关系,其最直接的应用是在分类识别方面。例如训练样本的输入是语音数据,训练后的神经网络实现的功能就是语音识别,如果训练样本输入是人脸图像数据,训练后实现的功能就是人脸识别。

3)Variables(变量):在通常情况,比如做随机梯度下降的单次运算的时候,机器学习模型的图会从开始到结束反复运算多次。在两次调用之间,图中主要的张量并不会被保存。但是整体上对于图的求值是需要保存状态的,比如神经网络的权重和参数。因此,变量正是为了满足这一需求而创建的算子,能够被添加到计算图中。

In computer science, the happened-before relation (denoted:

图片 8) is a relation between the result of two events, such that if one event should happen before another event, the result must reflect that, even if those events are in reality executed out of order (usually to optimize program flow). This involves ordering events based on the potential causal relationship of pairs of events in a concurrent system, especially asynchronous distributed systems. It was formulated by Leslie Lamport.[1]In Java specifically, a happens-before relationship is a guarantee that memory written to by statement A is visible to statement B, that is, that statement A completes its write before statement B starts its read.[1]

变革从底层架构开始

深度学习与传统计算模式最大的区别就是不需要编程,但需要海量数据并行运算。

        变量可以看成是在内存中持久不变的张量副本。因此,变量的定义需要形状和固定数据类型两个特征。Tensorflow提供了一系列赋值函数完成图运算。

操作和核

一个操作有一个名字。它表示一个抽象的计算(比如说,“矩阵相乘”或者“相加”)。一个操作可以有属性(attribute),所有的属性必须提供或者在图构造的过程中推断出以实例化一个节点来执行操作。属性通常的使用方式是让操作在不同的张量元素类型上多态(例如,两个 float 类型的张量和两个 int32 类型的张量)。是一种操作的特别实现,可以运行在一个特定类型的设备上(如 CPU 或者 GPU)。TensorFlow 的 binary 定义了可以通过注册(registration)机制实现的操作和核的集合上,这个集合可以通过连接额外的操作/核的定义/注册。表 1 展示了内置于 TensorFlow 核心库的一些操作类型。

图片 9表 1:TensorFlow 的操作类型

计算芯片的架构50多年来都没有发生过本质上的变化,请注意计算架构的决定是资源的组织形式。而传统的冯诺伊曼是采取控制流架构,采用的是线性的记忆体和布尔函数作为基线计算操作。处理器的架构基于流水线串行处理的机制建立,存储器和处理器分离,流水线的计算过程可以分解为取指令,执行,取数据,数据存储,依次循环。依靠整个串行的过程,逻辑清晰,但性能的提升通过两种方式,一是摩尔定律下推动下晶体管数量的增多实现性能倍增;二是通过并行多个芯片核来实现。无论何种方式,本质上都是线性的性能扩张。

传统处理器架构(包括x86 和ARM 等),一般由中央运算器(执行指令计算)、中央控制器(让指令有序执行)、内存 (存储指令)、输入(输入编程指令)和输出(输出结果)五个部分构成,其中中央运算器和中央控制器集成一块芯片上构成了我们今天通常所讲的 CPU。这个架构往往需要数百甚至上千条指令才能完成一个神经元的处理,因此无法支撑深度学习的大规模并行计算需求。

        在Tensorflow的图中创建一个变量节点的时候,需要定义相应的张量,这样在图运行时,变量可以随之初始化。变量的形状和数据类型也来自于这个初始器。有趣的是,变量自己并不存储这个初始的张量,相反构造一个变量会增加三种不同的节点:

会话

客户端通过创建会话和 TensorFlow 系统进行交互。为了创建一个计算图,会话接口支持外部方法来提升当前由包含额外节点和边的会话的图(当会话创建时初始的图是空的)。另一个由会话接口提供的主要的操作就是 Run,以需要计算的输出名称和替换某些输出节点的张量的操作集合作为其参数输入。通过控制 Run 的参数,TensorFlow 的实现可以计算所有节点的必须执行传递闭包来计算需要的输出,然后安排执行合适节点来保证他们的依赖关系(在3.1小节详细讲解)。大多数 TensorFlow 的使用都是针对一个图启动一个会话,然后执行整个图或者通过 Run 调用来执行分离的子图数千或者数百万次。

人工智能芯片根据数据流的碎片化和分布式而采取神经网络计算范式,特征在于分布式的表示和激活模式。变量由叠加在共享物理资源上的向量表示,并且通过神经元的激活来进行计算。以神经元架构实现深度学习人工智能的临界点实现主要原因在于:数据量的激增和计算机能力/成本。

那么现在有什么硬件可以满足深度学习的并行运算呢?

        1)变量节点,保存持久状态。

变量

在大多数计算中,图都是执行多次的。大多数的张量在一次执行后不会存活。然而,变量是一种特别的操作可以返回一个在图执行若干次过程中存活的持久化的可变张量的句柄。这个句柄可以传递给一系列特定的操作,例如 Assign 和 AssignAdd就可以改变其引用的张量了。对应 TensorFlow 在机器学习中的应用,模型的参数典型地就存放在变量引用的张量中,并作为模型训练图的 Run 的一部分进行更新。

TensorFlow 系统的主要部分就是客户端,它使用了会话接口来和 master 及一个或者多个的 worker processes 进行通信,每个 worker process 负责对一个或者多个计算设备(CPU 核或者 GPU card)的任意访问和在这些设备上进行图节点的计算按照 master 的要求执行。我们有本地和分布式实现的 TensorFlow 接口。本地实现通常是客户端、master 和 worker 都是在同一台机器上在一个单一的操作系统进程(可能包括多个设备,比如说装了多个 GPU card的设备)上运行。分布式实现采用了本地实现的很多的代码,但是扩展了对客户端、master 和 worker 可以在不同的机器的不同的进程上运行的场景支持。在我们的分布式环境中,这些不同的任务对应于 cluster 调度系统分配在 job 中的容器中[51]。这两种不同的模式在图 3 中进行的展示。本节剩下的部分讨论了在两种实现中遇到的问题,3.3 节讨论了针对分布式实现的一些问题。

深度学习以神经元为架构。从单一的神经元,再到简单的神经网络,到一个用于语音识别的深层神经网络。层次间的复杂度呈几何倍数的递增。数据量的激增要求的就是芯片计算能力的提升。

GPU和FPGA

        2)保存初始值的算子,通常是一个常量。

设备

设备是 TensorFlow 的计算核心。每个 worker 负责一个或者多个设备,每个设备有一个设备类型和一个名字。设备名字由识别设备类型的部分,在 worker 中的设备索引,以及在分布式设定中,worker 的 job和任务(或者 localhost 当设备是和进程在同一机器时)的标志构成。一些例子如/job:localhost/device:cpu:0 或者 /job:worker/task:17/device:gpu:3。我们已实现了 CPU 和 GPU 的设备接口而其他的设备类型也有了通过注册机制完成的设备实现方式。每个设备对象负责管理分配和解除分配设备内存,对在 TensorFlow 实现中的更高层请求任意 kernel 的执行调度管理。

图片 10

GPU作为应对图像处理需求而出现的芯片,其海量数据并行运算的能力与深度学习需求不谋而合。因此,它被最先引入深度学习。2011 年斯坦福大学教授吴恩达率先将其应用于谷歌大脑中便取得惊人效果,结果表明12 颗NVIDIAD 的GPU 可以提供相当于2000 颗CPU 的深度学习性能,之后纽约大学、多伦多大学以及瑞士人工智能实验室的研究人员纷纷在GPU 上加速其深度神经网络。

        3)初始器算子,在图求值的时候把初始值赋值给变量张量。

张量

实现中的张量是一种有类型的、多维度数组。我们支持若干张量元素类型,包含大小为从 8 bit 到 64 bit 的带符号和无符号整型,IEEE 浮点数和双精度类型、复数类型和字符串类型。合适大小的后台存储通过一个分配器进行管理,该分配器�由张量所处的设备确定。张量的后端存储缓存是引用计数的并在没有引用存在时解除分配。

首先考虑最简单的执行场景:单一的worker进程运行在单一的设备上。图上的节点按照代表节点之间的顺序执行。特别地,我们会在每个节点上保持一个计数来记录这个节点上还没有执行的依赖。一旦这个计数变为 0,节点就可以被调度使用,并会加入到待续的队列中。待续队列按照某个非指定的顺序处理,指派节点执行的kernel 到设备对象上。当一个节点完成执行,所有依赖这个完成的节点的节点的计数都会减少

一旦系统有了多个设备,有两个主要的复杂情形出现:确定图中每个节点的计算所处的设备,然后管理由上一步确定的置放决定产生的设备间的所需的数据通信。后续部分讨论这两个问题。

计算的体系处于碎片化引发架构变革。数据的扩张远大于处理器性能的扩张,依靠处理器性能在摩尔定律推动下的提升的单极世界已经崩溃,处理器性能提升的速度并不足以满足AI所需的应用程序的需求。大量数据消耗的数字运算能力比几年前所有数据中心加起来还要多。

FPGA全称现场可编程门阵列(Field-Programmable Gate Array),最初作为专用集成电路领域中的一种半定制电路而出现的,具有一定的可编程性,可同时进行数据并行和任务并行计算,在处理特定应用时有更加明显的效率。FPGA的应用领域主要是深度学习和神经网络算法,因为其可编程性,这让FPGA在深度学习领域拥有了得天独厚的优势。

        一个例子如下图所示:三个节点代表变量定义。第一个变量v是一个变量的张量值在内存中的持久副本。第二个变量i是给变量提供初始值(可以是任意张量)的节点。最后一个赋值节点把初始值赋给变量,在赋值节点产生一个新的张量具有初始值的变量v‘。这样,v'可能作为另外算子的一个输入。

3.2.1 节点的置放

给定计算图,TensorFlow 实现的主要责任之一就是将计算映射到可用的设备集合上。这个算法的简单版本下面给出。参见第 4.3 节有关该算法支持的扩展。

该置放算法的输入是一个代价模型,包括对每个图节点的输入和输出张亮的规模的估计,和对每个节点在给于其输入张量时的计算时间的。这个代价模型或者是基于关联不同操作类型的启发式规则的静态估计,或者基于实际的为更早的图的执行而做的置放决定集合衡量。

置放算法首先运行模拟的图的执行过程。模拟按照下面描述进行,对每个节点使用贪心策略选择一个设备。节点到设备的置放过程也是用作真实执行的置放。

置放算法从计算图的源点开始,在系统中的每个设备上模拟相应的活动。对每个在遍历中抵达的节点,可选 available 设备的集合会被考虑到(设备可能会由于其没能提供实现了特定操作的kernel而不可选)。对那些拥有多个可选设备的节点,置放算法使用一种贪心策略来检查在每个可能谁被上置放节点需要完成的时间的效果完成决策。这种启发式规则考虑了根据代价模型在那种设备上估计的和衡量的执行时间,还有任何用来从其他设备传输输入到该节点的通信的代价。其中节点的操作完成最快的设备会被选作该操作的设备,置放决策然后会继续针对图中其他的节点进行处理,包含那些已经做好模拟执行的下游节点。第 4.3 节描述了一些扩展,让用户可以提供提示和部分限制来指导置放算法。这个算法现在还在持续开发的过程中。

基于摩尔定律的机器时代的架构——从Wintel到AA

然而,目前GPU和FPGA各自都有其局限性和优劣,比如GPU硬件结构固定不具备可编程性,无法像FPGA 一样可以灵活的配置硬件结构。 运行深度学习算法能效远低于FPGA。而FPGA基本单元的计算能力有限,但是每个单元的计算能力都远远低于CPU 和GPU。另外FPGA价格较为昂贵,在规模放量的情况下单块FPGA 的成本要远高于专用定制芯片。

4)Session(会话):在Tensorflow里面,算子的运算和张量的估值会在一定的上下文中进行,我们称之为Session(会话)。会话的责任之一就是将分配和管理资源的工作封装起来,比如缓存变量。更进一步来看,Tensorflow库里面的Session接口提供了一个run函数,作为整个图计算的执行入口。这个方法将输入节点带入整个图计算的过程,并且根据图定义返回相应的结果。另外,一个可选的映射,即从任意节点到相应替代值的映射,被称为feed nodes(反馈节点),可能也被run调用【8】。

3.2.2 交叉设备通信

一旦节点置放已经计算好,图就被划分成子图的集合,每个子图对应于一个设备。从 xy 任何交叉设备的边都会被移除并用一条从 x 到一个 x 的子图中新的 Send 节点的边和从在 y 子图中对应的 Receive 节点到 y 的边代替。参见图 4 中所进行的变换。

图片 11图 4

在运行时刻,Send 和 Receive 节点合作进行跨设备的数据交换。这使得我们可以隔离所有在 Send 和 Receive 内部实现的通信,这样简化了运行时刻剩下的部分工作。当我们插入 Send 和 Receive 节点时,我们将在特定设备上的特定张量的所有使用者进行合并规整来使用单个 Receive 节点,而不是对特定设备上的每个下游使用者都给一个 Receive 节点。这确保了需要使用的张量数据仅仅会从源设备到目的设备传输一次,而在目的设备上的张量内存也只会分配一次(而非多次,参看图 4 的节点 bc)。

通过这种方式处理通信,我们也允许了不同设备上的图中的个别节点调度可以被去中心化到 workers 上:Send 和 Receive 节点传达了在不同的 worker 和 设备间必要的同步信息,master 仅仅需要对每个图的执行给出一个 Run 请求给那些包含图中任意节点的 worker,而不是会对所有节点或者每个跨设备通信都进行调度。这也让系统更加可扩展,并允许比通过 master 来强制进行所有的调度更加精确的节点执行。

计算图的分布式执行非常类似于多设备执行。在设备置放后,子图会针对每个设备创建。用于 worker 进程之间的通信的 Send/Receive 节点对使用了诸如 TCP 或者 RDMA 这样的远程通信机制进行跨机器的数据迁移。

Intel与Windows结合构建PC生态 ,本质上诞生了软硬件结合的机器时代。而在其基础上的延升, 2010后苹果带来的智能手机引发的ARM与Android生态,将机器与人的结合拓展到了移动端。我们回顾历史上的芯片架构历史,认为冯诺伊曼架构带来了计算体系的建立并通过Intel实现了最大化;ARM通过共享IP的商业模式带来了更开放的生态体系,实现了软硬件的结合延伸了人类的触角。

以深度学习为代表的人工智能计算需求,发展早期,主要采用GPU、FPGA 等已有适合并行计算的通用芯片来实现加速。由于这类通用芯片设计初衷并非专门针对深度学习,因而,天然存在性能、功耗等方面的瓶颈。

        在调用run的时候,Tensorflow将会出输出节点开始反向分析计算图的节点依赖,计算所有节点的传递闭包。这些节点可能被分配到一个或者多个物理计算单元(CPU,GPU等),这些计算单元可以在一台或者多台机器上。分配的规则由Tensorflow的placement algorithm(分配算法)定义。这个算法会在本文后面部分谈到。此外,因为存在节点评估顺序的特定显式可能性,姑且称为控制依赖关系,执行算法将确保这些依赖关系不变。

容错

分布式执行中的错误可以在很多地方进行检测。最主要的有 在 Send 和 Receive 节点对之间的通信错误, 从 master 进程到每个 worker 进程的周期性的健康状态检测。

芯片架构变革,戴德曼翻译。如果发现了错误,整个图的执行就会终止,并从头开始。但是回想之前变量节点对应于那些在执行过程中记忆持有的张量。我们支持在重启过程中的一致的检查点和状态恢复。特别是,每个变量节点连接在一个 Save 节点上。这些 Save 节点周期性地执行,比如说每 N 次迭代,或者每隔 N 秒。他们执行的时候,变量的内容被写到持久化的存储中,比如说,一个分布式的文件系统。类似地,每个变量连接在一个 Restore 节点上,只会在一次重启后的第一个迭代中启用。在 4.2 节有某些节点仅能够在某些图的执行中启用的细节。

本节我们描述在第 2 节给出的编程模型中几个更加高级的特性。

很多优化算法,包括常用的机器学习训练算法,如随机梯度下降 [45],计算代价函数关于一个输入集合的梯度。由于该算法广泛的应用需求,TensorFlow 已经内置了对自动梯度计算的支持。如果张量 C 通过一个复杂的子图操作依赖于张量 {X_k} 集合,那么就有一个内置的函数可以返回张量 {dC/dX_k}。梯度张量如同其他张量一样通过扩展 TensorFlow 图使用下面的流程进行计算的。

图片 12图 5

当 TensorFlow 需要计算一个张量 C 关于某个张量 I 时,首先找出计算图中从 IC 的路径。然后从 C 回溯到 I,而对在回溯路径中的每个操作都会添加一个节点到 TensorFlow 的图上,包含回溯路径上使用链式法则的偏导数。新加的节点计算前向路径中相对应的操作的梯度函数。梯度函数可以是任何的操作。这个函数不但可以用在反向路径中计算出的偏导数作为输入,同样也能选择性地用前向操作的输入输出作为输入。图 5 展示了图 2 中例子的代价函数的梯度。Grey arrows show potential inputs to gradient functions that are not used for the particular operations shown. 图 1 所对应的是计算这些梯度:

[db, dW, dx] = tf.gradients(C, [b, W, x])

通常操作可能会有多个输出,C 可能仅仅会依赖于其中一部分。例如,如果操作 O 有两个输出 y_1y_2C 仅仅依赖于 y_2,那么 O 的梯度函数的第一个输入就可以设置为 0 因为 dC/dy_1 = 0

自动梯度计算让优化尤其是内存耗用变得复杂。在执行前向计算子图时,那些显式地由用户创建的操作,可能的启发式想法就是通过观察图被构建的次序来确定哪个节点执行下一步。

这通常指的是临时输出会在创建后不久就是用到,所以他们的内存可以很快重新用到。当这个启发式想法不适用时,用户可能会改变图构建的次序,或者增加在第 5 节将会介绍的控制依赖。当梯度节点自动加入到图中时,用户控制就会变弱,启发式想法就失效了。特别地,因为梯度逆转了前向计算的顺序,在图早期用到的张量会在梯度计算的结尾时重新被频繁用到。这样的张量会消耗很多的 GPU 内存,也就不必要地限制了计算的规模。我们正积极地提升内存关联的效果以更好地处理这个问题。是用更加精密的启发式想法来确定图执行的次序,重计算张量而不是存储在内存,将长效的张量从 GPU 内存中移到 CPU 内存中等等都是可以尝试的思路。

常常有 client 希望执行整个图的子图。为了支持这一点,只要 client 在 Session 中构建出一个计算图,我们 Run 的方法运行他们执行整个计算图的任意的子图,并将任意的数据注入到图中的任何边上,以及获取流经任何边上的数据。

图中每个节点都有一个名字,一个节点的每个输出都通过源节点名和节点输出端口确定,从 0 开始计数(例如,“bar:0” 表示 “bar” 节点的第一个输出,而 “bar:1” 则是第二个输出)。

Run 调用的两个参数可以帮助定义准确的将要执行的子图。第一,Run 调用接受输入,一个可选的映射 name:port 名来填充张量值。第二,Run 调用接受 output_names,输出 name[:port] 列表指定了需要执行的节点,并且,如果端口出现在名字中,那么对那个节点的特定输出张量值就应该返回给 client 如果 Run 调用成功完成。

图片 13Paste_Image.png计算图是基于输入输出的值进行变换的。每个在输入中指定的 node:port 使用 feed 节点替换,这个会选出从特定初始化的用来给 Run 调用的 Rensezvous 对象的入口选择出给定的输入向量。类似地,每个输出名字关联在一个特定的 fetch 节点上,可供输出张量的存储,并在 Run 调用完成时返回给客户端。最后,一旦图已经被这些特定的 feefetch 节点重写,将要执行的节点集合可以被从每个被输出命名的节点出发,然后使用图的依赖关系来确定必须在重写图中执行产生输出的整个节点的集合中进行反向传播。图 6 展示了左边的原始图,以及变换的图,其中 Run 被激活输入是 {b} 输出是 {f:0}。因为我们仅仅需要计算节点 f 的输出,我们不需要执行节点 d芯片架构变革,戴德曼翻译。e,因为他们没有对 f 做出贡献。

TensorFlow 客户端可以通过为一个节点哪些设备可以在其上执行来提供部分的限制来控制节点在设备中的放置。例如,“仅仅放置这个节点在类型为 GPU 的设备上” 或者 “这个节点可以被放置在任何在 /job:worker/task:17 中的设备上”,或者 “共享这个节点和 variable13 节点”。按照这些限制,放置算法就可以负责选择节点的分配来提供快速执行,并且满足不同的设备本身的限制,例如内存的总量的限制来执行子图的计算。

支持这样的限制需要对 3.2.1 节介绍的放置算法进行调整。我们首先计算每个节点的可行设备集合,然后使用 union-find 算法来计算图中必须放在一起的图的组成部分。对每个这样的组成部分,我们计算可行设备集合的交集。计算出的每个节点可行设备和放置算法的模拟器很容易匹配。

尽管没有任何显式的控制流数据流图非常强大,但是我们发现了一些例子中支持条件和循环可以得到更加简洁而高效的机器学习算法的表示。

在 Arvind [3] 中描述的数据流机器观点,我们引入了一个小控制流操作的集合进入 TensorFlow 并且推广 TensorFlow 使之能够处理循环的数据流图。SwitchMerge 操作符可以让我们基于布尔值的张量来跳过整个子图的执行。Enter Leave NextIteration 操作符可以进行迭代。高级程序构造如 if-conditional 和 while-loop 可以很容易用这些控制流操作编译成数据流图。

TensorFlow 运行时刻实现了一个 tags 和 frames 概念,这与 MIT Tagged Token Machine 类似。每次迭代都使用了唯一一个 tag,这个执行的状态通过 frame 表示的。只要被使用,输入就可以进入一次迭代;因此,多次迭代可以被并发地执行。

TensorFlow 使用分布式协同机制来使用控制流进行图的执行。一般来说,循环可以包含被分配到多个不同的设备上的节点。因此,管理循环的状态成为了一个分布式终止检测的问题。TensorFlow 的解决方案基于图的重写。在图的划分(partitioning)过程中,我们自动地增加控制节点到每个划分(partition)上。这些节点实现了一个小的状态机,来管理每次迭代的开始和终止,确定整个循环的终止。

如上所示,我们通常通过随机梯度下降来训练机器学习模型,将梯度计算表示成数据流图的一部分。在模型包含控制流操作时,我们必须在对应的梯度计算中处理这些操作。例如,使用 if-conditional 来对模型梯度计算时,需要知道哪个分值会被选择,然后应用梯度逻辑到这个分支上。类似地,使用 while-loop 来对模型梯度计算时,需要知道多少次迭代,同样还依赖在这些迭代中出现的中间值。基本技术就是重写这些图来记住需要计算梯度计算的值。我们这里省略掉细节介绍。

尽管输入数据可以被通过 feed 节点提供给计算,另一个用来训练大规模机器学习模型通常的机制是在图中采用特定的输入操作节点,这些节点一般来说会通过文件名配置,并产生一个包含一个或者多个样本的张量来自在每次执行时的那些文件集合中存放的数据。这使得数据可以被直接从底层存储系统读出到将要执行接下来处理的内存中。在配置中,从 worker 进程分隔开的客户端进程,如果数据给定,一般会需要一个额外的网络 hop(从存储系统到客户端然后从客户端到 worker vs. 使用一个输入节点时直接从存储系统到 worker)。

队列是一个加入到 TensorFlow 中的有用的特性。他们允许图的不同部分来异步地执行,可能按照不同的节奏,来通过 Enqueue 和 Dequeue 操作来处理数据。在队列中空间尚存时,可以进行 Enqueue 操作;在指定的最小数量的元素可以取出时,可以进行 Dequeue 操作。队列的一个用途就是允许输入数据可以从磁盘文件中预先取出,这样可以同时进行前一批的数据的处理。同样还能用来进行其他类型的归类,包括聚合很多梯度来计算某种更加复杂的梯度组合,或者来组织不同的输入语句到递归语言模型到语句的近似同样长度的 bins 中,这样处理得更有效率。

在一般的 FIFO 队列上,我们还实现了一个 shuffling 队列,可以对内存内的缓冲区内的元素进行随机洗牌。洗牌功能在机器学习算法中比较有用,常常需要对样本进行随机化。

容器 是用来管理长期存在的可变状态的机制。变量 Variable 反向存放在一个容器内。默认的容器是直到进程终止时都是存活的,但是我们也允许其他的容器。容器可以通过清除它的整个内容进行重置。使用容器,就可以分享状态在完全不相交的不同会话中的计算图中。

本节,我们给出一些在 TensorFlow 实现中的优化,这些优化对系统性能和资源利用率起到了提升作用。

因为计算图的构造通常是由很多不同层的抽象完成的,计算图一般都会包含冗余的计算过程的多个副本。为了解决这个问题,我们已经实现了一个共同子表达式过程,类似于 Click[12] 中给出的算法,运行在计算图上,并将操作的多重复制,用这些节点中的一个单独节点代替,并将图的边重定向以满足这个归一化。

完整内容请大家关注我们 UAI 的创业项目:

  • 微信公众号:UAI 人工智能

图片 14UAI 人工智能

  • 微信号:FEIGlobal如要咨询相关项目可以联系该微信号。

图片 15

而进入人工智能(AI)芯片发展阶段,就是专门满足深度学习并行运算能力的定制化芯片。其底层系统平台架构是从GPU或者FPGA发展而来,对其重新设计。

B. 执行模型

观察Intel和ARM的黄金十年,站在现在时点往后看,我们提出以下观点:过去十年以下游的应用驱动设计公司的成长转换为由设计公司主导应用正在发生。从需求层面看企业成长空间。类似90年代的PC和10年的智能手机带来的亿级大空间增量市场将很容易推动企业的快速增长。设计企业能够在成长轨迹上实现跨越式突破的可能性来自于赛道的选择。但站在现在时点看,人工智能是确定性的方向,在所有已有领域的人工智能渗透,都将极大的改变人类的生活。处于最前沿的芯片公司的革新正在以此而发生,重新定义底层架构的芯片,从上游推动行业的变革。在并没有具体应用场景爆发之前已经给予芯片公司充分的高估值就是认可设计公司的价值。

设计芯片的目的是从加速深度学习算法到希望从底层结构模拟人脑来更好实现智能。

        如刚刚讨论的那样,对于执行各种计算图元素的组成,TensorFlow划分其任务在四个不同的组中实现:客户端,主控端,一组工作进程和一些设备。 当客户端通过会话的run调用请求评估一个TensorFlow图,这个请求被发送到主控端,主控端将任务委托给一个或多个工作进程处理和协调它们的执行。 每个工作进程随后负责一个或多个设备真实的运算和处理操作。

2.1.  Intel——PC时代的王者荣耀

目前人工智能芯片涵盖了基于FPGA 的半定制、针对深度学习算法的全定制、类脑计算芯片三个阶段。   

        在这个模型中,有两个扩展度。 第一扩展度是关于执行图运算机器的数量。 事实上,第二扩展度指的是在每台机器上,可能会有更多设备,例如,五个独立的GPU和/或三个CPU。 为此,存在两个“版本”的TensorFlow,一个用于在单个机器上本地执行(但可能有许多设备),一个支持分布式在许多机器和许多设备上实现。

本节重点阐述Intel公司在X86时代的芯片架构产品以及此架构下公司以及行业的变化。

图片 16

        上图展示了执行模型和响应扩展度。而且Tensorflow在开始发布的时候,确实只公布了单机版本,而多机版本是在2016年的4月13日才姗姗来迟【16】。

2.1.1. Intel公司简介

1、基于FPGA 的半定制人工智能芯片,如国内初创公司深鉴科技,该公司设计了“深度学习处理单元”(Deep Processing Unit,DPU)的芯片,希望以ASIC 级别的功耗来达到优于GPU 的性能。

      1)Devices(设备):设备是在TensorFlow执行模型中最小,最基本的实体。 上图中的所有节点,也就是每个算子的内核,最终都必须是映射到要执行的可用设备。 在实际执行过程中,设备通常是CPU或GPU。 然而,TensorFlow能够支持更多种类的物理执行单元。 例如,在2016年5月,谷歌宣布其定制的ASIC(专用集成电路)张量处理单元(TPU),是专门用于快速张量计算[17]。 因此,Tensorflow是可以容易地集成新出现的设备类新型硬件。

Intel是一家成立于1968年的半导体制造公司,总部位于美国加州。随着个人电脑的普及和全球计算机工业的日益发展,公司逐渐发展成为全球最大的微处理器及相关零件的供应商。公司在2016年实现营业收入594亿美元,世界500强排名158。

2、针对深度学习算法的全定制,就是完全采用ASIC 设计方法全定制,性能、功耗和面积等指标面向深度学习算法都做到最优。谷歌的TPU 芯片、我国中科院计算所的寒武纪深度学习处理器芯片就是这类芯片的典型代表。华为麒麟970的技术授权就是来自寒武纪。

        为了整体评估在某个设备上的节点,主控端生成相应的工作进程。 作为工作进程可以在单个机器上管理一个或多个设备,设备是不仅通过名称标识,还标识其所在工作进程组的索引。 例如,特定组中的第一CPU可以由字符串“/ cpu:0”标识。

公司分为PC客户端部门、数据中心部门、物联网、移动及通讯部门、软件及服务运营,其他还有笔记本部门、新设备部门及NVM解决方案部门。公司主要营业收入来自于PC客户部门,其次是数据中心部门。公司的主要产品X86处理器占主导地位,接近90%,包括苹果在2006年放弃PowerPC改用英特尔的x86 processors。

图片 17

        2)placement algorithm(分配算法):为了决定哪一个节点分配给那一个设备,Tensorflow使用了一种特定分配算法。该算法模拟计算图的运算和遍历从输入张量到输出张量的全部节点。在遍历节点过程中,要决定哪一个可用设备D={d1,d2,...dn}运行给定节点v,算法使用一个成本模型Cv(d)。这个成本模型考虑四种信息来决定最优设备d = arg mind∈D Cν(d):

图片 18

谷歌的TPU 芯片

        1)在给定设备上是否存在该节点的实现(核函数)。比如,如果任何一个GPU上都不存在某种特定算子,那么选择任意GPU的成本都是无限的。

Intel是第一家推出x86架构处理器的公司。Intel从8086始,286、386、486、586、P1、P2、P3、P4都用的同一种CPU架构,统称X86。大多数英特尔处理器都是基于x86指令集,被称为x86微处理器。指令集是微处理器可以遵循的基本命令集,它本质上是微处理器的芯片级“语言”。英特尔拥有x86架构的知识产权和给AMD和Via做处理器的许可权。

3、类脑计算芯片,这是人工智能芯片的未来发展阶段,其设计目的不再局限于仅仅加速深度学习算法,而是在芯片基本结构甚至器件层面上希望能够开发出新的类脑计算机体系结构,比如会采用忆阻器和 ReRAM 等新器件来提高存储密度。这类芯片的研究离成为市场上可以大规模广泛使用的成熟技术还有很大的差距,甚至有很大的风险,但是长期来看类脑芯片有可能会带来计算体系的革命。这类芯片的典型代表是IBM 的TrueNorth 芯片。

        2)估计一个节点的输入和输出丈量的大小(按字节计算)。

图片 19

类脑计算芯片市场空间巨大。据预测,包含消费终端的类脑计算芯片市场将在2022 年以前达到千亿美元的规模,其中消费终端是最大市场,占整体98.17%,其它需求包括工业检测、航空、军事与国防等领域。

        3)给定设备对于核函数的期望计算时间。

2.1.2. Intel带来的PC行业的市场规模变革和产业变化

图片 20

        4)对于输入丈量到相应算子跨设备或者跨机器的传输成本进行启发式估算,万一该节点已经赋值的输入张量所在设备和当前设备并不一样。

回顾Intel 90年代至今发展历程,清晰看到90年代是Intel发展最快的阶段并在2000年前后达到了峰值。显而易见的原因是个人电脑的快速普及渗透。而遵从摩尔定律的每一代产品的推出,叠加个人电脑快速渗透的乘数效应,持续放大了企业的市值,类似于戴维斯双击,推动股价的一路上扬。

上面谈到华为刚发布的人工智能移动芯片麒麟970, AI 技术授权来源寒武纪(中科寒武纪科技有限公司)。公司由计算机体系结构国家重点实验室(依靠中国科学院计算技术所)孵化出的全球首个 AI 领域的独角兽。这是一个国人将会引以为傲的伟大公司。8月18日,寒武纪科技完成1亿美元A轮融资,寒武纪科技已经成为全球AI芯片领域第一家独角兽。

    3)cross-device execution(跨设备运行):只要是用户拥有多个设备,Tensorflow通常都会把节点分配到这些设备上去。这个过程是通过把节点分类,然后一类分配到一个设备。这样分配的话,必须处理跨设备分配的节点依赖问题。让我们考虑A和B这样两个设备,其中节点v在设备A上。如果v的输出张量作为另外两个算子α, β的输入,同时α, β在设备B上。那么就存在从A到B的跨设备的边ν → α 和 ν → β。如下图所示:

冯诺伊曼架构带来了计算体系的建立并通过Intel实现了最大化,但从本质上说,英特尔参与的是机器时代的兴起和计算芯片价值体现。但时至今日,在人口红利消散,PC渗透率达到稳定阶段,依托于PC时代的处理器芯片进入了稳定常态。英特尔在总产品收入提升的情况下,PC端提供的收入增长机会停滞。处理器依靠摩尔定律不断推经延续生命力,但在应用增长乏力的阶段缺乏爆发式的再增长。PC时代的处理器设计遵从了下游应用驱动上游芯片的实质。

我们的目标是通过这个全新的完全自主的指令集,构建未来智能时代的 x86 生态。——寒武纪CEO 陈天石

        在实际运行中,需要使用一些传输手段完成v的输出张量从A设备,比如GPU,到设备B,比如CPU的过程。如下图所示,send和recv两类节点被生成完成这个传输过程。

进入2010年后,英特尔的处理器增速同半导体行业基本协同一致,毫无疑问超越行业增速的增长已经需要新的应用拉动。摩尔定律支撑了10多年的快速增长再出现边际改善的增长需要重新审视。

2016 年 3 月份,寒武纪-1A(Cambricon-1A)问世,这也是全球首个商用深度神经网络处理器 IP(Intellectual Property)。寒武纪通过授权的方式推广 AI 指令集,来快速推动市场发展。寒武纪作为AI基础层厂商将IP授权给应用层企业,华为等IT企业作为基础层厂商的技术优势,利用这些技术,快速在手机AI芯片等前沿领域实现应用量产。其首款集成寒武纪芯片的商用产品就是麒麟 970。

        最后,Tensorflow使用“规范化”来优化(send,recv)对。在上图所示的例子中,我们看到两个recv节点,分别连接α, β。然而,一种等价的,但是更为有效的办法就是在设备B上只运行一个recv,如下图所示。

2.2. ARM——开放生态下移动时代的新王加冕

麒麟970的发布,代表在手机移动市场,AI芯片的将会迎来大规模商业化应用。

本节重点阐述ARM在移动时代的芯片架构产品以及此架构下公司以及行业的变化。

而事实上,人工智能的市场空间将不仅仅局限于计算机、手机等传统计算平台。从无人驾驶汽车、无人机再到智能家居的各类家电,至少数十倍于智能手机体量的设备需要引入感知交互能力。而出于对实时性的要求以及训练数据隐私等考虑,这些能力不可能完全依赖云端,必须要有本地的软硬件基础平台支撑。人工智能定制芯片需求量就将数十倍于智能手机。

2.2.1. ARM公司简介

在智能时代,人工智能将推动这一轮计算革命。而芯片也将是人工智能时代的开路先锋。正如英特尔X86 处理器芯片垄断所的PC时代,ARM 移动处理器芯片所垄断的移动互联时代,下一个智能时代,也将是AI芯片的天下。

ARM公司是全球领先的半导体知识产权 (IP) 提供商,专门从事基于RISC技术芯片设计开发,并因此在数字电子产品的开发中处于核心地位。公司的前身Acorn于1978年在伦敦正式成立。1990年ARM从Acorn分拆出来。得益于20世纪90年代手机的快速发展,基于ARM技术的芯片出货量飞速增长,并于2017年宣布正式达成1000亿芯片出货量的里程碑。2016年7月,日本软银以320亿美元收购ARM。

未来代表AI芯片技术垄断地位的公司会不会属于中国,我们不妨期待!

ARM本身不直接从事芯片生产,只设计IP,包括指令集架构、微处理器、图形核心和互连架构,依靠转让设计许可由合作公司生产各具特色的芯片,目前它在世界范围有超过1100个的合作伙伴。

-end-

ARM的创新型商业模式为公司带来了丰厚的回报率:它既使得ARM技术获得更多的第三方工具、制造、软件的支持,又使整个系统成本降低,使产品更容易进入市场被消费者所接受,更具有竞争力。正因为ARM的IP多种多样以及支持基于ARM的解决方案的芯片和软件体系十分庞大,全球领先的原始设备制造商 (OEM) 都在广泛使用ARM技术,因此ARM得以在智能手机、平板上一枝独秀,全世界超过95%的智能手机都采用ARM架构。


图片 21

作者:曹涛CT,产品经理,互联网追风人。

2.2.2. ARM架构——重新塑造移动智能时代

ARM沿用了冯诺伊曼架构,在性能和功耗上做到了更加平衡。在底层架构没有发生根本性    变革的情况下,在架构的横向延伸上寻找到了技术的转换,从而实现了智能手机时代移动端的产品阶跃。

处理器架构在根源上看ARM延续了X86的底层架构。正如我们在之前讨论架构时指出,处理器一般分为取指令,译码,发射,执行,写回五个步骤。而我们说的访存,指的是访问数据,不是指令抓取。访问数据的指令在前三步没有什么特殊,在第四步,它会被发送到存取单元,等待完成。与X86不同的是在指令集方面,ARM架构过去称作进阶精简指令机器(Advanced RISC Machine),更早时期被称作Acorn RISC Machine,是32位精简指令集(RISC)处理器架构,被广泛地使用在嵌入式系统设计中。在应用场景上有所不同。

ARM指令集架构的主要特点:一是体积小、低功耗、低成本、高性能,因此ARM处理器非常适用于移动通讯领域;二是大量使用寄存器且大多数数据操作都在寄存器中完成,指令执行速度更快;三是寻址方式灵活简单,执行效率高;四是指令长度固定,可通过多流水线方式提高处理效率。

图片 22

图片 23

2.2.3. 生态的建立和商业模式的转变——ARM重塑了行业

ARM的商业模式值得真正的关注。ARM通过授权和版税来赚取收入。使用ARM的授权,跟据流片的次数,可以付一次流片的费用,也可以买三年内无限次流片,更可以永久买断。芯片量产后,根据产量,会按百分比收一点版税。Intel通过售卖自己的芯片来赢得终端客户和市场,而ARM则是通过授权让全世界的芯片制造商使用自家的产品来推广。ARM的商业模式之所以在智能手机时代能够推广,是因为移动端的生态更为开放,自上而下的生态建立,不仅是芯片开发者,也包括软件开发者,都被构建在生态的范围内。

智能移动设备上包含多件ARM的处理器/技术,每当智能手机上新增一个功能时,就为新的ARM知识产权带来了新的机会。2016年,ARM在移动应用处理器(包括智能手机、平板电脑和笔记本电脑)上,根据量的测算,其市场份额高达90%,同时ARM估计移动应用处理器规模将从2016年的200亿美元增长到2025年的300亿美元。

图片 24

2016年,ARM各项技术在智能手机领域都有良好的渗透率:ARMv7-A技术早已完全渗入,ARMv8-A技术渗透率达到70%,Mali graphics达到50%,高核数技术(high core count)则为35%.

图片 25

人工智能芯片——新架构的异军突起

首先我们必须描述人工智能对芯片的诉求,深度学习的目标是模仿人类神经网络感知外部世界的方法。深度学习算法的实现是人工智能芯片需要完成的任务。在算法没有发生质变的前提下,追根溯源,所有的加速器芯片都是为了实现算法而设计。

图片 26

我们整理了人工智能芯片相关的类型和产业链公司,传统的芯片厂商/生态的建立者/新进入者。 传统的芯片制造厂商:Intel,Nvidia和AMD。他们的优势在于在已有架构上对人工智能的延伸,对于硬件的理解会优于竞争对手,但也会困顿于架构的囹圄;2 上层生态的构建者进入芯片设计,比如苹果和Google,优势在于根据生态灵活开发定制各类ASIC,专用性强;新进入者,某些全新的架构比如神经网络芯片的寒武纪,因为是全新的市场开拓,具有后发先至的可能。新进入者的机会,因为是个全新的架构机会,将有机会诞生独角兽。

3.1. GPU——旧瓶装新酒

GPU使用SIMD(单指令多数据流)来让多个执行单元以同样的步伐来处理不同的数据,原本用于处理图像数据,但其离散化和分布式的特征,以及用矩阵运算替代布尔运算适合处理深度学习所需要的非线性离散数据。作为加速器的使用,可以实现深度学习算法。但注意的是,GPU架构依然基于冯诺伊曼。

我们以GPU和CPU的对比来说明GPU所具有的架构特点。GPU由并行计算单元和控制单元以及存储单元构成GPU拥有大量的核(多达几千个核)和大量的高速内存,擅长做类似图像处理的并行计算,以矩阵的分布式形式来实现计算。同CPU不同的是,GPU的计算单元明显增多,特别适合大规模并行计算。

图片 27

注意GPU并行计算架构,其中的流处理器组(SMs)类似一个CPU核,多个流处理器组可实现数据的同时运算。因此,GPU主要适用于在数据层呈现很高的并行特性(data-parallelism)的应用。

图片 28

CPU和GPU本身架构方式和运算目的不同导致了CPU和GPU之间的不同,主要不同点列举如下

图片 29

深度学习是利用复杂的多级「深度」神经网络来打造一些系统,这些系统能够从海量的未标记训练数据中进行特征检测。 因为GPU可以平行处理大量琐碎信息。深度学习所依赖的是神经系统网络——与人类大脑神经高度相似的网络——而这种网络出现的目的,就是要在高速的状态下分析海量的数据。GPU擅长的是海量数据的快速处理

GPU的特征决定了其特别适合做训练。机器学习的广泛应用: 海量训练数据的出现以及 GPU 计算所提供的强大而高效的并行计算。  人们利用 GPU 来训练这些深度神经网络,所使用的训练集大得多,所耗费的时间大幅缩短,占用的数据中心基础设施也少得多。 GPU 还被用于运行这些机器学习训练模型,以便在云端进行分类和预测,从而在耗费功率更低、占用基础设施更少的情况下能够支持远比从前更大的数据量和吞吐量。

与单纯使用CPU的做法相比,GPU具有数以千计的计算核心、可实现10-100倍应用吞吐量,因此GPU已经成为数据科学家处理大数据的处理器。

图片 30

3.1.1. GPU芯片王者——NVIDIA

NVIDIA是一家以设计GPU芯片为主业的半导体公司,其主要产品从应用领域划分,包括GPU(如游戏图形处理器GeForce GPU,深度学习处理器Tesla,图形处理器GRID等)和Tegra Processor(用于车载,包括DRIVE PX和SHIELD)等。GPU芯片构成公司最主要收入来源,2017年上半年,GPU贡献收入34.59亿美元,占公司总收入的83%;Tegra Processor贡献收入6.65亿美元,占比16%,其他部分贡献收入1%。

公司业绩稳定,营业收入除2013年略有下降外,2012-2016年均实现稳步增长,从42.80亿美元增至69.10亿美元,CAGR为10.05%;2016年公司实现净利16.66亿美元,相较于2012年的5.63亿美元,CAGR达24.23%。毛利润方面,公司毛利润从2012年的22.26亿美元增至2016年的40.63亿美元,实现稳步增长,毛利率维持在50%以上。

图片 31

从收入构成来看,公司GPU芯片业务从2012年的32.52亿美元增至2016年的58.22亿美元,实现稳步增长,GPU业务在收入结构中占比稳定在76%以上。

图片 32

在高性能计算机、深度学习、人工智能等领域,NVIDIA的GPU芯片有十分关键的作用。NVIDIA的CUBA技术,大幅度提高了纯CPU构成的超级计算机的性能。人工智能和深度学习需要大量的浮点计算,在高性能计算域,GPU需求在不断增强。目前NVIDIA的高性能显卡已经占有84%的市场份额。亚马逊的AWS,Facebook,Google等世界一级数据中心都需要用NVIDIA的Tesla芯片,随着云计算和人工智能的不断发展,我们认为NVIDIA的GPU芯片业务在未来将继续维持增长态势,我们分拆每个领域的出货量,预计将从2016年的3602万颗增至2018年的4175万颗。

图片 33

3.2. FPGA——紧追GPU的步伐

FPGA是用于解决专用集成电路的一种方案。专用集成电路是为特定用户或特定电子系统制作的集成电路。人工智能算法所需要的复杂并行电路的设计思路适合用FPGA实现。FPGA计算芯片布满“逻辑单元阵列”,内部包括可配置逻辑模块,输入输出模块和内部连线三个部分,相互之间既可实现组合逻辑功能又可实现时序逻辑功能的独立基本逻辑单元。

注意FPGA与传统冯诺伊曼架构的最大不同之处在于内存的访问。FPGA在本质上是用硬件来实现软件的算法,因此在实现复杂算法方面有一些难度。

图片 34

架构方面,FPGA拥有大量的可编程逻辑单元,可以根据客户定制来做针对性的算法设计。除此以外,在处理海量数据的时候,FPGA相比于CPU和GPU,独到的优势在于:FPGA更接近IO。换句话说,FPGA是硬件底层的架构。比如,数据采用GPU计算,它先要进入内存,并在CPU指令下拷入GPU内存,在那边执行结束后再拷到内存被CPU继续处理,这过程并没有时间优势; 而使用FPGA的话,数据I/O接口进入FPGA,在里面解帧后进行数据处理或预处理,然后通过PCIE接口送入内存让CPU处理,一些很底层的工作已经被FPGA处理完毕了(FPGA扮演协处理器的角色),且积累到一定数量后以DMA形式传输到内存,以中断通知CPU来处理,这样效率就高得多。

图片 35

性能方面,虽然FPGA的频率一般比CPU低,但CPU是通用处理器,做某个特定运算(如信号处理,图像处理)可能需要很多个时钟周期,而FPGA可以通过编程重组电路,直接生成专用电路,加上电路并行性,可能做这个特定运算只需要一个时钟周期。比如一般CPU每次只能处理4到8个指令,在FPGA上使用数据并行的方法可以每次处理256个或者更多的指令,让FPGA可以处理比CPU多很多的数据量。举个例子,CPU主频3GHz,FPGA主频200MHz,若做某个特定运算CPU需要30个时钟周期,FPGA只需一个,则耗时情况:CPU:30/3GHz =10ns;FPGA:1/200MHz =5ns。可以看到,FPGA做这个特定运算速度比CPU块,能帮助加速。

FPGA相对于CPU与GPU有明显的能耗优势,主要有两个原因。首先,在FPGA中没有取指令与指令译码操作,在Intel的CPU里面,由于使用的是CISC架构,仅仅译码就占整个芯片能耗的50%;在GPU里面,取指令与译码也消耗了10%~20%的能耗。其次,FPGA的主频比CPU与GPU低很多,通常CPU与GPU都在1GHz到3GHz之间,而FPGA的主频一般在500MHz以下。如此大的频率差使得FPGA消耗的能耗远低于CPU与GPU。

图片 36

Intel167亿美元收购Altera,IBM与Xilinx的合作,都昭示着FPGA领域的变革,未来也将很快看到FPGA与个人应用和数据中心应用的整合

根据Altera内部文件显示,Altera很早就在研发使用FPGA针对深度学习算法的应用,并在2015年Intel的论坛上展示了产品的性能。结论是在功耗和性能上相对同等级的CPU,有较大的优势。CPU FPGA在人工智能深度学习领域,将会是未来的一个重要发展方向

图片 37

3.3. ASIC——定制化的专用人工智能芯片

ASIC(专用定制芯片)是为实现特定要求而定制的芯片,具有功耗低、可靠性高、性能高、体积小等优点,但不可编程,可扩展性不及FPGA,尤其适合适合高性能/低功耗的移动端。目前,VPU和TPU都是基于ASIC架构的设计。

我们梳理针对图像和语音这两方面的人工智能定制芯片,目前主要有专用于图像处理的VPU,以及针对语音识别的FAGA和TPU芯片。

3.3.1. VPU——你是我的眼

VPU是专门为图像处理和视觉处理设计的定制芯片。根据特定算法来实现定制化的芯片架构,实现特定的图像处理能力,提高效率,是VPU的基础理念。集成在摄像头中的VPU,直接对输入图像进行识别理解,消除了存储器的读写操作。相较主流的移动处理芯片(集成 GPU 的 SoC),VPU 的尺寸更小,视觉处理运算的效能更高。

以Movidiu公司产品Myriad2为例,VPU芯片包括接口电路(Interfaces)、硬件加速器(Hardware Accelerators),矢量处理器阵列(Array of Vector Processors),精简指令集的CPU(RISC CPU)等部分。接口电路支持多路摄像头传感器等外部设备,硬件加速器可以迅速的提高运算处理速度,矢量处理器阵列专门针对机器视觉,精简指令集的CPU(RISC CPU)主要进行任务分配。

图片 38

VPU能够处理各种不同的任务:利用立体摄像机的数据处理深度信息,还有来自声纳传感器的近距离、空间定位,以及用于识别和跟随人的先进光流;它也可以成为虚拟现实、现实增强技术的核心部分,让智能手机以及更便宜的头戴产品达成现如今较为昂贵的系统才能完成的目标。如HTC Vive,这台设备需要比较诡异的头戴式护目镜,还需要两个激光盒子绘制整个空间,并追踪用户的运动。而装备VPU通过移动设备或者耳机就能做到这一点;此外,具备深度学习能力的VPU,能够在设备本地就能利用强悍的图像识别计算,设备能够看见和理解周围的世界,不需要检索云端就能做到,避免了延迟的问题。

目前,VPU的应用市场有机器人、物联网、智能穿戴设备、智能手机、无人驾驶、无人机等。

图片 39

结合光学,在前端实现智能处理识别运算的芯片,正在移动端不断渗透提升。在苹果推出带3D感应功能的结构光方案之后,我们预计会深度推动市场在向具有人工智能功能的特定芯片端迈进。VPU实现了在移动设备端具备PC级别的图像处理能力。通常来说这类图像处理芯片能耗非常高,而且也需要电脑支持,但通过VPU,成功将高级的图像处理方案移植到移动设备中。在前端设备中引入带有AI功能的新架构芯片将带来移动端价值量的提升和潜在的变革。

图片 40

3.3.1. TPU——Google的野心

TPU(Tensor Processing Unit)是谷歌的张量处理器,它是一款为机器学习而定制的芯片,经过了专门深度机器学习方面的训练,它有更高效能。

图片 41

Google对GPU,Intel Xeon E5 v3 CPU和TPU进行了性能对比。在Google的测试中,使用64位浮点数学运算器的18核心运行在2.3 GHz的Haswell Xeon E5-2699 v3处理器能够处理每秒1.3 TOPS的运算,并提供51GB/秒的内存带宽;Haswell芯片功耗为145瓦,其系统(拥有256 GB内存)满载时消耗455瓦特。相比之下,TPU使用8位整数数学运算器,拥有256GB的主机内存以及32GB的内存,能够实现34GB/秒的内存带宽,处理速度高达92 TOPS ,这比Haswell提升了71倍,此外,TPU服务器的热功率只有384瓦。但TPU是专为Google深度学习语言Tensor Flow开发的一种芯片,不具有可扩展性。

图片 42

3.4. 人工神经网络芯片

从底层架构的变革角度看,最前沿的革新以深度学习原理打造的人工神经网络芯片。人工神经网络是模仿生物神经网络的计算架构的总称,由若干人工神经元节点互连而成,神经元之间通过突触连接。每个神经元其实是一个激励函数,突触则是记录神经元间联系的强弱权值。

神经网络是多层的,一个神经元函数的输入由与其相连的上一个神经元的输出以及连接突触权重共同决定。所谓训练神经网络,就是通过不断自动调整神经元之间突触权重的过程,直到输出结果稳定正确。然后在输入新数据时,能够根据当前的突触权重计算出输出结果。以此来实现神经网络对已有知识的“学习”。神经网络中存储和处理是一体化的,中间计算结果化身为突触的权重。

冯诺伊曼架构的传统处理器处理神经网络任务时效率低下,是由其本身的架构限制决定的。冯诺伊曼架构存储和处理分离,基本运算为算术和逻辑操作,这两点决定了一个神经元的处理需要成百上千条指令才能完成。以AlphaGo为例,总共需要1202个CPU 176个CPU。

图片 43

3.4.1. 寒武纪——真正的不同

真正打造的类脑芯片,寒武纪试图将通过低功耗高性能的架构重塑,颠覆已有的冯诺伊曼架构,实现在移动端/云端的加速器实现。

图片 44

从寒武纪披露的数据来看,其性能远超GPU和CPU。

图片 45

寒武纪试图将代表性智能算法的处理速度和性能功耗比提升一万倍,在移动端实时完成图像语音和文本的理解和识别,更为重要的是通过实时训练,还能不断进化提升能力,真正实现超越。

图片 46

从2个维度测算人工智能芯片空间

我们在前二章重点讨论了Intel和ARM的历史发展,认为冯诺伊曼架构带来了计算体系的建立并通过Intel实现了最大化;ARM通过共享IP的商业模式带来了更开放的生态体系,实现了软硬件的结合延伸了人类的触角。同时我们认为人工智能芯片将有可能在摩尔定律放缓维度下引发芯片底层架构重构的变革。

本章我们重点讨论人工智能芯片的市场空间测算,我们从两个维度来进行估算,给出详细的拆解。

维度一:市场规模反推芯片空间

根据Nvidia官方给出的资料统计,到2020年,由软件、硬件、服务三者组成的人工智能市场将达到400亿美元,其中硬件占到1/3强,为160亿美元。而硬件的核心是芯片。我们估算硬件的BOM,芯片会占到60%,芯片空间将达到96亿美元。

图片 47

维度2:详细拆分云端/移动端所需人工智能加速器的BOM

人工智能芯片从用途来看,分为云端加速器芯片和终端(包括智能手机、无人驾驶汽车、)智能芯片。我们基于这两个场景,给出结论,预测至2021年,人工智能芯片市场有望达到111亿美元,CAGR达20.99%。

图片 48

云端加速器详细拆解

具体来看云端方面,根据Gartner的统计,到 2020 年,全球云计算市场规模将达到 3834亿美元,其中,云基础设施服务市场规模达863.5亿美元。

图片 49

我们假设深度学习相关基础设施占云基础设施的20%,而其中人工智能芯片占深度学习相关硬件BOM的50%,据此,我们测算云端方面人工智能芯片市场规模将从2016年的32亿美元增至2021年的106亿美元,CAGR达21.77%。

图片 50

终端加速器市场详细拆解

终端方面,目前人工智能芯片主要应用领域是智能手机、无人驾驶汽车和无人机。我们假设:

1)智能手机全球出货量年均增速3.3%,主处理器平均价格15美元,带人工智能芯片模块占智能手机主处理器BOM的10%

2)带人工智能功能的智能手机渗透率从2018的10%提升到2020年的40%。;

3)无人驾驶汽车市场规模年均增速10%。因无人驾驶汽车以及其芯片市场均尚未成型,目前成本较高,我们假设芯片成本占总成本的20%,人工智能芯片占处理器成本的10%。据此预测终端领域人工智能芯片的市场规模。

据此我们预测,在终端领域,至2021年,全球人工智能芯片市场规模由2016年的3.05亿美元增至5.55亿美元,CAGR为10.49%。其中,智能手机市场中,人工智能芯片由2016年的2.25亿美元增至2021年的4.26亿美元,CAGR为11.24%;无人驾驶汽车市场中,人工智能芯片由2016年的0.80亿美元增至2021年的1.29亿美元,CAGR为8.27%。

图片 51

重点标的

台积电:无论是何种架构的人工智能芯片,都是依赖于台积电最先进制程的代工工艺,在全球只有台积电能够提供HPC(高性能计算芯片)的工艺平台上,行业的卡位优势已然确立,确定性受益标的。

Intel:收购Altera,收购Movidius,CPU FPGA方案,Intel在人工智能领域的布局长远,而通过我们的测算,服务器端将是人工智能芯片未来行业渗透和消耗的重点,而Intel在服务器端已经有深厚不可撼动的优势。

NVIDIA:目前人工智能芯片领域的领跑者,深度学习训练领域的唯一方案选择。有完整的生态布局,针对云端 汽车自动驾驶,百亿美元新增市场的竞争者。

寒武纪:寒武纪试图将代表性智能算法的处理速度和性能功耗比提升一万倍,在移动端实时完成图像语音和文本的理解和识别,更为重要的是通过实时训练,还能不断进化提升能力,真正实现超越。

富瀚微:国内上市公司智能视频监控领域的前端芯片方案解决商,在前端芯片集成一定的智能算法功能处理。

北京君正:积极进入视频监控领域的芯片方案解决商,曾经的MIPS方案芯片设计商,有芯片架构层基因,对标Movidius。

全志科技:SoC芯片方案解决商,未来能将AI算法模块嵌入SoC之中。

本文由9778818威尼斯官网发布于科技技术,转载请注明出处:芯片架构变革,戴德曼翻译

您可能还会对下面的文章感兴趣: