更多课程 选择中心

嵌入式培训
美国上市教育机构

400-111-8989

嵌入式培训

嵌入式机器学习处理器的技术挑战和机会

  • 发布:嵌入式培训
  • 来源:嵌入式教程
  • 时间:2018-01-11 15:26

2016年12月,Vivienne Sze,Yu-Hsin Chen等(Eyeriss的作者)在arXiv上发表的文章“Hardware for Machine Learning: Challenges and Opportunities”,是一篇比较好的综述性文章。这里我想结合这篇文章[8]和这次ISSCC2017论文[1-7],谈谈我理解的“挑战”和“机会”。

首先,这里主要讨论嵌入式的机器学习处理器(主要是做inference)。实际上在Cloud端做training/inference也有专用处理器的相关研究和实现,不过这个是另外一个话题了。

衡量一个嵌入式机器学习系统(包括软硬件)的几个关键指标包括:精确度、能耗、吞吐量/延迟性以及成本。我们主要讨论硬件部分。不过硬件的设计实际和算法,软件息息相关,好的硬件设计能让整个系统达到最合理的平衡状态。

除此之外,可编程性(灵活性)对于机器学习处理器(或者加速器)也非常重要。当然,灵活性是相对的,嵌入式的机器学习处理器的灵活性介于GPU和硬件加速器(基本没有可编程性)之间。具体的选择则是设计时考虑的trade-off。比如,有的机器学习处理器可以同时支持CNN和RNN,有的则只支持其中的一种,其实现会有很大差别。

这些指标里面,精确度,吞吐量/延迟性,可编程性可以认为是性能指标;能耗和成本可以统称为成本指标。设计挑战就是性能指标和成本指标的矛盾。一般来说,没有免费的午餐,控制成本必定牺牲性能。当然,还有一种情况,就是技术创新或者进步,基本不用牺牲一方,甚至两者能同时得到更优的结果。

在云端,性能优化是主旋律;而在嵌入应用中,最重要的是在尽量少牺牲性能的情况下来满足系统的成本要求。下面就从算法和硬件联合优化,架构(粗粒度),微结构(细粒度),电路和其它这几个方面来介绍一下技术上的机会或者设计方法。

1. 算法和硬件的联合优化

我们做基于SoC芯片的软硬件系统的同学应该都很清楚,对于一个优化目标(比如能耗),在应用/算法/软件层面所做的优化往往比硬件架构和电路层面所做的优化要有效的多。比如我们在做通信基带的时候,如果一个算法经过优化可以降低一些对精度的要求,把量化比特减少哪怕是1个比特,都会对相应的硬件处理通路(乘法器,加法器,存储等等)有很大的影响。在机器学习处理器的优化方面也是一样的道理。做硬件优化首先应该考虑在算法(应用)层面是否可以减少计算量、数据传输和存储要求方面。

针对机器学习,在算法层面的机会包括:

a)降低精度:

使用定点数,减少位宽。现在硬件8bit位宽已经比较常见。“With more significant changes to the network, it is possible to reduce bitwidth down to 1-bit for either weights [56] or both weights and activations [57, 58] at the cost of reduced accuracy. The impact of 1-bit weights on hardware is explored in [59].”[8]

b) 发掘稀疏性:

算法层面通过剪枝(pruning)可以减少MAC和权重的数量(不一定能优化能耗);基于一个能量模型(energy model)在做剪枝,可以直接最小化能量消耗。最近还看到一个“shrink”技术(Pilot ai lab),不过没看到细节,不好评价。

而在硬件设计中,这次ISSCC论文基本上都使用了mask技术,当数据通道或者memory的输入(也有的放在输出的位置)为全零(或者是极小值)的时候直接不做处理。

c) 压缩:

