发布时间:2016-04-26
深度学习对计算能力挑战
The Challenges of Deep Learning on Computing
王琤
阿里巴巴资深技术专家
以下是王琤的演讲实录:
我来自阿里巴巴,今天主要给大家介绍一下深度学习对于整个我们计算能力所带来了一些挑战,其实刚才有嘉宾已经提到了一些内容。首先介绍一下我们的工作,因为我们可能不像刚才几位嘉宾他们都是来做一些深度学习方面的学术研究,以及应用。其实我们的工作是这样的,就是说在阿里大约是2013年的时候开始利用深度学习做一些实际的业务,包括这些业务的落地。我们的工作其实是主要帮助我们所有的业务,以及我们做算法的同学们,更好的利用这个计算资源。所以我们阿里内部有一个统一的计算的集群,主要也是来做高性能计算的。其中最重要的主要工作就是深度学习方面的。
其实我跟所有的专家一起,帮助他们,他们从算法的角度,从实际业务的应用角度,我们其实在如何做计算,如何更好的利用计算能力的角度,帮助他们更好的工作。所以对于深度学习的话我们也有我们的了解。因为不管我们的同事用什么样的深度学习的算法,构建什么样的模型,我们都要对他进行很好的支持。
另外2015年开始,其实更多的创业企业在围绕着深度学习、人工智能,开始一些创业活动。所以这方面我们为了更好的能支持外部的客户,我们其实也开始在阿里云上做一些高性能计算的输出。大家可以在上面获得很强的计算能力,包括CPU、GPU的计算能力,因为这个是大家普遍获得计算能力的来源。所以我们有了云上的高性能的计算。
从我们的角度来说其实我们主要帮助大家来解决计算的问题,因为整个的深度学习对计算有了很大的挑战,如何解决这个问题?我们做了很多的工作。从目前现在的整个算法的发展角度,我们可以抽象出很明显的特征,从我们的角度来看。其实现在首先来说从计算类型,目前主要还是用单精度的计算。同时基本上由于目前的算法来说,在整个的单精度计算,乘法和加法是各占一半的。同时我们的参数其实可以看到模型的参数在不断的增加,虽然我们现在的深度学习的模型参数很多。当然它跟以前,在很早之前比如我们的阿里,机器学习的参数规模可能比深度学习大几个数量级。同时,刚才也有嘉宾讲到其实现在模型有加深的趋势,因为大家对这个有需求。目前来看其中一个很好的方法就是把模型不断的加深,层次加深。
另外就是从计算的角度来说,由于目前的算法,导致目前可能从效能的角度,追求更大的规模量,要比追求更低的延迟,更快的计算速度更是我们关注的。因为从目前的整个算法角度来看,在目前通用的计算平台上,无论CPU还是GPU,追求更大的吞吐,整个能耗的利用率是更好的。
同时我们看到整个计算的需求量其实是在不断的增加,随着我们计算精度的要求不断的提高而增加的。那这里面我给大家举一个很简单的例子,我可能透露阿里一些模型不太方便,所以我拿一个大家非常熟悉的比赛来跟大家讲一下,现在的发展趋势。这是2013年imagenet 物体检测的第一名,来自阿姆斯特丹大学,那时候我们可以看到当时的Mean AP是0.22,看着不是特别复杂,感觉起来。我们量化一下,整个这个网络每张图的转播过程中计算能力究竟有多少,其实很容易看到整个前向网络一张图前向过一遍,整个浮点的计算量是2G,这是前向的。在训练的过程中每张图至少要前向后向,而且要不断的迭代循环。一张图前向加后向需要60亿次浮点计算。2014年的时候新加坡国立大学他们是获得了冠军,当时mean ap已经到了0.37,这个网络明显感觉比2013年的时候已经复杂了一些,同时我们同样量化一下整个的计算量,前向是4.5G,这是2014年的情况。2015年是微软,这张网络其实我发现已经不能在一张PPT上画出来了,一共152个层。计算量确实也增加了,整个的前向网络已经到了11.3G,前向加后向是33.9G,这是2015年的情况。我们把三年整个的发展,计算量需求的发展,随着精确度的提升,随着模型的变化,它的发展我们汇总在一张图里看到一个趋势,从2013年一直2015年,每年基本上计算量的需求都有两倍以上的提高,到三倍。我们拿一个多项式那拟合一下,2016年的每张图要超过20G了,这就是一个趋势。
相比之下大家现在来做深度学习,无论是训练和预测,大家普遍用通用的CPU跟GPU来做,现在这些硬件,现在体系结构目前所能提供的计算性能究竟是多少,我们也可以量化一下。这个图从2012年到2015年CPU是底下的小点,这几代的CPU,Intel,整个的计算能力现在经过这四年也就提高了一倍。那目前来说不到1T GFLOPS单精。同时GPU也可以看到,在四年所有的架构中,他们的计算能力也是从不到4T,一直到现在接近6T,在四年的期间增长也没有提高一倍。但是我们再看看处理性能,效能如何,也是大致如此,每年的提升不到一倍。GPU可以看到目前可能在20多G每瓦的效能。
我们把整个的计算的发展趋势,需求的发展趋势,以及我们现在主流的在用的硬件的一些性能做一个图里对比的话,就是这样的。左边可以看到一个加速上升的趋势,同时右边在一个平缓的增加,而且增加的幅度每年也不是很高。
刚才讲的是我们的计算需求以及我们整个硬件的计算能力,但在通用平台上,如果把我们的深度学习真正做好,还牵扯到的我们软件,软件能发挥出硬件的能力。我们把这个软件实现完,从性能的角度来说,我们是否能够真正发挥硬件所具备的这些性能。我们以一个很简单的例子给大家看一下,在深度学习,我们如果我们做深度学习的话,Caffe是大家熟悉的框架,如果做卷积的话,我们拿这个作为例子,可以看到我们真正的软件实现出来的性能,其实跟硬件的理论性能差距是非常大的。所以我们看到在真正的GPU上,alexnet这个模型的第二层实际上性能只有99G,我们知道我们的硬件性能要4T以上,但实际上我们软件写出来以后发挥出了很小一部分硬件的性能,剩下的东西就浪费了。我们和每瓦的性能只有0.3G,这个差距是非常大的。
刚才讲了我们的计算需求在不断的增加,但是我们的能力有限,可能整个软件实现的时候没有完全发挥出硬件的性能。如何面对整个计算的挑战,大体有三个方向,第一个就是从算法的角度,或者说其他的角度,我们尽量在把一定的计算量降下来。另外我们的软件能不能优化的好一些,真正能把硬件的性能发挥出来,另外就是专用的硬件体系结构。
降低计算量来说其实大家现在有很多的方法,尤其做算法的同学会有很多很多的方法来简化整个的模型,简化整个的计算量。同时也有一些通用的方法,比如说FFT,可以把计算的量级降下来。同时来说刚才也提到了我们在一定的损失下,我们可以做一些模型的压缩,这样的话也是把计算量降下来了。另外我们在精度上可以考虑,如果你做16倍的浮点或者说做8倍的定点,所消耗的资源不一样的。我们有没有通过把它的精度降下来,保证一定的正确率的情况下,尽量减少计算量,减少能耗,这也是一种思路。所以很多的场合用到了更低位数的浮点甚至一些定点。同时这些方法其实可以配合在一起,无论从算法,从实现,从降低精度等等这些方法都可以配合起来,这样也能产生更好的收益。
同时来说就是一些针对性的,刚才讲的软件实现的规划。软件写出来不仅要保证正确性,还要保证能不能更快的运行。这方面在目前如果大家在用GPU进行深度学习的时候,你可以采用一些比如说自己的一些专门的cuDNN库。同时还有一些工具,比如说我们阿里自己有专门单独写的原生汇编器,你可以直接拿本身硬件上执行的二进制指令来进行编程,这样能更充分发挥硬件的性能。当然这部分nvidia自己不提供这个东西,而我们通过逆向工程的办法把这个做出来。在maxwell架构上可以用MaxAS,这些东西如果大家用好的话,也能更大程度把硬件的性能发挥出来。同时我们做针对性的实现优化,需要的东西我们对整个的硬件平台更了解,你不但要了解厂家公布的信息,你可能还要花很多的时间精力和方法逆向出一些他没有公布的信息,这样能更好的利用硬件的特性,同时发挥一些想象力,把你的实现方式针对你所了解的硬件的特性进行实现,达到一个效率的提高。同时可能还需要一些像刚才我说的更底层的工具来帮助你实现你的这些想象,这些优化的方法。
这是一个例子,我们把软件优化好能产生什么效果,刚才我说caffe的卷积实现,其实只有99G每秒实际的性能。Nvidia的cudnn做同样的计算,从第一版到第三版的性能你可以看到,基本上可以有10倍的提升。我们自己也有自己的卷积实现,我们可以在同样的卷积算法下用不同的的方法实现到2T,计算量没有减少,精度没有损失,但整个效率会提升非常多。
另外一个就是提到了更专用的体系结构,其中大家可能会考虑到FPGA,同时一些专用的ASIC,刚才有嘉宾分享过了。我们喜欢拿量化的数字来评估,这样能看到发展的空间。这里我给大家举个例子,我们用专用的ACIS能达到多大的效能,比如刚才我讲了,整个的深度学习是32倍的浮点计算,我们就拿一个32倍的浮点乘法,在90纳米跟65纳米下达到多大的效能,这里面我简单算一下,估计在65纳米做到每瓦650G,应该是极限。我们目前算的结果是这样的。那我们对比一下其实现在GPU是28纳米,我刚给大家看了数字,每瓦20多G到40多G,有一些低功耗的产品,其实既使是在65纳米下做到600多G也是有可能的,这是极限的极限,所以可以看到这里面的发展空间非常大的。我们有非常大的空间能把每瓦的效能提升很多。
未来的展望,AI人工智能,我们的深度学习带动了现在需求量大幅度增加。它将来会不会更加快速的增长,其实我觉得很有可能是这样的。同时来说如果我们假定它快速的增长的话,会不会到某天的时候有关于深度学习,人工智能所带来的计算量,它的计算量会超过其他的通用的计算量,那时候可能比你查询数据库,或者互联网网页浏览所产生的计算量更多,是不是有一天它的计算量超过所有的计算量,我觉得很有可能发生的,至少在阿里这个趋势是存在的。这是我们朝一个极端想的。同时我们再看另外一个极端,因为我们现在在做很多在做人脑的逆向工程,当我们真正发现人脑原理的时候,现在所有的深度学习拟人脑的方法可能发现是错的,其实可能已经在人脑的研究之后发现,其实有更好的算法,而这个算法是不需要那么大的计算量的,也有可能发生。那个时候就会发生一件事,我们现在所有的工作,有可能这些算法都被推翻,最后发现有一个非常简洁的算法就能够实现了,所以这是我今天的分享,也欢迎大家来使用阿里云,谢谢。
(本报告根据速记整理)
CAAI原创 丨 作者王琤
未经授权严禁转载及翻译
如需转载合作请向学会或本人申请
转发请注明转自中国人工智能学会