同时对于树的处理来讲,中间本身有很多条件判断跳转。在原来X86的架构上这反而是非常容易的,因为X86是基于指令运算去做加速的,单指令多数据流和单指令单数据都是它处理的强项。 而GPU里面对于处理这种跳转多的情况实际上会导致很大资源的浪费,因为它大部分是在做多指令多数据流同时的并行处理,要把很多数据准备好了打包,成形后一并做处理运算。 这时如果中间有很多的Branch,Branch的意思是指令可能要跳转到另一个地方去执行,数据级的并行度就被打破了,打破之后会导致很多问题,有可能数据在另外一个内存的地方,要重新拿过来。对于这种处理,KNL就有天然的优势。 所以周老师在他第二版论文中最后一页专门提出: GPU对于DNN是合适的加速器; 但是如果考虑到像决策树这种情况,KNL作为加速器才更加适合。 我们对比的时候就会看到,在不同数据处理的模式下,应该选择不同的加速模式。 KNL可以很好地分配内存和高速内存里的数据,因为新的KNL允许用户去配置高速内存的使用方式,它对算法怎么样使用数据是有比较好的灵活度的。 同时用上OPA这种新的数据互联加速,打破原来去访问内存和多节点互联的瓶颈。因为我们知道,GPU扩大到多GPU节点的时候,会有一个IO上限,到了上限,再增加GPU,训练的性能得不到太多提升。因为IO已经成为瓶颈了。但是如果说用KNL的方式,就可以突破这种瓶颈,增加到甚至上千个节点,仍然保持接近线性的增加。同时包含一些比如IO存储方面新的技术,可以带来不同种类的伸缩性能。 对于TPU,它跟英特尔的AI路线图里面的Lake Crest是同一个级别的东西,都是属于专门为深度神经网络定制的加速器,定制的程度是非常高的,如果换成深度森林,就未必能很快的适应。 所以我们讲的话,不会直接讲KNL比GPU好,或者是GPU比KNL好,要放在到底是加速什么样的应用下。 那是否能说对于深度神经网络的加速,GPU比KNL更适合? 宋继强:不是说KNL不能加速深度神经网络,我们曾经试过,去年在AI Day的时候也发布过这样的数据,就是当时把一个Caffe的代码放在KNL上的时候,得到一个初级的性能。后来经过我们软件部门做了软件的并行优化之后,它在KNL上提升了400倍的性能。 可见做不做软件层级的优化差别是很大的,对于深度神经网络我们也可以提高很多倍的优化性能。同时再配合上硬件的性能不断提升,因为KNL比KNC已经提高了3倍,今年下半年会出来的KNM,比KNL硬件本身能力又提高4倍。所以对于使用KN系列的算法研究者来讲,他们是可以享受到这个红利的。 一方面使用软件优化,另一方面可以享受到KN系列的硬件逐年性能提升带来的红利。 对于深度学习这个领域来讲,如果模型容量很大的话,肯定是需要利用到像KNL、KNM这种级别的加速的。GPU是一个协处理器,模型和数据一般放在显存中。现在显卡最新的一般是16G,最大的可能有24G,但很难买得到. 有一些场合需要特别大的模型,可能就放不进显存去,这时候就有很大的问题。但是对于KNL来说,可能会是比较好一点的方式。 至于它中间部件到底采用GPU还是KNL比较好?其实要看情况分析。比如说周老师这边讲到,他觉得可能做前面特征的扫描放在GPU上也很好,因为那一块有很多的数据操作,比如说块操作,可以把它整合。 回过头来想,我们的KNL上,其实每一个Core上也提供了两个512位宽的叫做矢量加速器(AVX-512)。这个矢量加速器如果用好的话,对于处理这种块并行的操作也是很有效的。其实如果说使用得当的话,在KNL上去做矢量的加速计算,我们称为SIMD的计算,和这种需要去做很多分支处理的计算,都可以并行很好的话,这个性能还是非常值得期待的。从原来没有优化过的性能到后来提升到千倍以上是可以达到的。 关于Lake Crest和KNL,在产品定位方面是一个怎样的关系?能不能这样说,Lake Crest是英特尔对于英伟达的GPU推出的竞争产品?而KNL是基于可以和CPU更好的配合关系,所以更适用于决策树模型算法的一个硬件。 宋继强:这样说还不太准确。 Lake Crest是专门针对深度神经网络深度定制的产品,目的是为了得到更快的加速比。它的定制需要综合DNN所需要的计算和带宽的需求,还有扩展节点数量等因素。因为Lake Crest里面也有很多计算节点,每个Lake Crest芯片可以和另外12个芯片互联,形成超网格,而且互联带宽是非常高的。所以在深度学习大规模模型训练的方面,速度会非常强悍。 (责任编辑:本港台直播) |