0
本文作者: 吴京鸿 | 2019-07-26 18:10 |
【大咖Live】 人工智能与芯片专场第二期,我们邀请到了Open AI Lab的Tengine产品生态总监高锦炜,带来了关于《AIoT芯片的发展趋势与应用落地》的主题直播分享。目前,本期分享音频及全文实录已上线,「AI投研邦」会员可进雷锋网(公众号:雷锋网)「AI投研邦」页面免费查看。
本文对这期分享进行部分要点总结及PPT整理,以帮助大家提前清晰地了解本场分享重点。
分享提纲
1 传统芯片 VS AI芯片;
2 AI芯片的痛点 -- 从零开始的软件开发工具;
3 应用开发痛点 -- 芯片碎片化;
4.Tengine开放的AIoT软件开发平台。
以下为Open AI Lab的Tengine产品生态总监高锦炜的部分直播分享实录,【AI投研邦】在不改变原意的基础上做了整理和精编。完整分享内容请关注【AI投研邦】会员内容。
欢迎大家来雷锋网参加我的讲座,我本次讲座主题是AIoT芯片的发展趋势与应用落地。首先先自我介绍一下的,我叫高锦炜,是Open AI Lab的Tengine产品生态总监。我之前是嵌入式的AI技术专家,之前曾在arm担任技术市场经理,负责arm技术的推广,所以我之前是属于芯片行业的,所以对AI芯片这一块了解比较多,然后现在是投身于AI软件的应用开发与落地,所以也比较懂应用,因此这次给大家分享这个主题。
这次的主题是AIoT芯片和应用落地,不知道大家看到这个标题怎么想的,其实芯片与应用落地这是跨度非常大的两件事情,因为芯片是处于技术上面产业链上非常上游的技术产品,而商业应用落地则是非常下游的偏商业和工程化的一件事。所以其实两件事情跨度非常大,我尽量深入浅出给大家解释清楚当前AI芯片以及落地的一个情况。
首先先给大家解释一下,AIoT这个词的话今年应该算是非常热门的一个词了,他是AI加LoT的这么一个概念,AI是人工智能,LoT是物联网,那么Ai+LoT的加起来即,万物互联同时的每一个物体它又有一定的AI的智慧能力,能够进行logo的存储数据,那么当AI和LoT技术结合起来的时候,看到会有一个技术的大爆发。所以首先先来给大家分享一则今天看到很有意思的新闻,就是哥伦比亚大学一个博士后斯蒂芬J cook,他在他发表1篇论文地刊登在了nature的封面上面,论文的内容是说他花了八年时间手绘绘制了一个现成的神经的图谱。
其实这是非常有益的一件事情。是因为目前人工智能只是神经网络这么一个科学,其实它最这背后的科学原理,人们并没有真正地参透,目前人类只是从工程学的角度发现通过仿生学的神经网络,通过这种方式去编程,能达到非常好的效果,那么就再去使用了,背后的原理其实一直不清楚。那么这次的话线虫它的一个特殊点在于就是说它的整体的神经结构非常简单,它就只有一千个细胞,其中大约1/3也就300个是脑细胞,也就是神经元,然后所有的神经元连接只有7000个,那么其实是一个对我们来说已经是一个比较简单的神经网。
通过神经网络结构,300个神经元加7000个神经网络结构,就控制线虫它的运动饮食,然后屈光闭光,还有升值等等特性,整个生命的体系就这几百个神经来控制。那么其实如果说我们能够通过研究现成的神经系统系统,能够发现整个神经网络它运行的奥秘的话,对于整个神经网络科学的发展是非常有意义的。这个论文的链接就我在PPT里放出来了,大家可以直接搜一下,感兴趣的话可以读一下英文原文,我觉得还是非常有意义的。
好,我们来看一下今天的正题。首先的话我想给大家这边先简单的科普一下,什么是AI计算?因为AI这个词的话,如果只是通过简单的媒体上面来看的话,这个词应该是一个比较高深的。但是因为我今天分享主题是AI芯片的设计与落地,并且这边的小编要求我说能够最好讲一些比较技术化的落地接地气的东西,所以我就只能这边深入浅出的给大家讲介绍一下AI计算原理。
接着之前线虫的例子说它总共有300多个神经元,7000多个神经链接,每一个神经元的话,其实就是在看我PPT里面左上角长成这样的,大家应该高中或初中生我都学过,就是一个神经元它有很多突触然后突触可以接受来自其它神经元的一个新兴奋,然后当他接触到兴奋然后并且超过一个阈值的时候,它就会把兴奋传递给下一个神经元,那么这就是整个神经网络里面的最基本的一个单元神经元。
其实这是很有意思的一件事情,就是说就通过有成千上万,甚至上亿个这种神经元的这么一个连接,能够就可以让人类完成非常复杂的,甚至是思考人生哲理这样的问题。那么这么好用的神经元方式的话,那么我们这一次我们这一波的人工智能的浪潮里面究竟是如何去仿生和实现功能的基本原理的话,大家可以看我的PPT里面左下角这个图左下角这个图,这个公式就是可以看到什么?
这个其实就是一个神经元的数学建模。其实我不太想讲公式,但是我相信大家理解这个公式还是非常有必要的!这对理解后面的整体的演讲都大家可以看,就是说左下角这个图里面,我们可以想象成a1到ak其实它都是来自其它神经元的这么一个兴奋的传导。然后WE到WK则是对应的是每个神经元它有一个兴奋的一个权重值,那么当你兴奋传导的时候乘以权重值,然后把它累加起来,那么就是神经元接受到了总体的兴奋,当神经元它接收到所有兴奋的超过它本身有个阈值之后,那么它自己就会产生兴奋,并且把这个兴奋传递下去,那么这是可以看到这个函数最右边的输出A值,也就是这边写的Z然后通过一个Activation function的方式就是激活函数,当超过某个阈值的时候,它就会输出A的兴奋。
这就是通过以数学的方式来模拟神经元那么那种兴奋传导。那么为什么要等这个公式?因为请大家看一下,就是说这边Z的计算是通过A乘W1,然后再加上A2乘W2,有非常多的有K个成累加,就是乘法的结果,并且把它累加起来算出那个结果。所以就是说一个神经元它就包含了K个乘累加操作。乘累加这个概念大家一定要记住,因为后面的话会多反复多次提到这个概念。
左下角这个方框只是解释了说一个神经元,我刚才提到是说我们线虫它有300多个神经元,并且是相互连接的,那么这个连接,就可以看到我PPT右上角那个图,这个右上角图的话是可以看到中间每一个小圆圈,无论是蓝色、红色还是绿色,其实就是一个神经元。这个神经元会接受来自于它左边那一层的各个神经元的刺激,同时它会传导出兴奋下给它右边的神经元。
可以看到在这张图里面的话它有一层一层,每一层有多个神经元,然后通过这种方式就可以产生一个神经元的级联,它层次非常多,我们管它叫深度,那么这就是深度神经网络的一个基本的数学模型。可以看到就是说一个神经元它又有K个乘累加,那么有这么多神经元它就会有非常多乘累加。所以右上角这张图就是代表是神经元级别的一个数学建模,在实际应用场景里面,我们并优化找着这样的模型,简单的DNN就是深度神经网络,实际使用的话,我们都会用复杂多的网络,那么右下角这张图其实是从非常经典的,就是这一波人工智能兴起的开山鼻祖的论文,里面摘出来的它的网络结构的拓扑图。大家可以看到就是说这里面首先它分了很多层,总共有八层三个五个卷积层,三个全列间层,然后参与层之间都是神经元的链接,然后每一层都有几百个神经元,那么整个网络它总共有60兆,也就是60个百万的参数。
整个进行这么一次前向计算会有720兆的一个复检操作。720兆附件操作计算完了之后,他可以做什么?它可以识别,对一张图像进行分类识别,这是不是一个猫,识别这是不是一个苹果、一辆自行车、一个汽车等等。就是说这其实是做一个分类操作,是神经网络里面最简单的一个操作,因为AlexNet网络有720兆个Flops的操作,这是非常多的一个计算,那么为什么要强调这个概念?就是因为在神经网络计算中会有那么多乘累加操作,所以传统的计算机形态已经不适合去做这样的运算了。为什么不适合这边再给大家就说就是720兆,那么假设你用一个1G赫兹的,然后一个周期能做四个乘累加运算的这么一个cpu的话,它要总共去运行180毫秒,他才能够进行一次前向计算,180毫秒的话差不多如果你算下来就只有六帧的一个识别速度,那么在很多应用场景其实是不满足需求的。
我相信经过这样介绍的话,大家应该对神经网络计算有一个感性的认识,就是两点,首先它是模仿神经元的,其次它有非常多的乘累加运算。所以这边就抛出一个基本的概念,就是说传统芯片和AI芯片它是一个完全不同的计算机建模的方式,由于它的完全不同的计算方式,所以他要完全不同的一种软硬件去支持。怎么说完全不同,我不知道听众里面有多少是计算机体系结构背景的,我是学数字电路和逻辑学计算机体系结构,就是学cpu设计出身的,那么我从大学开始学习的与或非门,通过那种逻辑操作去实现复杂逻辑。
那么大家可以看,就是说在我的PPT里面,左半部分的话基于就是一个传统的芯片,它最基本的一个计算单元就是非门与门或门,然后通过这样的逻辑单元,我们去拼接出加法器、乘法器、除法器,或者是存储器,然后再通过加减乘除的逻辑分支跳转进行程序的运算,然后通过整个程序的控制,也是通过顺序循环分支,大家如果学过C语言C++这种最基本的程序设计方法,从整个计算机结构,从冯诺依曼当年提出计算机理论,也就从40多年起前起,就是一直遵循这套理论,通过顺序循环分支的方式来增加复杂度完成各种各样复杂功能。那么采用这种传统计算机方式,它的优势在于它计算精度很高,由于它数字电路去实现的,所以它里面0就是0,1就是1,所以它适合逻辑运算和算术运算。神经网络计算刚才前面给大家介绍过,他是完全另一套不同的计算方式,它的基本运算单元是一个并行的带权重的非线性激活的神经元,然后它的编程模型也不是像传统计算机一样的顺序循环分支,而是一个靠计算图层的拓朴结构设计,以及里面海量的可调的参数,还记不记得前面AlexNet多少层,他有60兆个参数在里面。
靠着海量参数你去调整,来设计各种神经元进行工作。那么整个编程复杂度也是体现在调参上面,其实有一个比较好笑的,就是说现在做算法的人,他们都会自称自己是练单式或训模式,就是在不停的调参数,调参数这件事情又是一个比较玄学的,理论基础不是非常强的,所以有点靠运气有点像炼丹一样。然后神经网络算法的优点是容错性很好,像某个审计员工作不正常了,但是由于它有一个比较好的变形机制,这样的话,它即使一其中某个神经元工作不正常,他仍然能够很好的work,并且比较适合模式识别。
它有一个特点是说,由于其实按照正常情况来说的话,神经网络应该是一种非常高效计算模式,因为大家可以想象我们人脑其实也就总共加起来,生物学上也才两瓦的功率,但是可以进行非常计算复杂。但是在芯片上面去做AI计算,完全不是采用生物这套模式,而是采用传统计算机还是用与或非门逻辑搭出来的乘法器、乘加器,来模拟神经网络信号传输,这导致了需求算力的爆炸,因为一个神经元我们可能就要有N个乘法乘加操作。
因为有这样的算力爆炸,所以就有了开发专门的AI芯片需求。这边的话我给大家放三张图,分别是CPU、 DSP 、GPU,还有现在在神经网络处理器里面非常常见的阵列。这三种分别代表了现在去做神经网络计算这么一个实现构架。
首先先回答一个问题,其实现在大家有个共识,就是说传统cpu是不怎么合适拿来做AI计算的,这是为什么?其实从原理上来说的话,从图里面就很容易能够看到。前面我提到就是说神经网络计算里面就是有大量的乘加操作,乘加操作在cpu里面的话是由算术这单元去进行运算的,在左下角框里面右上角,由绿色部分AIU去进行乘加操作的,那么一般cpu里面乘加的单元数量,像普通ARM cpu,像比如说cos A72,它里面的话,它成交单元一个周期只能做四个乘与加,但是如果说你做整形的话可能会多一些,你有八位整形的话能做八个。
因为CPU它主要目的是做通用控制,所以你看它花很多的硬件逻辑在控制上面,所以就看到芯片面左边有蓝色,这部分有它很大一部分的控制单元在里面。其实就是说在CPU里面由于有它有大量的逻辑在进行做控制运算,而真正做乘加运算的逻辑部分的绿色部分就很少,导致用CPU去做乘加运算效率不高。所以大家都说坐用CPU去做AI计算不合适,其实大量的服务器PC都是在用GPU做AI计算的,那么看就是中间这张图。、
GPU的设计特点是有大量的小的单元,简单的ALU就是绿色部分,有大量的小的单元去做计算。但同时它的控制逻辑会非常小,可以看到左侧蓝色和黄色部分,所以用GPU做AI计算比CPU高很多,不过大家认为GPU算力很高,其实是只有是桌面级的NV的GPU,它的算率会非常高。
它的算率高是因为NV的gpu里面做了通用设计的进行优化,所以它是可以做通用计算的。那么而如果在嵌入式侧的arm的gpu里面,由于它在一个在电源非常紧的一个环境里面,因为手机里面用电池的,所以它的主要功能还是做图形渲染玩游戏用的,里面有大量逻辑是做图形的,真正可以用作通用计算的部分的单元其实也没有非常多。
然后同时由于整体的功耗限制,在arm芯片里面的arm的gpu合同,和同一块芯片里面另一个CPU,它的算力其实是差不多是一个level的,最多高一倍,但还是一个数量级的这么一个概念。那么其实这边也刚刚就提到说gpu里面的话它其实有两个功能,一部分功能可以做通计算,一部分是做图形处理,那么如果我们拿GPU做通用计算的话,图形处理这部分的逻辑其实就是浪费了,所以gpu的效率其实也不是最高的。
那么其实现在有一些NPU的设计,专门做神经网站去设计的话,它的一个很简单出发点逻辑,就是把gpu里面与图形相关的部分去掉,那么通过这种方式直接把一个GPU改造成一个做AI计算的NPU。用GPU去做AI计算,其实仍然效率不是最高的,因为因为gpu是一个大规模可编程的一个通用计算的单元,并没有针对AI的这种大规模乘加运算再去做进一步优化。
这边的话就得要提示说,如果针对AI这种计算刚刚提到大规模的乘加运算,其实最后都可以把它转化为二维矩阵相乘。矩阵相乘的话,计算方式是采用脉动阵列,即dataflow数据流这种方式,通过设计一堆乘加器来进行计算。好处是它把控制逻辑简化到了最低,充分利用了矩阵相乘的每个去乘加这么一个特性,那么大幅度简化了他的控制逻辑,这样可以导致整个乘加器的效率非常高,你可以看到整个芯片里面几乎全都是乘加器,控制逻辑就很少。
右边脉动阵列,假设每一个小方框可以理解成一个乘加器,假设是一个100×100的size的话,它就有1万个乘加器了。我们再回想一下,刚才我们就八个乘加器.八和一万就是好几个数量级的差距。刚刚只是从理论上解释,现在说一下实际产业里面,AI加速器芯片的话,它是采用哪种方案多?最早AI加速器有些是采用专用电路设计的,可以看到最右上角的数据脉动阵列,像谷歌的GPU一代是采用这种构架的。
由于AI产业一直在变化更新中,所以只解决了卷积并不够。实际应用行业里面往往会有各种各样的其他算子,其他算子又会不断有更新出来,最后要求硬件一定是一个可编程的。所以结合了脉动阵列做卷积这种高效和可编程的需求,那么目前基本上所有的AI加速器的设计已经基本上殊途同归了,采用两者结合,一块芯片里面的既有可编程部分,可以是一个前面提到了把GPU把图形部分裁剪掉来实现,也可以通过是另一种就是通过DSP的方式来实现。
本文为部分内容和PPT,完整内容和PPT查看可进入雷锋网「AI投研邦」查看;(AI芯片研究报告即将出炉,会员可免费观看)
雷峰网原创文章,未经授权禁止转载。详情见转载须知。