一窥人工智能下的处理器-张鑫博士

2021-01-15

随着人工智能(Artificial Intelligence, AI)、深度学习(Deep Learning)技术的快速发展,越来越多的各类新型芯片名词 GPU、TPU、DPU、NPU 等陆续出现在人们的视野 [1] ,这些都是什么呢?有什么用途?如何区分?

QQ截图20210115163834.png

1. 引述

目前世界范围内的主流标准化逻辑电路可以总括为四种:

CPU(Central Processing Unit,中央处理器);

GPU(Graphics Processing Unit,图形处理器);

ASIC(Application Specific Integrated Circuit,专用集成电路);

FPGA(Field Programmable Gate Array,现场可编程门阵列)。

CPU 作为计算机系统的运算和控制核心,是信息处理、程序运行的最终执行单元。自诞生以来,在逻辑结构、运行效率以及功能外延上取得了巨大发展 [2] 。人工智能芯片主要包括 GPU 以及可通过 FPGA 和 ASIC 两种途径分别半定制和全定制实现。GPU 的应用方向是高级复杂算法和通用型人工智能平台。FPGA 是作为 ASIC 领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数目有限的缺点,更适用于各种具体的行业,以较小的成本实现快速迭代。ASIC 是全定制芯片,由于算法复杂度越强,越需要一套专用的芯片架构与其进行对应。基于人工智能算法进行独立定制的 ASIC,具有较好的发展前景,TPU(TensorProcessing Unit,张量处理器)、NPU(NeuralNetwork Processing Unit,神经网络处理器)DPU(Deep learning Processing Unit,深度学习处理器)等热门人工智能芯片都属于 ASIC。ASIC 相当于将软件固化成硬件,让硬件天然的适合于某一类运算。还有,类脑芯片是人工智能最终的发展模式,但是离产业化还很遥远。 [3]

333.png

2. 处理器的 发展 脉络 与 架构 特点

2.1 CPU

CPU 是机器的“大脑”,也是布局谋略、发号施令、控制行动的“总司令官”。

CPU 的结构主要包括 ALU(Arithmetic and Logic Unit,算术与逻辑单元)、控制单元(CU, Control Unit)、寄存器(Register)、高速缓存器(Cache)和它们之间进行通讯的数据、控制及状态总线。简单来说就是:计算单元、控制单元和存储单元,其架构简图如下图所示:

444.png

图中,DRAM 表示动态随机存取存储器(Dynamic Random Access Memory)。从字面意思也容易理解, 计算单元主要执行算术运算、移位等操作以及地址运算和转换; 存储单元主要用于保存运算中产生的数据以及指令等; 控制单元则对指令译码,并且发出为完成每条指令所要执行的各个操作的控制信号。所以一条指令在 CPU 中执行的过程是这样的:读取到指令后,通过指令总线送到控制器(黄色区域)中进行译码,并发出相应的操作控制信号;然后运算器(灰色区域)按照操作指令对数据进行计算,并通过数据总线将得到的数据存入数据缓存器(大块绿色区域)。

CPU 遵循的是冯诺依曼架构,其核心就是: 存储程序,顺序执行。从 CPU微架构示意简图中可以看到,负责计算的灰色区域占的面积相对较小,而绿色的Cache 和黄色的 CU 占据了相对大量的空间。因为 CPU 的架构中需要大量的空间去放置存储单元(绿色部分)和控制单元(黄色部分),相比之下计算单元(灰色部分)只占据了很小的一部分,所以它在大规模并行计算能力上极受限制,而更擅长于逻辑控制。另外,因为遵循冯诺依曼架构(存储程序,顺序执行),CPU就像是个一板一眼的管家,人们吩咐的事情它总是一步一步来做。但是随着人们对更大规模与更快处理速度需求的增加,这位管家渐渐变得有些力不从心。于是,大家就想,能不能把多个处理器放在同一块芯片上,让它们一起来做事,这样效率不就提高了吗?从而,GPU 便由此诞生了。

2.2 GPU

讲解 GPU 之前,先来讲讲上文中提到的一个概念—— 并行计算。

并行计算(Parallel Computing)是指同时使用多种计算资源解决计算问题的过程,是提高计算机系统计算速度和处理能力的一种有效手段。它的基本思想是用多个处理器来共同求解同一问题,即将被求解的问题分解成若干个部分,各部分均由一个独立的处理器来并行计算。流水线处理示意图

555.png

