目录
概念
单位换算
浮点运算量(FLOPs)和参数量(paremeters)的区别
深度学习框架FLOPs的组成
FLOPs没有考虑几个对速度有相当大影响的重要因素——MAC\并行度\平台
CNN的FLOPs计算公式
CNN的#paras计算公式
python计算FLOPs的库
参考
FLOPS:注意全大写,是floating point operations per second的缩写,意指每秒浮点运算次数,理解为计算速度。是一个衡量硬件性能的指标。
FLOPs:注意s小写,是floating point operations的缩写(s表复数),意指浮点运算数,理解为计算量。可以用来衡量算法/模型的复杂度。
1 MFLOPs(mega) = 10^6 FLOPs,即:100万次浮点运算
1 GFLOPs(giga) = 10^9 FLOPs,即:10亿次浮点运算
1 TFLOPs(tera) = 10^12 FLOPs,即:1万亿次浮点运算
我们知道,通常我们去评价一个模型时,首先看的应该是它的精确度,当你精确度不行的时候,你和别人说我的模型预测的多么多么的快,部署的时候占的内存多么多么的小,都是白搭。但当你模型达到一定的精确度之后,就需要更进一步的评价指标来评价你模型:1)前向传播时所需的计算力,它反应了对硬件如GPU性能要求的高低;2)参数个数,它反应所占内存大小。为什么要加上这两个指标呢?因为这事关你模型算法的落地。比如你要在手机和汽车上部署深度学习模型,对模型大小和计算力就有严格要求。模型参数想必大家都知道是什么怎么算了,而前向传播时所需的计算力可能还会带有一点点疑问。所以这里总计一下前向传播时所需的计算力。它正是由FLOPs体现,那么FLOPs该怎么计算呢?
浮点运算量是实际运算过程中的加减乘除计算过程中的计算次数,描述计算力;
参数量只是指的模型大小,和输入的图片大小无关,描述需要内存
1.卷积运算Conv
2. BatchNorm
3. ReLu
4. Linear
5. Upsample
6. Poolings
其中,Conv所占的比重通常是最大的. 此外,它和输入图像的大小也有关系
1.MAC(Memory Access Cost)
比如:MAC(内存访问成本),计算机在进行计算时候要加载到缓存中,然后再计算,这个加载过程是需要时间的。其中,分组卷积(group convolution)是对MAC消耗比较多的操作(例如AlexNet多GPU)。
2.并行度
第二个对速度有相当大影响的重要因素就是模型的并行度。
在相同的FLOPs下,具有高并行度的模型可能比具有低并行度的另一个模型快得多。如果网络的并行度较高,那么速度就会有显著的提升。
3.计算平台的不同
不同的运行平台,得到的FLOPs也不相同。有的平台会对操作进行优化,比如:cudnn加强了对3×3conv计算的优化。这样一来,不同平台的FLOPs大小确实没有什么说服力。
是卷积操作,为bias操作,2表示为MAC操作(包含累加及累乘)。H、W是输出的feature map的大小, 表示输入输出的通道数,K是卷积核大小。
来自NVIDIA论文https://arxiv.org/pdf/1611.06440.pdf
#paras=
flops_counter
https://zhuanlan.zhihu.com/p/144938518
https://www.zhihu.com/question/65305385/answer/641705098
https://zhuanlan.zhihu.com/p/144938518