\

我们如何使EfficientNet更高效

作者:

SHARE

Share on weixin
Share on weibo
Share on linkedin

SUBSCRIBE

Graphcore Research发表了一篇新论文,研究了三种用于在IPU(智能处理器)上优化计算机视觉模型EfficientNet的性能的方法。通过结合这三项技术,在训练方面我们实现了7倍的吞吐量提升,推理则是3.6倍以上吞吐量提升。

针对实践应用优化EfficientNet

在我们的新论文《让EfficientNet更高效:探索与批次无关的归一化、分组卷积和降低分辨率训练》(“Making EfficientNet More Efficient: Exploring Batch-Independent Normalization, Group Convolutions and Reduced Resolution Training”)中,我们采用了先进的模型EfficientNet,该模型经过优化,理论上是高效的,然后我们研究了在实践中提高该模型在IPU上的效率的三种方法。

例如,添加分组卷积已被证明在IPU上表现非常好。在理论计算成本差异最小的情况下,这一方法实现了多达3倍的实践训练吞吐量提升。

通过结合所研究的这三项技术,针对可比验证准确性,在IPU上,我们在训练方面实现了多达7倍的吞吐量提升,推理则是3.6倍吞吐量提升。

模型训练的理论成本(通常以FLOPs来衡量)很容易计算,并且与所使用的硬件和软件栈无关。这些特性使其成为一种在衡量复杂性方面颇具吸引力的方式,并已成为寻求更高效的深度学习模型的关键驱动因素。

然而在现实中,这种训练成本的理论衡量与实践成本之间存在显著差异。这是因为简单的FLOP计数没有考虑许多其他重要因素,例如计算和数据移动的结构。

关于分组卷积

我们研究的第一种方法是如何提高与深度卷积(换言之,组尺寸为1的分组卷积)相关的性能。EfficientNet对所有空间卷积操作都在本地使用深度卷积。它们以FLOP和参数效率而闻名,因此已成功用于许多最先进的卷积神经网络(CNN)。但是在实践中,它们为加速带来了一些挑战。

例如,由于每个空间内核都是孤立开来考虑的,由此产生的、通常由向量乘法累加硬件加速的点积运算的长度是有限的。这意味着该硬件无法始终得到充分利用,从而导致“被浪费的”周期。

深度卷积的算术强度也非常低,因为它们需要大量与执行的FLOPs数量有关的数据传输,这意味着存储访问速度是一个重要因素。虽然在替代硬件上这可能会限制吞吐量,但IPU的处理器内存储架构提供了极高带宽的存储访问,从而显著提高了此类低算术强度操作的性能。

最后,我们发现,当深度卷积被夹在两个密集的逐点“投影”卷积之间以形成MBConv块(MBConv Block)时是最有效的。这些逐点卷积以围绕空间深度卷积、数值为6的“扩展因子”来增加和减少激活的维度。这种扩展带来了良好的任务性能,但它也产生了非常大的激活张量,这些张量可以支配存储需求,并最终限制可用的最大批次尺寸。

为了解决这三个问题,我们对MBConv块进行了简单但重要的改动。我们将卷积组的尺寸从1增加到16,这可以带来更好的IPU硬件利用率。接下来,为了补偿FLOPs和参数的增加并解决存储问题,我们将扩展率降低到4。结果是形成了一个存储效率更高、计算更紧凑的EfficientNet版本,我们将其称为G16-EfficientNet。

虽然这些改动的主要动机是为了提高吞吐量,但我们也发现,这些改动使我们能够在所有模型尺寸上实现比Vanilla Group尺寸1(G1-EfficientNet)基线更高的ImageNet验证准确性。这种修改带来了实践效率的显著提高。

G1-EfficientNet(基线)与G16变体(我们的方法)的理论(左)和实践(右)效率比较

代理归一化激活(Proxy Normalised Activation)

对卷积和矩阵乘法运算的输出进行归一化已成为现代CNN的关键要素,批次归一化(Batch Normalisation)是用于此目的的最常见的形式方法。然而,Batch Norm(批次规范)带来的对批次尺寸的限制是一个众所周知的问题,并由此引发了一系列独立于批次的替代方案的创新。虽然其中许多方法与ResNet模型配合良好,但我们发现它们中没有一个能达到与EfficientNet的Batch Norm相同的性能。

为了解决缺乏Batch Norm替代方案的问题,我们利用了近期一篇论文中曾经介绍过的新颖的、与批次无关的归一化方法Proxy Norm(代理规范)。该方法建立在已经成功的Group Normalisation(和Layer Normalisation)方法的基础上。

Group Norm(组规范)和Layer Norm(层规范)存在一个问题,即激活可能会在通道上非归一化。随着深度的增加,这个问题会变得更糟,因为非归一化在每一层都变得更加突出。虽然可以通过简单地减少Group Norm中组的尺寸来避免这个问题,但这种组尺寸的减少会改变表达性,并对性能产生不良影响。

通过保留表达性,同时抵消非归一化的两个主要来源——仿射变换和遵循Group Norm或Layer Norm的激活函数,Proxy Norm提供了更好的解决方案。具体而言,通过将Group Norm或Layer Norm的输出同化为高斯“代理”变量,并将相同的仿射变换和相同的激活函数应用于该代理变量,来抵消非归一化。然后使用非归一化代理变量的统计数据来校正实际激活中的预期分布偏移。

