编者按:MLSys大会全称为“ConferenceonMachineLearningandSystems”,由JeffDean、MichaelJordan和YannLeCun等计算机系统和人工智能领域的全球顶尖科学家于2019年发起。2021年的MLSys大会共收到221篇投稿,52篇被录用,其中微软有四篇入选。本文将为大家介绍来自微软亚洲研究院的一项工作:通过分析深度学习算法设计空间在移动端侧推理平台的行为特性,以设计针对不同平台的高效深度学习模型。
传统上,深度学习算法设计和部署平台的开发是相对独立的。算法设计科学家往往侧重于模型精度,而模型运行效率则是通过在设计中加入计算量的限制来进行保证。
图1:深度学习算法设计和模型部署平台的开发是相对独立的。
,微软亚洲研究院异构计算组的研究员们在一篇题为“ToBridgeNeuralNetworkDesignandReal-WorldPerformance:ABehaviorStudyforNeuralNetworks”的论文中提出:仅仅用计算量来限制并不能保证实际部署的运行效率。
研究员们表示,一个典型的例子是MobileNetV3相较于MobileNetV2具有更少的计算量和更低的内存使用,因此在ARMA76CPU+TFLite,V3比V2快25%;但出乎意料的是在IntelMovidiusVPU+OpenVINO,V3却比V2慢75%。
目前,此篇论文已经被MLSys2021(ConferenceonMachineLearningandSystems)大会收录,其主要研究内容是通过分析深度学习算法设计空间在移动端侧推理平台的行为特性,以设计针对不同平台的高效深度学习模型。
换句话说,研究员们在论文中指出,当前仅仅用计算或访存量作为高效模型设计的指标是不合理的。
每个部署框架都有不同的特性,高效算法设计必须考虑目标平台的特性,才能取得最好的性能。
研究目标:评估深度学习算法的行为特性让算法设计者理解目标平台的特性是非常困难的。因为算法和平台设计往往属于不同的研究领域,有很高的学习门槛。更重要的是,近年来部署平台的迭代速度越来越快,而且很多平台的软硬件都是闭源的,因此对于这些平台的特性更是无从得知。
基于此,微软亚洲研究院的研究员们提出了通过评估整个深度学习算法设计空间在目标平台上的行为特性来指导高效的算法设计。其目标是回答以下三个研究问题:
1.算法设计空间中有哪些异常的行为特性?这里的异常特性是指:不同算法配置会导致计算或访存量增加或减少,但部署平。这些特性是在算法设计中要尤其注意利用或避免的。
2.这些异常行为特性背后的原因是什么?
3.这样的特性对高效的深度学习算法的设计有什么启示?
然而,由于每个算法的设计维度都有很多参数可选(本篇论文应用的是针对ImageNet的模型设计空间),整个算法空间轻易就能达到数十亿的数量级,评估所有参数会开销巨大,因此研究员们复用算法设计思路,每次仅调整和评估一个设计维度并固定其它维度以减小设计空间。此外,评估得到的每个维度行为特征可直接作为启发策略应用到算法设计中。研究员们还开发了一套全自动评估工具,流程如图2所示。
表1:本篇论文评估的所有算法设计维度(第一行),以及该维度下对应的配置
表2:评估中使用的七个部署平台
图2:本论文开发的全自动评估工具流程
最终,研究员们一共发现并总结了七条异常的行为特征可用于指导深度学习的算法设计。接下来,研究员们简要针对算法设计者常见的问题,介绍了该论文发现的行为特征以及背后的原因和启示。
研究发现:七个策(1)增加卷积通道数一定会增加推理延迟吗?
发现一
:除KPU外,随着输出通道数的增加,增加(如图3所示)。图3:推理延迟(纵轴)随着输出通道数(横轴)的增加阶梯上升
原因
:由底层硬件的数据级并行导致。以CPU为例,为使用CPU的数据级并行,即SIMD单指令多数据单元,推理框架会使用一个小数据块作为基本计算单位,比如TFLite使用(8,1)×(1,8)→(8,8)作为基本块,因此数据都要被填充成8的倍数,所以展示出如图3(a)中长度为8的阶梯行为。其他平台也是同样的原因。启示
:为了潜在的更高精度,台阶的最大通道数,跳过其它通道数。例如,如果在MetaPruning()这篇论文中应用该启示的话,搜索空间能够从30^14降低到4^14。(2)?
发现二
:同推理平台上差异很大。除了在CPU上,非卷积算子可能会极大地拖慢推理速度(如图4所示)。图4:(Ops指计算量,mac指访存量)
原因
:一个原因是除了CPU,其它推理平台上计算和访存带宽不匹配现象严重。在CPU上,,但在其它平台上,别。另一个原因是,除CPU外其它推理平台对非卷积算子支持较弱。例如,图4展示了SE(SqueezeandExcitation)模块会显著增加模型在几。以GPU为例,SE的Pooling缺少算子融合的支持,因此虽然Pooling只占了5%的计算量,但却消耗了70%。启示
:算法设计平台进行定制。(3)?
发现三
:只有ReLU和ReLU6忽略。HardSwish只在CPU和GPU上可忽略。除了KPU,Swish激活函数在各个推理平台上都会显著(如图5)。图5:不同激活函数在(图中显示了depthwise卷积+,因为激活函数通常和其它算子融合在一起)
原因
:推理平台对新激活函数的算子融合支持较弱。例如,虽然HardSwish常常被认为是对部署友好的算子:和Swish相比,它移除了Sigmoid和指数函数以减少复杂计算。但是由于缺少算子融合支持,它在NPUSwish。启示
:对每个推理平台的算法设计空间应。(4)用小卷积核可?
发现四
:随着内核尺寸的增加,除了CPU、GPU和EdgeTPU的DWConv,Conv和DWConv的增加。原因
:Conv和DWConv在除CPU和GPU之外的平台上存储带宽都是受限的。当,访存的增加要远小于计算量增加,。图6:卷积和depthwise(K)的变化
启示
:在NPU、DSP和VPU上,应该使用更大尺寸的DWConv卷积核以得到模型精度的提升。同样,在NPU、DSP和EdgeTPU上,则应该使用更大尺寸的卷积内核。(5)使用低数据精度会在保证模型精度可接受的情况下?
发现五
:在NPU上应用INT8相较于FP16能获得11倍的加速比(除了MobileNetV3只有2.5的加速比)。然而,在CPU上,INT8相较于FP32的加速比小于3.6。原因
:NPU具有专门的INT8的计算单元,而不是像CPU和GPU一样在不同的运算精度之间共享计算单元。另外,在CPU上,INT8重量化算子(requantization)对低数据重用率的算子代价很高。启示
:为了在CPU上,每个算子应该选择合适的数据精度。发现六
:INT8会在许多模型上显著降低推理精度。原因
:一些推理平台的INT8量化算法实现对某些算子不友好,从而导致精度降低。启示
:如果目标平台的数据精度是INT8,那么在算法设计空间内应移除可能造成准确度损失的模块或算子。(6)各个推理平台的横向比较是怎样的?
发现七
:考,特别是对新模型的支持程度,CPU平台是最好的选择。,以及对基础的,EdgeTPU和NPU是最好的选择。综上所述,研究员们提出了一个针对深度学习算法设计空间的数据集,通过在七种有代表性的边缘端侧推理平台上评估该数据集,发现了七个行为特征,并对每一个提出了相应的启发策略来改进。案例研究表明,通过应用这些策略,通道剪枝和NAS的搜索空间可被大幅度减少。