如何做神经网络处理器的需求分析

转自http://tensilica.eefocus.com/module/forum/thread-9454-1-1.html

之前我们讨论了很多深度神经网络处理器的实现问题(深度神经网络的模型·硬件联合优化)。今天我想把关注的重点放回到设计的第一步,看看如何分析深度神经网络处理器的需求(requirements)和约束(constraints)。
•••
重要性
深度神经网络的inference(推断)功能已经逐渐从通用平台(CPU,GPU)向专用平台(FPGA,DSP,专用处理器和加速器)延伸。inference应用五花八门,还往往受到场景的约束(特别是Embedded Inference对功耗和成本非常敏感),设计专用平台,实现高效率和差异化在所难免。而设计专用硬件平台,特别是专用芯片或者专用的处理器、加速器IP,投入(人力,资金和时间)可观,风险巨大。如果没有一个科学严谨的需求分析,不论最终是需求不满足市场,还是设计不满足约束,结果肯定是灾难性的。
•••
考虑哪些因素?
今天我主要讨论技术方面的需求和约束,这些因素将决定我们对软硬件架构的选择,有的还会直接指导实现(implementation)的优化。另外,这里还有一个假设:实现应用的基本算法都是基于深度神经网络。
1. 算法的类型
设计一个硬件平台,首先我们要考虑算法是通用的还是专用的。一般来说,深度神经网络应用主要使用的是专用算法,但也不排除需要一些比较通用的算法作为辅助。在这种情况下,可能我们需要不同的类型的硬件来进行支持。比如我们之前在介绍DSP IP的文章中提到过,目前支持神经网络的DSP IP往往用一个比较通用的处理器实现传统的computer vision算法和控制功能,而用一个专门的convolution加速器实现卷积操作。更进一步,我们还需要看看算法是控制为主(control)和数据运算为主(computation),前者比较适合用CPU来实现,而后者则比较适合采用专用架构。
2. 对灵活性和可扩展性的需求
我们要对应用的灵活性需求做出一个评估,这对于架构设计非常重要。简单来说,需要灵活,可扩展的应用,采用可编程,可配置的处理器实现比较合适;反之,可以用纯硬件电路来实现,已达到最优的效率。有些情况下,灵活性是为了Future-proof,希望硬件平台可以支持未来的未知应用,延长生命周期;而有些时候,灵活性是因为需求中的不确定性(uncertainty),希望可以在需求不清晰的时候尽量覆盖更多的情况(比如支持多种参数的选择);还有一些时候,灵活性是因为对设计和验证能力没信心,希望通过灵活的设计可以在出现bug的时候有绕开的机会。不管怎么说,灵活性是以增加成本,牺牲效率为代价的。对于功耗和成本敏感的应用,over-design和under-design同样可怕。
下图就展示了不同的硬件架构的灵活性和效率(Specialization , Development cost/time, Performance/Chip Area/Watt)的矛盾(摘自Muhammad E. Shaaban教授的Advanceed Computer Architecture课程)。其中ASP包括了GPU,DSP等很广的范围,Configurable Hardware主要指FPGA和类似的可配置硬件架构。
 
3.处理性能
确定处理性能指标的重要性不用再强调了。在深度神经网络应用中,一个比较常见的指标是GOPS(Giga Operations Per Second),是指每秒需要完成的操作(包括乘法,加法,访存等)的数量。由于神经网络最主要的运算是MAC(multiply–accumulate),也有时候也拿单位时间的MAC数需求作为性能指标的。处理的性能还可以分为峰值的需求和平均的情况。这对于硬件设计,特别是低功耗相关的设计还是非常重要的。
4. 能耗
功耗是一个应用的关键约束条件,一般可以用峰值能耗(W),峰值电流(A);平均能耗,平均电流来表示。这个指标首先来自应用场景的供电能力和成本要求。对于一个硬件系统来说,各个部分的能耗是需要协调规划的。而这个指标也是芯片设计中的一个重要指导条件。
5.效率
效率指标主要是指能耗效率(消耗单位能量能够进行多少运算)和面积效率(单位的芯片面积支持的运算能力)。在神经网络实现中,常见的能耗效率指标是GOPS/W(每瓦的能量可以支持的GOPS),或者TOPS/W。而面积效率好像没有很统一的指标。
6.实时性需求
实时性也是一个应用的重要约束条件。具体来说实时性还包括两个层面,第一是要求处理的latency尽量短。在这个层面上,无人驾驶汽车的实时性要求就非常高,必须在很短时间内根据sensor的信息做出操作反应;而一般的机器人,移动速度比较慢,就不需要很强的实时性。另一个层面是predictable latency,就是处理延时要求可以预测。对实时性要求高的应用,需要一般需要使用专用处理器和实时操作系统(RTOS)。
7.成本
实现一个应用的成本是多方面的,在之前的文章(脉动阵列 - 因Google TPU获得新生)里
提到了nonrecurring cost(设计 design) 和recurring cost(器件 parts)的概念。前者和设计难度以及架构的选择有很大关系,在相同难度的情况下,选择成熟,简单的设计或者IP都可以降低设计成本;后者则主要和产品(比如芯片)的出货量,生命周期等因素有关。对于很多应用来说,成本往往是决定性因素。而降低成本在很多时候比提高性能更有技术挑战。
8. Time to Market
最后,前面说的这些因素都可能被上市时间的要求打败。Google TPU(Google TPU 揭密)就选择一个相对简单的硬件架构和比较平庸的性能优化目标,这和它的部署时间的要求不无关系。
•••
形象化的表示
 
