随着人工智能浪潮的兴起,人工智能基础芯片作为主要的计算力推动引擎也越来越受到追捧和热议,这个系列连载会介绍人工智能芯片兴起的背景和现有主要玩家以及研究现状,主要包括NVidia GPU、Google的TPU、Intel的Nervana、IBM的TreueNorth、微软的DPU和BrainWave、百度的XPU、Xilinx的xDNN、寒武纪芯片、地平线以及深鉴科技的AI芯片等,基本上是GPU、FPGA、神经网络芯片三分天下的趋势,三种芯片各有各自的优劣,都在面向自己独特的细分市场。
本章先聊一聊深度神经网络和NVidia GPU的崛起。
人工神经元和深度神经网络
人工智能的终极目标是模拟人脑,人脑大概有1000亿个神经元,1000万亿个突触,能够处理复杂的视觉、听觉、嗅觉、味觉、语言能力、理解能力、认知能力、情感控制、人体复杂机构控制、复杂心理和生理控制,而功耗只有10~20瓦。
这是人脑基本神经元和突触:
这是人工神经元模拟神经元:
输入模拟神经元输入电信号,权值模拟神经元之间的突触连接,激活函数模拟突触之间的电信号传导。
早在1981年David Hubel和Torsten Wiesel就发现了人的视觉系统的信息处理是分级的,因此获得了诺贝尔医学奖。如图所示,从视网膜出发,经过低级的V1区边缘特征提取,到V2区识别基本形状或目标的局部,再到高层的目标识别(例如识别人脸),以及到更高层的前额叶皮层进行分类判断等,人们意识到高层特征是低层特征的组合,从低层到高层越来越抽象,越来越能表达语义或者意图。
深度神经网络模型模拟人脑识别的分层识别过程:
深度神经网络的输入层模拟视觉信号的输入,不同的隐藏层模拟不同级别的抽象,输出层模拟输出的对象分类或者语义等。
从上图的典型的人脸识别的训练任务来看,按照10层深度神经网络、训练上百万张图片,大概需要30 Exaflops的计算能力,如果还是用CPU来做训练,大概需要训练一年的时间,这显然是无法忍受的速度,亟待需要计算能力更强的人工神经网络芯片出现。
NVidia GPU的崛起
NVidia GPU的CUDA战略和野心
可能有很多人会问,目前在人工智能领域,NVidia GPU为什么具有无可撼动的霸主地位,为什么AMD的GPU和NVidia GPU性能相差不多,但是在人工智能领域的受欢迎的程度却有天壤之别。
我们知道GPU原本就是显卡,它是为游戏和渲染而生的,它里面核心运行单元是shader,专门用作像素、顶点、图形等渲染用的。
NVidia在2006年的时候跨时代的推出了统一计算设备架构CUDA(Compute Unified Device Architecture)以及对应的G80平台,第一次让GPU具有可编程性,让GPU的核心流式处理器Streaming Processors(SPs)既具有处理像素、顶点、图形等渲染能力,又同时具备通用的单精度浮点处理能力,NVidia称之为GPGPU(General Purpose GPU),黄教主的野心是让GPU既能做游戏和渲染也做并行度很高的通用计算。
2006年,第一代GPGPU架构G80
G80有16组流式处理器Streaming Processors(SPs),每组SP里有16个计算核心,一共128个独立的计算核心,单精度峰值计算能力可达330 Gflops,而同期主流的Core2 Duo CPU只有50 Gflops的处理能力,更为重要的是从G80架构开始,GPU开始支持可编程,所有的计算密集型的并行任务都有可能通过程序移植在GPU上运行起来。
CUDA的编程模型
CUDA将GPU的并行计算能力做了一个非常好的抽象,并且让用户在接触CUDA编程的初期就彻底摆脱CPU的编程模式和思维模式,而是一种全新的、完全并行的编程模式和思维方式,这虽然在初期会有很大的推广障碍,但是一旦推广成功,对于发挥GPU并行性能和效率是非常合适的一种语言,这也是老黄下的一个很大的赌注。
CUDA将GPU的计算单元抽象成3个编程层次:Grids、Blocks和Threads,一个CUDA kernel在执行的前会先把数据和指令传到GPU上,在执行的时候会使用若干个Grids,一个Grid里含有多个Blocks,一个Block里含有多个Threads,调度上一个Block的Threads会调度到一个独立的Streaming Processors上执行,而16/32个Threads称为一个Warp,Warp是GPU上指令调度的最小单元,一个Warp会同时运行在16/32个计算核心上。
CUDA Everywhere战略
自从推出了CUDA以及对应的可编程平台G80开始,黄教主就开始和教育科研界的老师合作,主要是高性能计算领域的应用,让他们研究把计算密集型的任务搬到GPU上来,当然这些老师看到有这么新颖的架构出来,也是着实非常激动的,能多发论文了,一时间GPU上运行高性能计算任务的论文铺天盖地。
同时,老黄推行CUDA Everywhere战略,不管是PC机上的GeForce、Titan系列,还是数据中心的Tesla系列,还是移动设备上的Tegra系列芯片,全部采用统一的GPU架构,并且全部支持CUDA,现在甚至把所有的处理核心称之为CUDA Cores,这样众多开发者只需要在PC机上插上一块廉价的显卡,就可以做GPU和CUDA的并行程序的开发,并且只需要开发一遍,在所有CUDA设备上都可以执行。
除此之外,老黄还给开发者提供了各种开发者平台、基础软件库、高性能计算库、性能调优工具、集群管理运维工具、NGC(Nvidia GPU Cloud)等易于开发者开发和使用的平台和工具,进一步优化开发者生态系统。
到2017年,CUDA开发者数量已经达到了80万之多,CDUA下载数量超过800万,支持的GPU应用超过了500种,用于深度学习训练加速的cuDNN下载超过84万次。
性能增长超越CPU战略
NVidia从2006年推出Tesla架构以来,不断的更新架构和性能,陆续推出了Femi、Maxwell、Pascal还有最新的Volta架构,基本上保持着2年性能翻1倍的增长态势。
而对CPU的性能加速比,在单精度计算能力上保持着遥遥领先的态势,并且拉开的差距越来越大。
NVidia GPU在超算领域的发展
2009年,美国能源部橡树岭国家实验室的最新超级计算机“泰坦”,装备了18688颗NVIDIA Tesla K20/K20x,登上了全球超级计算机Top500的第一名,开始登上超级计算的历史舞台。
2017年,在全球超算大会SC17上发布的Top500中,由NVidia GPU加速的超级计算机达到了87个,在Green500的前20个能效比最高的超级计算机中,NVidia GPU占据了14个。
深度神经网络+NVidia GPU掀起人工智能浪潮
深度神经网络+NVidia GPU掀起了业界的人工智能浪潮,不得不说这只是老黄整体战略的一个副产品,谁也没有想到,高性能计算领域的一个分支--人工智能会如此火爆。
2011年,负责谷歌大脑的吴恩达通过让深度神经网络训练图片,一周之内学会了识别猫,他用了12片GPU代替了2000片CPU,这是世界上第一次让机器认识猫。
2012年,多伦多大学的Alex和Hinton用GPU加速的深度神经网络AlexNet在ImageNet图像识别比赛上获得冠军,这是第一次只通过深度学习打败了传统的图像识别算法。
2015年,微软研究院用GPU加速的深度神经网络,在ImageNet比赛中获得了多项击败人的辨识准确度,这是第一次机器视觉的识别率打败了人眼的识别率(错误率5%),可以认为是人工智能史上的一个重要里程碑事件。
2016年,谷歌旗下Deepmind团队研发的机器人AlphaGo以4比1战胜世界围棋冠军职业九段棋手李世石(AlphaGo的神经网络训练用了50片GPU,走棋网络用了174片GPU),引发了围棋界的轩然大波,因为围棋一直被认为是人类智力较量的巅峰,这可以看做是人工智能史上的又一个重大里程碑事件。
小结
NVidia GPU经过了12年在GPGPU领域的深度耕耘,建立了庞大的开发者生态系统,这个庞大的生态系统会自我驱动和自我发展,加上NVidia GPU正确的策略方向,NVidia GPU随着人工智能的浪潮到来而开始火爆,变得如此炙手可热。
深耕生态系统正是老黄的高明之处,也是需要耐得住寂寞和长期的前期投入的,没有相当的远见和定力的人是做不到的,通过长时间的投入建立起来的生态系统是竞争对手短时间内无法突破的门槛,不管是做云计算还是做人工智能芯片都是值得深度借鉴的。
但是NVidia GPU还是更擅长处理单指令多数据的任务和单精度的浮点计算,适合做简单的逻辑控制和大规模并行任务,但是对于一些整型计算、稀疏矩阵计算、非规整位宽计算、batch size=1的推理等方面计算能力还是不如FPGA和专用神经网络芯片,下一章继续聊聊别的人工智能芯片。