Press "Enter" to skip to content

使用FLOPs和MACs计算深度学习模型的计算效率

在本文中,我们将学习有关FLOPs和MACs的定义、区别以及如何使用Python包计算它们

什么是FLOPs和MACs?

FLOPs(浮点操作)和MACs(乘累加操作)是计算深度学习模型计算复杂度常用的度量方式。它们是一种快速而简单的方式来了解执行给定计算所需的算术操作数量。例如,当使用不同的模型架构(如MobileNet或DenseNet)为边缘设备工作时,人们使用MACs或FLOPs来估计模型性能。同时,我们使用“估计”这个词的原因是这两个度量指标都是近似值,而不是实际运行时间性能的捕捉。然而,它们仍然可以提供非常有用的关于能量消耗或计算要求的信息,这在边缘计算中非常有用。

使用FLOPs和MACs计算深度学习模型的计算效率 计算科学 第1张

FLOPs具体指的是浮点操作的数量,包括在浮点数上进行加法、减法、乘法和除法运算。这些操作在许多涉及机器学习的数学计算中是普遍存在的,例如矩阵乘法、激活和梯度计算。FLOPs通常用于衡量模型或模型内特定操作的计算成本或复杂度。当我们需要提供所需的总算术操作数量的估计时,这是非常有帮助的,一般用于衡量计算效率。

另一方面,MACs仅计算乘积累加操作的数量,这涉及将两个数字相乘并加上结果。这个操作是许多线性代数操作的基础,例如矩阵乘法、卷积和点积。MACs通常用作在模型中大量依赖线性代数操作的计算复杂度的更具体的衡量方式,例如卷积神经网络(CNN)。

值得一提的是,FLOPs不能成为人们计算计算效率的单一因素。在估计模型效率时,还必须考虑许多其他因素。例如,系统设置的并行度如何;模型有哪些架构(例如,MACs中的组卷积成本);模型使用哪种计算平台(例如,Cudnn对深度神经网络进行GPU加速,标准操作(如前向或归一化)高度调整)。

FLOPS和FLOPs是相同的吗?

带有所有大写字母的FLOPS是“每秒浮点操作数”的缩写,它指的是计算速度,通常用作硬件性能的测量。在“FLOPS”中,“S”代表“秒”,与“P”(作为“每”)一起,通常用于表示速率。

另一方面,FLOPs(小写字母“s”表示复数)指的是浮点操作。它通常用于计算算法或模型的计算复杂度。但是,在AI讨论中,有时FLOPs可以同时具有上述两种含义,并且读者需要确定它所代表的确切含义。也有一些讨论呼吁人们完全放弃使用“FLOPs”,而改用“FLOP”,以便更容易区分每个意思。在本文中,我们将继续使用FLOPs。

FLOPs和MACs之间的关系

使用FLOPs和MACs计算深度学习模型的计算效率 计算科学 第2张

正如前一节中提到的,FLOPs和MACs之间的主要区别包括它们计算哪些类型的算术操作以及它们的使用环境。AI社区的普遍共识(如图2中的GitHub评论)是一个MAC等于大约两个FLOPs。对于深度神经网络,乘积累加操作在计算中占据了重要地位,因此MACs被认为更为重要。

如何计算FLOPs?

好消息是,已经有多个开源软件包可用于专门计算FLOPs,因此您不必从头开始实现它。其中一些最受欢迎的包括flops-counter.pytorch和pytorch-OpCounter。还有一些软件包,例如torchstat,它基于PyTorch为用户提供了一个通用的网络分析器。值得注意的是,对于这些包,支持的层和模型是有限的。因此,如果您正在运行由定制的网络层组成的模型,则可能需要自己计算FLOPs。

这里我们展示了一个使用pytorch-OpCounter和来自torchvision的预训练AlexNet计算FLOPs的代码示例:

from torchvision.models import alexnet
from thop import profile

model = alexnet()
input = torch.randn(1, 3, 224, 224)
macs, params = profile(model, inputs=(input, ))

结论

在本文中,我们介绍了FLOPs和MACs的定义,以及它们通常的用途和两种属性之间的区别。

参考文献

  • https://github.com/sovrasov/flops-counter.pytorch
  • https://github.com/Lyken17/pytorch-OpCounter
  • https://github.com/Swall0w/torchstat
  • https://arxiv.org/pdf/1704.04861.pdf
  • https://arxiv.org/abs/1608.06993

Danni Li是Meta的现任AI住院医师。她对构建高效的AI系统感兴趣,目前的研究重点是设备上的ML模型。她也是开源协作和利用社区支持最大化我们创新潜力的坚定信仰者。

Leave a Reply

Your email address will not be published. Required fields are marked *