并行计算可分为时间上的并行和空间上的并行。时间上的并行是指流水线技术,例如汽车生产线上的作业线工序包括焊接、冲压、涂装、动力总成等。若不采用流水线生产,一台汽车必须完成所有作业工序才能生产下一台车,效率低下。而采用流水线技术,则能同时生产多辆汽车。这就是并行算法中的时间并行,在同一时间启动两个或两个以上的操作,能大大提高计算性能。空间上的并行是指多个处理器并发的执行计算,即通过网络将两个以上的处理机连接起来,达到同时计算同一个任务的不同部分,或者单个处理器无法解决的大型复杂问题。例如,小张需要抽空自家 4 个池塘的水,若采用 1 台抽水泵要8 小时才能抽空,而采用 4 台抽水泵同时对 4 个池塘进行抽水则仅需 2 小时就能完成任务,这就是并行算法中的空间并行。将一个大任务分割成多个相同的子任务,来加快问题解决速度。所以说,如果让 CPU 来执行这个抽水任务的话,它就会一个一个的抽,但是让 GPU 来抽水,就相当于几台抽水泵同时抽水。GPU 最初是用在个人电脑、工作站、游戏机和一些移动设备(如平板电脑、智能手机等)上运行绘图运算工作的微处理器。为什么 GPU 特别擅长处理图像数据呢?这是因为图像上的每一个像素点都有被处理的需要,而且每个像素点处理的过程和方式都十分相似,也就成了 GPU 的天然温床。GPU 简单架构如下图所示:

444.png

从架构图我们就能很明显的看出,GPU 的构成相对简单,有数量众多的计算单元和超长的流水线,特别适合处理大量的类型统一的数据。但 GPU 无法单独工作,必须由 CPU 进行控制调用才能工作。CPU 可单独作用,处理复杂的逻辑运算和不同的数据类型,但当需要大量的处理类型统一的数据时,则可调用GPU 进行并行计算。

GPU 中有很多的运算器 ALU 和很少的缓存 Cache,缓存的目的不是保存后面需要访问的数据的,这点和 CPU 不同,而是为线程 thread 提供服务的。如果有很多线程需要访问同一个相同的数据,缓存会合并这些访问,然后再去访问DRAM。再把 CPU 和 GPU 两者放在一张图上看下对比,就非常一目了然了:

777.png

GPU 的工作大部分都计算量大,但没什么技术含量,而且要重复很多很多次。尽管 GPU 是为了图像处理而生的,以其在游戏方面的能力而闻名,但在科学计算、密码破译、海量数据处理等方面,GPU 也越来越受欢迎,可以被认为是一种较为通用的芯片。GPU 技术的一些最令人兴奋的应用包括人工智能和机器学习。由于 GPU 包含了非常多的计算能力,它们可以利用 GPU 的高度并行特性,如图像识别,在工作负载方面提供令人难以置信的加速。当今的许多深度学习技术都依赖于 GPU 与 CPU 协同工作。

2.3 TPU

CPU 和 GPU 都是较为通用的芯片,随着人们的计算需求越来越专业化,人们希望有芯片可以更加符合自己的专业需求,这时,便产生了 ASIC(专用集成电路)的概念。

ASIC 是指按产品需求不同而定制化的特殊规格集成电路,由特定使用者要求和特定电子系统的需要而设计、制造。因为 ASIC 很“专一”,只做一件事,所以它就会比 CPU、GPU 等能做多件事的芯片在某件事上做的更好,实现更高的处理速度和更低的能耗。但相应的,ASIC 的生产成本也非常高。而 TPU(TensorProcessing Unit, 张量处理器)就是谷歌专门为加速深层神经网络运算能力而研发的一款芯片,其实也是一款 ASIC。

原来很多的机器学习以及图像处理算法大部分都跑在 GPU 与 FPGA(半定制化芯片)上面,但这两种芯片都还是一种通用性芯片,所以在效能与功耗上还是不能更紧密的适配机器学习算法,而且 Google 一直坚信伟大的软件将在伟大的硬件的帮助下更加大放异彩,所以 Google 便想,我们可不可以做出一款专用机机器学习算法的专用芯片,于是,TPU 便诞生了。

888.png

据称,TPU 与同期的 CPU 和 GPU 相比,可以提供 15-30 倍的性能提升,以及 30-80 倍的效率(性能/瓦特)提升。初代的 TPU 只能做推理,要依靠 Google云来实时收集数据并产生结果,而训练过程还需要额外的资源;而第二代 TPU既可以用于训练神经网络,又可以用于推理。为什么 TPU 会在性能上这么牛逼呢?

999.png

