美文网首页程序员
模型 FLOPs, MACs, MAdds 关系 以及 常用计算

模型 FLOPs, MACs, MAdds 关系 以及 常用计算

作者: 昵称己存在 | 来源:发表于2020-06-11 11:31 被阅读0次

    论文中比较模型的性能时,需要提供模型的大小。 衡量模型大小的指标有: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

    太长不看版:
    FLOPs = 2 * MACs = 2 * MAdds

    知道了三者的关系后,接下来会发现使用不同的工具统计出来的这些值是不一样。 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 关系 以及 常用计算

        本文链接:https://www.haomeiwen.com/subject/djavtktx.html