谷歌前些天发布了专为其深度学习算法Tensor Flow设计的专用集成芯片,命名为张量处理单元(Tensor Processing Unit:TPU),我们都知道,相对于谷歌的软件产品来说,它自行设计的硬件产品的登场往往没有那么高调,偶尔会以雷声大雨点小的结局收尾。但这次的新硬件涉及的领域是谷歌极为擅长和领先的深度学习。结合近期谷歌和各大科技巨头在AI方面的动向,不难猜到这块芯片对于谷歌和AI开发者来说意义重大,并且会对产业起到深远的影响。但谷歌为什么要在通用硬件性能已经十分强大的现在仍然会为了深度学习算法专门开发一款硬件,而这块芯片对其他巨头来说又意味着什么,解释起来就不是一件那么容易的事了。
对于任何运算来说,更换新硬件无非是为了两个目的:更快的速度和更低的能耗。而深度学习这个看起来玄乎的词语,究其本质也不过是大量的运算。我们都知道那句老话:万能工具的效率永远比不上专用工具。无论是CPU、GPU还是FPGA,其属性都算是一种通用工具。因为它们都可以应付许多不同的任务。而专用的TPU自然从道理上来说就应该会比前面几种硬件的效率都要高。这里的效率高,既是指速度更快,也是指能耗会更低。
但我们不能光讲道理,也要摆出一些数据。实际上,Xilinx曾经表示在特定的FPGA开发环境下深度学习的能效比会达到CPU/GPU架构的25倍,不是一倍两倍, 是25倍!同学们可以拿出纸和笔了,让我们举一个实际的例子来讲讲这种效率提升的原因:以在深度神经网络(DNN)上进行的图像识别为例子,网络的整个结构大致是这样的:
图片来源:gitbooks.io
其中除输入层是用来将图像的特征提取为函数、输出层用来输出结果外,其他的隐层都是用来识别、分析图像的特征的。当一幅图被输入时,第一层隐层会首先对其进行逐像素的分析。此时的分析会首先提取出图像的一些大致特征,如一些粗略的线条、色块等。如果输入的是一张人脸的图像,则首先获得的会是一些倾斜的颜色变换。
第一层的节点会根据自己对所得信号的分析结果决定是否要向下一层输出信号。而所谓的分析过程,从数学上来看就是每个隐层中的节点通过特定的函数来处理相邻节点传来的带权重值的数据。并决定是否向下一层输出结果,通常每一层分析完成后便有些节点不会再向下一层输出数据,而当下一层接收到上一层的数据的时候,便能在此基础上识别出一些更复杂的特征,如眼睛、嘴巴和鼻子等,
逐次增加辨识度之后,在最高一层,算法会完成对面部所有特征的识别,并在输出层给出一个结果判断。基于不同的应用,这个结果可能有不同的表现。比如分辨出这是谁的脸。
图片来源:机器之心
不难想象,由于每一层分析的时候都要对极大量的数据进行运算,因此对处理器的计算性能要求极高。这时CPU的短板就明显的体现出来了,在多年的演化中,CPU依据其定位需要不断强化了进行逻辑运算(If else之类)的能力。相对的却没有提高多少纯粹的计算能力。因此CPU在面对如此大量的计算的时候难免会感到吃力。很自然的,人们就想到用GPU和FPGA去计算了。
实际的计算能力除了和硬件的计算速度有关,也同硬件能支持的指令有关。我们知道将某些较高阶的运算分解成低阶运算时会导致计算的效率下降。但如果硬件本身就支持这种高阶运算,就无需再将其分解了。可以节省很多时间和资源。
FPGA和GPU内都有大量的计算单元,因此它们的计算能力都很强。在进行神经网络运算的时候速度会比CPU快很多,但两者之间仍存在一些差别。GPU出厂后由于架构固定硬件原生支持的指令其实就固定了。如果神经网络运算中有GPU不支持的指令,比如,如果一个GPU只支持加减乘除,而我们的算法需要其进行矩阵向量乘法或者卷积这样的运算,GPU就无法直接实现,就只能通过软件模拟的方法如用加法和乘法运算的循环来实现,速度会比编程后的FPGA慢一些。而对于一块FPGA来说,如果FPGA没有标准的“卷积”指令,开发者可以在FPGA的硬件电路里“现场编程”出来。相当于通过改变FPGA的硬件结构让FPGA可以原生支持卷积运算,因此效率会比GPU更高。
其实讲到这里,我们已经比较接近谷歌开发TPU的原因了。TPU是一种ASIC,这是一种与FPGA类似,但不存在可定制性的专用芯片,如同谷歌描述的一样,是专为它的深度学习语言Tensor Flow开发的一种芯片。因为是专为Tensor Flow所准备,因此谷歌也不需要它拥有任何可定制性了,只要能完美支持Tensor Flow需要的所有指令即可。而同时,TPU运行Tensor Flow的效率无疑会是所有设备中最高的。这就是谷歌开发TPU的最显而易见的目的:追求极致的效率。
目前有许多厂商已经在AI领域投入了大量的精力并且显示出一些野心,在TPU发布之前,这个领域内的大多数厂商都在同时利用FPGA和GPU来改进训练自己的神经网络算法。NVIDIA则是其中比较特殊的一家:它是世界最大的GPU制造商之一,一直在不遗余力的推广自己的产品在深度学习领域的应用。但其实GPU的设计初衷主要并不是进行神经网络运算,而是图像处理。更多是由于其特殊的构造碰巧也比较适用于神经网络运算罢了,尽管NVIDIA也在推出一些自有的深度学习算法,但由于GPU自身的特性一直还是被FPGA压着一头。而此次的TPU会让这个市场上凭空再多一个竞争对手,因此如果让我投票,我认为这款TPU对NVIDIA的影响是最大的。虽然谷歌表示不会将这款芯片卖给别的公司,意味着它不会和其他公司产生直接的竞争。但谷歌的芯片如果性能更优秀,开发者们和服务商将越来越多的转向谷歌提供的服务,而不再使用其他厂商的服务和硬件,这也会间接对其他厂商,尤其是NVIDIA的业务造成影响。
其次是以英特尔为代表的“中间层面”的厂商,英特尔去年年底收购了全球知名的FPGA大厂Altera,显然不会忽略其在深度学习方面的潜力。但截至目前英特尔并没有明确的表现出自己要进军人工智能领域的决心,也没有表示自己会推出什么人工智能产品,而只是表达出了一些将相关特性应用到自己已有产品内的意愿。其实对于这样的厂商来说,除非他们自己其实已经秘密的进行了很久的人工智能产品开发。不然其实市场的竞争更多只是为他们带去了更好的工具,不会对他们的利益造成什么冲击。当然,如果谷歌未来还打算自己设计CPU就另当别论。但是目前谷歌表示自己并没有这种意愿,而且,那也是另外一个故事了。
另一些在人工智能领域已经与谷歌有着相似程度的成就的公司则预计不会受到太多影响,如微软和苹果。微软一直在探索FPGA对人工智能相关运算的加速,并且有自己开发的算法。经过长时间的调试,基于FPGA的这些算法也未必会在最终表现上输给谷歌多少。如果微软愿意,其实它也可以随时开始开发一款自己的人工智能芯片,毕竟微软也是自己开发过很多专属硬件的了。
NVIDIA大力推广自己的GPU对深度学习算法起到的加速效果,但在宣传的文章中绝口不提FPGA,无疑也是因为明白自己的产品相对于FPGA不仅没有明显的优势反而有些不足。而TPU杀入战场无疑会更加加剧NVIDIA的压力。GPU的特性短时间内可能没法有翻天覆地的改变,NVIDIA在人工智能领域短期内最应该做的,可能就是寻找到适合GPU发挥的特殊场景然后发扬光大了。至于同FPGA和TPU的正面竞争,或许还得再等几代。