如图所示,TPU 在芯片上使用了高达 24MB 的局部内存,6MB 的累加器内存以及用于与主控处理器进行对接的内存,总共占芯片面积的 37%(图中蓝色部分)。这表示谷歌充分意识到了片外内存访问是 GPU 能效比低的罪魁祸首,因此不惜成本的在芯片上放了巨大的内存。相比之下,英伟达同时期的 K80 只有8MB 的片上内存,因此需要不断地去访问片外 DRAM。另外,TPU 的高性能还来源于对于低运算精度的容忍。研究结果表明,低精度运算带来的算法准确率损失很小,但是在硬件实现上却可以带来巨大的便利,包括功耗更低、速度更快、占芯片面积更小的运算单元、更小的内存带宽需求等,TPU 采用了 8 比特的低精度运算。

2.4 NPU

NPU(Neural network Processing Unit),即神经网络处理器。顾名思义,该处理器是想用电路模拟人类的神经元和突触结构啊!怎么模仿?那就得先来看看人类的神经结构——生物的神经网络由若干人工神经元结点互联而成,神经元之间通过突触两两连接,突触记录了神经元之间的联系。

000.png

如果想用电路模仿人类的神经元,就得把每个神经元抽象为一个激励函数,该函数的输入由与相连的神经元的输出以及连接神经元的突触共同决定。为了表达特定的知识,使用者通常需要(通过某些特定的算法)调整人工神经网络中突触的取值、网络的拓扑结构等。该过程称为“学习”。在学习之后,人工神经网络可通过习得的知识来解决特定的问题。

这时不知道大家有没有发现问题——原来,由于深度学习的基本操作是神经元和突触的处理,而传统的处理器指令集(包括 x86 和 ARM 等)是为了进行通用计算发展起来的,其基本操作为算术操作(加减乘除)和逻辑操作(与或非),往往需要数百甚至上千条指令才能完成一个神经元的处理,深度学习的处理效率不高。这时就必须另辟蹊径——突破经典的冯·诺伊曼架构!神经网络中存储和处理是一体化的,都是通过突触权重来体现。而冯·诺伊曼架构中,存储和处理是分离的,分别由存储器和运算器来实现,二者之间存在巨大的差异。当用现有的基于冯·诺伊曼结构的经典计算机(如 X86 处理器和英伟达 GPU)来跑神经网络应用时,就不可避免地受到存储和处理分离式结构的制约,因而影响效率。这也就是专门针对人工智能的专业芯片能够对传统芯片有一定先天优势的原因之一。

以中国的寒武纪为例(NPU 典型的国内代表),DianNaoYu 指令直接面对大规模神经元和突触的处理,一条指令即可完成一组神经元的处理,并对神经元和突触数据在芯片上的传输提供了一系列专门的支持。用数字来说话,CPU、GPU 与 NPU 相比,会有百倍以上的性能或能耗比差距——以寒武纪团队过去和Inria联合发表的DianNao论文为例——DianNao为单核处理器,主频为0.98GHz,峰值性能达每秒 4520 亿次神经网络基本运算,65nm 工艺下功耗为 0.485W,面积 3.02 平方毫米。

11111.png

2.5 HPU

全息处理器(Holographic Processing Unit, HPU)是可以与 CPU 和 GPU 共同运作的一块协处理器芯片,由微软在 2015 年 1 月 21 日公布。它集成于微软HoloLens 之中(HoloLens 是微软公司开发的一种混合现实头戴式显示器 [4] ),使得 HoloLens 能够在现实中叠加显示虚拟的全息物品(增强现实)。该处理器提供给诸如 HoloLens 一类的设备来确定当前用户的视觉范围,绘制周围环境以及处理身体姿势和语音命令 [5] 。

22222.png

3.  展望

当前软件算法已经优化得足够好,硬件似乎有点跟不上信息时代大数据处理和 AI 应用的发展脚步。而由于传统 CPU 算力不足,发展新架构芯片支撑人工智能应用成为必然趋势。当前面向人工智能硬件优化升级有两种发展路径:(1)延续传统计算架构,加速硬件计算能力:以 GPU、FPGA、ASIC(TPU、NPU、HPU 等)芯片为代表,采用这些专属芯片作为辅助,配合 CPU 的控制,专门进行人工智能相关的各种运算;(2)彻底颠覆传统计算架构,采用模拟人脑神经元的结构来提升计算能力,由于技术及底层硬件的限制,后一种路径仅处于前期研发阶段,当前不具备大规模商业应用的可能性。

参考目录:

[1] https://www.icinsights.com/

[2] https://baike.baidu.com/item/CPU

[3] https://www.zhihu.com/question/294757410/answer/1539569407

[4] http://www.pc6.com/infoview/Article_95570.html

[5] https://baike.baidu.com/item/全息处理器