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对于未来的技术趋势如何适应的问题。感兴趣的同学可以看看原文。
选择基准测试的用例,是设计Benchmark的基础。这篇论文对用例的选择给出了比较详细的解释和一些定量的分析。当然,Benchmark的设计也是一个与时俱进和经验积累的过程,使用什么样用例、什么样的配置应该会越来越优化。