r52,IBM笔记本电脑R52,这台电脑好不好用( 四 )


手机的长时间运行场景下 , 芯片整体功耗必须小于2.5瓦 , 分给深度学习任务的 , 不会超过1.5瓦 。相对应的 , 如果做到1Tops/W , 那这就是1.5T(INT8)的处理能力 。对于照片识别而言 , 情况要好些 , 因为通常不需要长时间连续的处理 。这时候 , CPU是可以爆发然后休息的 。语音识别对性能要求比较低 , 100Gops可以应付一般应用 , 用小核也足够 。但有些连续的场景 , 比如AR环境识别 , 每秒会有30-60帧的图像送进来 , 如果不利用前后文帮助判断 , CPU是没法处理的 。此时 , 就需要GPU或者加速器上场 。
上图是NVidia的神经网络加速器DLA , 它只有Inference的功能 。前面提到在手机上的应用 , 也只需要Inference来做识别 , 训练可以在服务端预先处理 , 训练好的数据下载到手机就行 , 识别的时候无需连接到服务端 。
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 。

推荐阅读