算法层面的剪枝实际上是对神经网络的“压缩”。除此之外,在硬件上也可以利用了多种形式的轻量级压缩来减少数据传输。无损压缩直接减少流入和流出芯片的数据传输。简单游程长度编码(simple run-length coding)减少了多达 1.9 倍的带宽。向量量化(vector quantization)等有损压缩也可被用于特征向量和权重。一般而言,硬件的压缩/解压的代价在几千 kgates 的量级上,具有最小的能量开销。

此外,这次ISSCC会议中,KAIST提的人脸识别处理器[6]里用的“a separable filter approximation for convolutional layers (SF-CONV) and a transpose-read SRAM (T-SRAM) for low-power CNN processing”,是一个算法和硬件联合优化的很好的例子。它用两级1D卷积近似了CNN的2D卷积(算法层面),然后设计了可实现vertical读取(列读取)的T-SRAM来支持这个算法。

2. 架构(粗粒度)

从现在机器学习处理器设计的趋势来看。大家对CNN的加速主要采用2D MAC 阵列(Convolution)+ 1D SIMD或者scalor(ReLU,pool,ALU)。研究和设计的重点是怎么实现最高效的给MAC阵列提供数据(包括缓存数据)。这个部分“Eyeriss”处理器[9]和这次会议上的“ENVISION”处理器[5]讨论的比较多,主要也是挖掘DNN内在的并行性和数据重用性。这个问题我后面会专题讨论一下。

3. 微结构层面

这部分主要是数据通道的优化,特别是MAC(MAC操作是DNN中用的最多的操作)的优化。这次ISSCC中用到的技术中比较有启发性的有下面一些:

a)ENVISION处理器中用的Dynamic-Voltage-Accuracy-Frequency Scaling(DVAFS) MAC。[5]

b)KAIST的DNPU用的“Layer-by-layer dynamic fixed-point with on-line adaptation and optimized LUT-based multiplier”,动态定点数。[2]

c) ST的论文中实现的动态数据通道配置(通过灵活的DMA设计),虽然不算创新,也是个很有参考价值的实现方式。[1]

d)除了对MAC的优化,这次ISSCC论文[7]对访存的优化也做了讨论。

4. 电路层面

ISSCC论文有几篇都提到了电路层面的优化。最有意思的应该是哈佛大学论文[3],利用

Razor timing violation detection技术结合DNN内在的容错性,降低关键路径时序要求,从而降低工作电压。ENVISION设计中,在考虑运行精度的前提下调整Body-bias来平衡动态和静态功耗[5];另外,论文[7]中有对memory电路的优化。

5. 其它

a)混合信号: [6]中“analog-digital hybrid Haarlike face detector (HHFD) integrated on the CIS for low-power face detection (FD)”。当然这个还不算脑洞大的,这个领域应该有很多想象空间。如果能通过引入混合信号处理来优化MAC和访存,可能会对整体性能有很大帮助。[8]中有一些具体的例子。

b)计算嵌入传感器: 这个比较容易理解,把计算尽量靠近传感器,可以减少很多不必要的数据传输。这应该也是边缘计算发展的趋势。

c)计算嵌入memory: 个人也比较看好这个方向。第一,这也是数据和计算尽量靠近的一种优化;第二,神经网络的发展方向是对记忆的要求越来越高,在存储上做文章也是适应这个趋势。

d)新的存储技术: 由于机器学习的存储要求很大,任何存储方面的新技术,比如embedded DRAM (eDRAM) ,Hyper Memory Cube (HMC)等等,都会很有帮助。

预约申请免费试听课

填写下面表单即可预约申请免费试听!怕钱不够?可就业挣钱后再付学费! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可全国推荐就业!

上一篇:一位嵌入式Linux菜鸟设备驱动学习之路
下一篇:建立ARM嵌入式编程环境教程

嵌入式和单片机的区别在哪?

嵌入式Linux底层系统怎么学?

ARM常用概念有哪些?

优化嵌入式软件的七个技巧

选择城市和中心
黑龙江省

吉林省

河北省

湖南省

贵州省

云南省

广西省

海南省