人们对于人工智能和物联网的最初设想是, 在云端有一个异常强大的数据中心, 而物联网各个节点负责采集数据交给云端, 云端在根据数据分析并做决策后再把结果发还给终端. 在这种模型中, 云端负责智能计算, 而终端节点负责数据采集以及决策执行.
什么是边缘计算
最近, 边缘计算成为了人工智能和物联网领域非常热门的关键词.
人们对于人工智能和物联网的最初设想是, 在云端有一个异常强大的数据中心, 而物联网各个节点负责采集数据交给云端, 云端在根据数据分析并做决策后再把结果发还给终端. 在这种模型中, 云端负责智能计算, 而终端节点负责数据采集以及决策执行.
然而, 这样的设想在实际实现中遇到了不少困难. 第一个困难来源于数据传输的开销. 物联网节点通常都使用无线网络与云端做数据传输, 而如果物联网节点把不加任何处理的原始数据一股脑全部传到云端, 会导致带宽需求爆炸, 网络基础架构没法支撑如此高的带宽. 开销的另一部分是无线传输的功耗, 如果把数据不加任何处理就传输到云端, 那么终端节点的无线传输模块必须支持高速无线传输, 这就意味着无线模块需要很大的功耗, 与物联网节点低功耗的设想不符. 第二个困难在于延迟. 许多节点执行的任务对于延迟非常敏感, 例如无人驾驶, 例如安防, 在这些应用中网络传输带来的延迟 (几十毫秒以上, 有时候网络信号不好会带来数秒的延迟甚至掉线) 无法被接受.
考虑到这些问题, 边缘计算就成为了解决方案. 在边缘计算中, 终端节点不再是完全不负责计算, 而是做一定量的计算和数据处理, 之后把处理过的数据再传递到云端. 这样一来延迟和带宽的问题可以解决, 因为计算在本地, 而且处理过的数据一定是从原始数据中进行过精炼的数据所以数据量会小很多. 当然, 具体要在边缘做多少计算也取决于计算功耗和无线传输功耗的折衷 -- 终端计算越多, 计算功耗越大, 无线传输功耗通常就可以更小, 对于不同的系统存在不同的最优值.
对于边缘计算系统, 处理器, 算法和存储器是整个系统中最关键的三个要素. 下面我们仔细分析这几个元素.
用于边缘计算的处理器: 要多通用? 是否要上专用加速器?
常规物联网终端节点的处理器是一块简单的 MCU, 以控制目的为主, 运算能力相对较弱. 如果要在终端节点加边缘计算能力, 有两种做法, 第一是把这块 MCU 做强, 例如使用新的指令集增加对矢量计算的支持, 使用多核做类似 SIMD 的架构等等; 第二种是走异构计算的思路, MCU 还是保持简单的控制目的, 计算部分则交给专门的加速器 IP 来完成, 目前正火的 AI 芯片其实大部分做的就是这样的一个专用人工智能算法加速器 IP. 显然, 前一种思路做出来通用性好, 而第二种思路则是计算效率高. 未来预期两种思路会并行存在, 平台型的产品会使用第一种通用化思路, 而针对某种大规模应用做的定制化产品则会走专用加速器 IP 的思路. 然而, IoT 终端的专用加速器 IP 设计会和其他领域 (如手机) 的专用加速器设计有所不同, 因为有内存的限制(见下面分析).
算法与内存
众所周知, 目前最主流的深度神经网络模型大小通常在几 MB 甚至几百 MB, 这就给在物联网节点端的部署带来了挑战. 物联网节点端处于成本和体积的考量不能加 DRAM, 一般用 FLASH(同时用于存储操作系统等)作为系统存储器. 我们可以考虑用 FLASH 来存储模型权重信息, 但是缓存必须在处理器芯片上完成, 因为 FLASH 的写入速度比较慢. 由于缓存大小一般都是在几百 KB 到 1MB 数量级, 这就限制了模型的大小, 因此算法必须能把模型做到很小, 这也是为什么最近 "模型压缩" 这个话题会这么火的原因.
如果算法无法把模型做到很小, 就需要考虑内存内计算. 内存内计算 (in-memory computing) 是一种与传统冯诺伊曼架构不同的计算方式. 冯诺伊曼架构的做法是把处理器计算单元和存储器分开, 需要时处理器从存储器读数据, 之后在处理器处理完了数据之后再写回存储器. 因此传统使用冯诺伊曼架构的专用加速器大部分也需要配合 DRAM 内存使用, 使得这样的方案在没法加 DRAM 的物联网节点端难以部署. 内存内计算则是直接在内存内做计算而无需把数据取到处理器里, 这样就节省了内存存取的额外开销. 一块内存内计算的加速器的主体就是一块大 SRAM 或者 Flash, 然后在内存上再加一些计算电路, 从而直接在内存内做计算, 理想情况下就能在没有 DRAM 的情况下跑起来相关算法.
当然内存内计算也有自己的挑战. 出了编程模型需要仔细考虑之外, 内存内计算目前的实现方案本质上都是做模拟计算, 因此计算精度有限, FP32 之类的高精度肯定是不可能了. 这就需要人工智能模型和算法做相应配合, 对于低精度计算 (即量化计算, quantized computation) 有很好的支持, 避免在低精度计算下损失太多正确率. 目前已经有不少 binary neural network(BNN)出现, 即计算的时候只有 1 位精度 0 或者 1, 并且仍然能保持合理的分类准确率.
另一方面, 目前 IoT 节点终端内存不够的问题除了可以用模型压缩来解决之外, 另一条路就是使用新存储器解决方案来实现高密度片上内存, 或者加速片外非易失性存储器的读写速度, 并降低读写功耗. 因此, 边缘计算也将会催生新内存器件, 例如 MRAM,ReRAM 等等.
总结
边缘计算是人工智能和物联网结合的产物, 是未来的重要趋势. 未来边缘计算的关键技术, 包括新处理器(强通用处理器或专用加速器), 内存内计算, 网络模型压缩, 以及新存储器. 喜欢新技术的朋友们不妨多多关注这些领域, 预计会出现不少有趣的公司和技术.
来源: http://stor.51cto.com/art/201805/573136.htm