模型 FLOPs, MACs, MAdds 关系 以及 常用计算工具的主要差异

论文中比较模型的性能时,需要提供模型的大小。 衡量模型大小的指标有:parameters和 [FLOPs, MACs, MAdds] 中三者之一。

1. FLOPs, MACs, MAdds ??? 三者有什么关系呢?

image.png

1.1. MACs 和MAdds

首先,MACsMAdds说的是一个东西。两者值是一样的

1.2. FLOPs

根据github issue 的回答:

Most of modern hardware architectures uses FMA instructions for operations with tensors.
FMA computes a*x+b as one operation. Roughly GMACs = 0.5 * GFLOPs

太长不看版:

知道了三者的关系后,接下来会发现使用不同的工具统计出来的这些值是不一样。 parameters的计算方式比较统一,基本一样。 而MACs总是有些差异。 接下来就分析一下这些差异的来源。

2. 计算工具差异

首先很常用的工具:

TensorFlow:
自带tf.RunMetadata(), 使用例子可以参考(TensorFlow: Is there a way to measure FLOPS for a model?l)

PyTorch:

https://github.com/Lyken17/pytorch-OpCounter
https://github.com/sovrasov/flops-counter.pytorch

MXNet:
TODO

非常感谢这些开源的作者和一同完善的contributors. Respect!

以下是针对FLOPs 而不是parameters (基本一致)的差别:

BatchNorm Activaton return
tf.RunMetadata - ? FLOPs
pytorch-OpCounter MACs
flops-counter.pytorch - MACs

最后,
https://github.com/facebookresearch/detectron2
https://github.com/rbgirshick/yacs
https://github.com/facebookresearch/pycls

也都带有计算的方式,但是不太了解,以后更新.

pycls 不计算BatchNorm, Activation的MACs

你可能感兴趣的:(模型 FLOPs, MACs, MAdds 关系 以及 常用计算工具的主要差异)