前面说了很的应用的需求和约束条件,可以形象化的表示。比如雷达图(Radar Chart,还可以叫蛛网图 spider chart等等)就可以很好给我们一个直观的印象。如果我们要设计一款实现深度神经网络inference的芯片,我们可以把最关注的指标列在图中。比如上面这个图中把PPA(Performance,Power和Area)和Time-to-Market作为4个轴。每个指标是0到5分,分数越高,要求越高。大家可以看看左右两个图分别对应了什么样的应用,欢迎留言抢答。
当然,雷达图一般是个定性的描述,主要是给你一个直观的印象,可以一眼看出实现这个应用的主要挑战在什么地方,或者看出不同应用之间的差异;是要很低的功耗和成本但不要求性能(左边),还是要在一定的功耗约束下实现很高的性能(右边)。当然,你可以选择自己认为重要的指标(轴)和相应的精度(每个轴的分辨率)。
•••
定量分析
在之前专用处理器的系列文章中我就介绍了,对于一个面向特定应用的系统,需求的定量分析对于架构和实现的优化至关重要(专用处理器设计方法&工具)。神经网络硬件实现的一个有利之处是模型比较容易进行定量分析,因此在实践中应该尽量给出定量的数据。实际上,目前主流的深度学习框架,比如TensorFlow,Caffe,Touch都有一些profiling的工具。可以直接对神经网络inference( feed-forward)进行分析,得出运算的数量和时间等信息。即使没有合适的profiler,大家自己写一个应该也不是很困难。
但是,单纯得出模型本身的运算和存储需求还不足以指导硬件平台的设计或优化。因为实际的硬件平台往往是工作在一定的架构和约束条件下的。比如同样的网络,在CPU和GPU上运行需要的时间肯定有很大差别。在做分析的时候必须把架构特征和约束条件考虑进去。比如,一个神经网络加速芯片不可能有无限的片上存储器,因此在完成一次inference运算(比如图像的标注)的过程中往往需要利用片外的存储器存储中间结果或者其它数据。而访问片外存储器(如DDR)的代价和片上存储器有很大差别。所以,在我们做定量分析的时候,应该充分考虑这一因素,先设置一个比较合理的片上存储的数量(也可以是几种情况),然后在此基础上,把访问片上存储和片外存储的代价都计算进去。当然,上述问题又和架构设计是联系在一起的,现在很多神经网络专用处理器的架构设计就是以减少片外访存为出发点的。所以,在实践中,对于神经网络运算和存储需求的定量分析,实际不是一个孤立的过程,而是和架构探索相互结合的迭代过程。我们可以在做profiling的时候,把架构选择和一些约束条件也作为输入,最终得到一个评价数据,来选择或者优化不同的软硬件架构。
总    结
总的来说,准确的认识需求和约束,是有效实现一个神经网络应用的前提条件。对于需要设计专用芯片或者硬件IP的项目,这一点尤其重要。算法类型,灵活性,性能,效率,成本和上市时间等诸多因素都必须加以考虑。形象化的表示可以让我们对实现的挑战一目了然;而定量分析可以直接指导我们进行算法和架构选择,以及实现的优化。

转自 2017-04-22 唐杉 StarryHeavensAbove 
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值