Proxy Norm允许我们将组尺寸最大化(即使用Layer Norm)并保持表达性,而不会出现通道上非归一化的问题。

带有额外代理归一化激活操作的卷积块以红色显示

这一相关论文详细探讨了这种新颖的归一化技术。

重要的是,这种整体方法并没有模仿Batch Norm的任何隐式正则化特征。因此,需要额外的正则化——在这项工作中,我们结合使用mixup和cutmix。当我们将Layer Norm + Proxy Norm(LN + PN)的性能与具有标准预处理和AutoAugment(AA)的两个Batch Norm(BN)基线的性能进行比较时,我们发现,在所有模型尺寸上,LN + PN都达到或超过了具有标准预处理的BN的性能。此外,LN + PN几乎与配备了AA的BN一样出色,但是AA需要一个昂贵的增强参数“训练”过程。

针对不同尺寸EfficientNet的不同归一化方法的对比

降低分辨率训练

Touvron等人(2020)的论文表明,通过使用比最初训练的图像更大的图像对最后几层进行训练后微调,可以实现显著的准确性提升。这个微调阶段非常便宜,因此很明显这将获得一些实际的训练效率增益。这提出了一些更进一步的、有趣的研究问题。应该如何选择训练分辨率以实现效率的最大化?鉴于较大的图像测试速度较慢,这对推理效率有什么影响?

为了研究这些问题,我们对比了两种不同分辨率下的训练,“原始”分辨率(如原始EfficientNet工作中所定义),或大约一半像素数的分辨率。然后,我们在广泛的图像尺寸范围内进行了微调和测试。这使我们能够研究训练分辨率对效率的直接影响,并确定在训练和推理中实现最佳速度-准确度折衷的帕累托最优组合。

在比较训练效率时,我们考虑了两种测试场景:在原始分辨率上进行测试,或选择“最佳”分辨率,以在整个分辨率范围内实现验证准确性的最大化。

在以原始分辨率进行测试时,我们发现使用半尺寸图像进行训练会产生相当大的理论和实践效率提升。很显然,对于给定的模型尺寸,我们发现以半分辨率训练和在原始分辨率下进行微调所产生的最终准确性甚至比在原始分辨率下进行训练、微调和测试的最终准确率还要更高。这个结论表明,对于ImageNet训练,我们应该始终以比训练时更高的分辨率进行测试。我们现在希望了解这是否也适用于其他领域。

如果我们接下来以“最佳”图像分辨率进行测试,会看到在原始分辨率下进行训练可以显著提高最终准确性,缩小帕累托前沿的差距。

然而应该注意的是,为了实现这一点,“原始”训练方案的“最佳”测试分辨率最终比对应于半训练分辨率案例的那些结果大得多。这意味着它们在推理时间上更昂贵。

这些结果凸显了我们研究的这三项改进所实现的训练效率提升:(i)分组卷积 [G16(我们的方法)对比G1];(ii)代理归一化激活 [LN + PN(我们的方法)对比GN]和(iii)半分辨率训练 [半分辨率(我们的方法)对比原始分辨率]。请注意,基线结果没有微调,并使用原始图像分辨率。

单独比较推理效率,我们发现以半分辨率进行训练可以在整个准确性范围内产生帕累托最优效率。这是一个非凡的结果,因为在推理中根本没有直接的FLOP优势。此外,沿半分辨率推理效率帕累托前沿的点仍然是训练吞吐量的最佳选择。

理论和实践推理效率。在所有分辨率下进行测试;线条突出显示帕累托前沿。

在所有效率指标中,具有Proxy Norm的模型的性能达到或者略优于具有Group Norm的模型。这源于仅以很小的吞吐量成本(约为10%)就实现了准确性的提升。然而重要的是,具有Proxy Norm的模型在整个帕累托前沿使用的参数较少,这突显了Proxy Norm在模型尺寸方面的额外效率优势。

如何让EfficientNet更高效

在开展这项研究时,我们对EfficientNet模型进行了一些修改,旨在提高训练和推理的整体效率:

  • 通过添加分组卷积并降低MBConv块中的扩展率,我们提高了空间卷积的IPU硬件利用率,并减少了存储消耗。
  • 通过使用半分辨率的图像进行训练,我们缩短了训练时间,并显著提高了最终准确性。
  • 通过引入新的归一化方法Proxy Norm,我们在不依赖于批次信息的情况下,实现了与Batch Norm相同的性能。据我们所知,这是令EfficientNet实现这一目标的首个方法。

结合使用所有这些方法,我们在IPU上的实践训练效率提高多达7倍,实践推理效率提高了3.6倍。这些结果表明,当使用适合处理分组卷积的硬件(如IPU)时,EfficientNet可以提供训练和推理效率,使其超越理论、走向现实世界的实践应用。

阅读论文

本文最初发布于Towards Data Science

More Posts

腾讯云上的IPU预览正式推出,Graphcore公有云大批量部署进行中

联想服务器现已在Graphcore IPU系统中可用

Graphcore为Twigfarm带来价性比提升

超级智能计算:Simon Knowles在WAICF演讲实录

LabGenius利用Graphcore IPU加速基于人工智能的药物研发

使用PopVision分析工具优化IPU应用程序

获取最新的GRAPHCORE资讯

在下方注册以获取最新的资讯和更新:




获取最新的GRAPHCORE资讯

在下方注册以获取最新的资讯和更新: