BenchIP是专门用于Intelligence Processor(或者说AI芯片和IP)的Benchmark,其功能就是对各种设计进行基准评测,一方面用于客观准确的横向对比,一方面为设计者提供优化的参考。
简单来说,BenchIP的主要工作就是解决“用什么来评测?”和“怎么做评测?”这两个问题。
BenchIP中使用的基准测试包括了两种方式,直接使用应用作为基准测试和设计专门的基准测试,分别称为Macrobenchmarks(宏观)和Microbenchmarks(微观)。其中,Macrobenchmarks就是常见的神经网络模型,而Microbenchmarks就是由神经网络中的最常见基本操作(见上表)构成的单层网络。虽然这些选择并不出人意料,但论文给出的设计理由要比选择本身更有参考价值。
从应用的角度来说,Benchmark既要有代表性,又要有多样性,即能够覆盖主流算法和应用场景,同时又要避免不必要的冗余设计(重复的测试)。从架构设计(优化)的角度,Benchmark还需要能能够帮助设计者探索一些边界条件和极端情况,并能够反映技术发展的趋势。BenchIP的设计就是为了适应这样的需求。
我们先来看看Macrobenchmarks。Macrobenchmarks直接使用实际的神经网络模型,具有足够的代表性,如原文所说“Thus, BENCHIP has both representativeness and diversity as it well covers 98.72% of the networks that appeared in application domains in the last five years.”)。所以,这里需要说明的主要是这些神经网络模型是否存在很多冗余设计的问题。
为此,论文分析了各个模型的相似度(上图右侧)和相关度(上图左侧)。基本的方法是用一个模型的各个层的操作数量作生成一个特征向量,然后以不同模型的特征向量的欧式距离作为其相似度的表征。这里,这个方法的细节没有介绍,不过其结果和我们对模型的基本认识是相符合的。而从结果来看,Macrobenchmarks选择的这些模型还是具有比较好的多样性的(冗余性不高)。由于Benchmark设计中更重要的覆盖完整的应用特征,这个冗余性的结果是可以接受的。
对于Microbenchmarks来说,它的任务除了评测硬件性能,还需要给设计者进行优化提供帮助。Microbenchmarks用各种单层网络组成,包括Conv., Pooling, FC., ReLU., Sigmoid., LRN., BN., Deconv., Unpooling., LSTM.。从代表性和多样性出发,选择这些基本操作的是比较容易的,相对困难的是每种操作的具体配置(Configuration)。BenchIP给每种操作设计了7种配置,包括三种Normal Configuration (Cfg.A~C),这种配置直接从常用应用中取得;一种Small Configuration (Cfg.D)以及三种Large (extreme) Configurations(Cfg.E~G)(主要用于对硬件架构的压力测试)。
对于这些配置的代表性和多样性,论文也做了一定的分析。其中,为了“定量”分析它们的多样性,论文专门定义了一些“Architecture-independent characteristics”,包括memory,computation和control几个大类。如下图。
这些特征被用来具体描述一个操作的各种配置之间的差异。论文还拿reuse distance("refers to the number of different data elements accessed between two consecutive reuses of the same element")这个特征(一般用于分析运算数据的“Locality”)做了个例子,有如下的结果。可以看出不同的配置的ReDist差异很大。
论文对配置选择还有很多的分析。另外,论文还简单分析了一下BenchIP对于未来的技术趋势如何适应的问题。感兴趣的同学可以看看原文。
T.S.:
选择基准测试的用例,是设计Benchmark的基础。这篇论文对用例的选择给出了比较详细的解释和一些定量的分析。当然,Benchmark的设计也是一个与时俱进和经验积累的过程,使用什么样用例、什么样的配置应该会越来越优化。
对于一个针对通用处理器的经典Benchmark来说,“怎么做评测”(Benchmarking Methodology)并不是个很大的问题。比如针对CPU的Benchmark,和一般应用程序的编译运行一样,只要用目标CPU的编译工具编译运行就可以得到结果了。但对于神经网络应用来,从model的训练,再到部署的过程比较复杂(目前也可以有end-to-end compiler的尝试,不过离实用还有距离),基准评测如何执行是无法回避的问题。当然,基准测试很大程度上也只是特殊的应用程序,因此,它的实现和运行的大环境和一个普通的应用运行的环境也是类似的。
BenchIP的运行框架如上图所示,可以看出它在很大程度上是基于Caffe Framework的。Benchmark的Specification,包括模型配置文件和参数文件都是按照Caffe的格式(.prototxt,.caffemodel)。另外,BenchIP还提供一个参考输出结果,用来评测待测硬件实现的精度。
一个新的硬件要放在这个Framework中进行评测,首先需要提供符合标准接口的Library,供评测框架调用。BenchIP使用主要使用性能(Performance),功耗(Power),面积(Area)和准确度(Accuracy)作为主要的评价指标,其中前三个是典型的硬件评测指标,而第四个则主要针对NN应用。其中性能和功耗的结果主要应该运行基准测试而获得。对与一个只是原型的新硬件来说,要获得这些结果,它还要提供一定的仿真和Profiling功能。对于Microbenchmarks来说,这些指标就能给设计优化提供足够的帮助了。而对于Macrobenchmarks,BenchIP还提供一些能够更好的反映设计效率的综合性的指标,比如
反映能耗效率的“Operations per Joule”, 反映运算效率的“Operations per second”以及反映芯片面积效率的“Accuracy affected by area savings”等。
最后,论文还用展示了使用BenchIP对三种CPU,三种GPU和两个硬件加速器进行评估的情况。其中的两个硬件加速器使用的是DianNao和Cambricon。
T.S.:
大家对于人工智能处理器的基准测试越来越关注,从另外一个侧面说明硬件架构设计越来越重视实践的检验和细节的优化。而考虑AI硬件领域的基准测试问r题,几乎要覆盖这个领域的所有内容,也让这个问题更加复杂也更加有趣。
除了用什么测试用例更准确,怎么执行这些测试用例更合理也是个问题。比如目前很多神经网络在部署之前都进行了压缩或者其它优化,而这也是对整体的软硬件效率影响很大的因素。如何把这种层次的优化考虑到基准评测的框架当中也是个值得思考的问题。
(本文授权转载自微信公众号StarryHeavensAbove,作者唐杉)