DLA绿色的模块形成类于固定的流水线,上面有一个控制模块,可以用于动态分配计算单元,以适应不同的网络。稀疏矩阵压缩减少带宽,优化的矩阵算法减少计算量,外加SRAM(一个273x128, 128x128, 128x128 ,128x6 的4层INT8网络,需要70KB SRAM)。我看到的大多数,其实都是和它大同小异,有些增加了一个SmartDMA引擎,可以通过简单计算预取所需的数据。根据我看到的一些跑分测试,这个预取模块可以把计算单元的利用率提高到90%以上。
至于能效比,我看过的,在支持INT8的算法下,可以做到 1.2 Tops/W (1Ghz@T16FFC),1 Tops/mm^2,并且正在向1.5 Tops/W靠近。也就是说,1.5W可以获得2Tops (INT8) 的理论计算能力。这个计算能力有多强呢?我这目前处理1080p 60 FPS的图像中的60x60及以上的像素大小的人脸识别,大致需要0.5 Tops的计算能力,2Tops完全可以满足。当然,如果要识别复杂场景,那肯定是计算力越高越好。
为什么固定流水的能效比能做的高?ASIC的能效比远高于通用处理器已经是一个常识,更具体一些,DLA不需要指令解码,不需要指令预测,不需要乱序执行,流水线不容易因为等待数据而停顿。下图是某小核各个模块的动态功耗分布,计算单元只占1/3,而指令和缓存访问占了一半。
有了计算量,深度学习对于带宽的需求是多少?如果SRAM足够大,1Tops的计算量需要5GB/s以下的带宽。连接方法可以放到CPU的加速口ACP (跑在1.8 GHz的ARMv 8.2内部总线可以提供9 GB/s带宽)。只用一次的数据可以设成非共享类型,需要和CPU交换或者常用的数据使用Cacheable和Shareable类型,既可以在三级缓存分配空间,还可以更高效的做操作,免掉刷缓存。
不过,上述前提成立的前提是权可以全部放到SRAM或者缓存。对于1Tops INT8的计算量,所需权的大小是512 GB/s(有重复)。如果全部放DDR,由于手机的带宽最多也就是30 GB/S,是完全不够看的。对于输入,中间和输出数据,我在上文有个例子,一个273x128,128x128, 128x128 ,128x6 的4层INT8网络,需要70KB的SRAM(片内)放权,共7万个。但是输入,输出和中间结果加起来却只有535个,相对来说并不大。这里的运算量是14万次(乘和加算2次)。对于1T的运算量来说,类。中间数据放寄存器,输出数据无关延迟,只看带宽,也够。最麻烦的就是权,数据量大到带宽无法接受。所以,只能把权放进SRAM防止重复读取,从而免掉这500GB/s带宽。我看到的有些深度学习的算法,权在几十到200兆,这样无论如何是塞不进SRAM的。哪怕只有10%需要读入,那也是50GB/s的带宽。虽说现在有压缩算法压缩稀疏矩阵,有论文达到30-50倍的压缩率,但我看到的实际识别算法,压缩后至少也是20MB,还是塞不进SRAM。
图像识别/美颜相机:目前80%的图像、视频任务都是用CPU在处理
此外,移动端仅仅有神经网络是远远不够的。比如要做到下图效果,那首先要把人体的各个细微部位精确识别,然后用各种图像算法来打磨。而目前主流图像算法和深度学习没有关系,也没看到哪个嵌入式平台上的在软件上有很好的支持。目前图像算法的支持平台还主要是PC和DSP,连嵌入式GPU做的都一般。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/shouji/article-59156-2.html
嗯嗯