对手机或者pc芯片比较有兴趣的可能对flops这个字眼不陌生,比如苹果A14芯片性能,或者英伟达V100的算力怎么样都会出现flops, 如果做过ai模型剪枝的同学,可能在一些压缩框架比如distiller, ncnn, paddle.slim里也看到过flops, 问题来了,这两个flops是一个意思吗?
定义
- FLOPS: 全大写,指每秒浮点运算次数,可以理解为计算的速度。是衡量硬件性能的一个指标。(硬件)
- FLOPs: s小写,指浮点运算数,理解为计算量。可以用来衡量算法/模型的复杂度。(模型) 在论文中常用GFLOPs(1 GFLOPs = 10^9 FLOPs)
获取
FLOPS
这个值一般是有硬件厂商给出来的
FLOPs
这个值是根据深度模型算出来的
卷积层
就卷积层的计算过程而言,先关注生成的output map的一个pixel所需要的标量乘法计算;然后乘以所有output map的pixel总数目,这里每个人有每个人的计算方式,但是普遍以英伟达的公式为标准。
全连接层
I代表输入单元数, O代表输出单元数.
使用
pytorch:
torchstat
tensorflow:
PocketFlow
参考
- https://www.zhihu.com/question/65305385
- https://www.jianshu.com/p/b1ceaa7effa8