目录

概念

单位换算

浮点运算量(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该怎么计算呢?

浮点运算量(FLOPs)和参数量(paremeters)的区别

浮点运算量是实际运算过程中的加减乘除计算过程中的计算次数,描述计算力;

参数量只是指的模型大小,和输入的图片大小无关,描述需要内存

深度学习框架FLOPs的组成

1.卷积运算Conv

2. BatchNorm

3. ReLu

4. Linear

5. Upsample

6. Poolings

其中,Conv所占的比重通常是最大的. 此外,它和输入图像的大小也有关系

FLOPs没有考虑几个对速度有相当大影响的重要因素——MAC\并行度\平台

1.MAC(Memory Access Cost)

比如:MAC(内存访问成本),计算机在进行计算时候要加载到缓存中,然后再计算,这个加载过程是需要时间的。其中,分组卷积(group convolution)是对MAC消耗比较多的操作(例如AlexNet多GPU)。

2.并行度

第二个对速度有相当大影响的重要因素就是模型的并行度。

在相同的FLOPs下,具有高并行度的模型可能比具有低并行度的另一个模型快得多。如果网络的并行度较高,那么速度就会有显著的提升。

3.计算平台的不同

不同的运行平台,得到的FLOPs也不相同。有的平台会对操作进行优化,比如:cudnn加强了对3×3conv计算的优化。这样一来,不同平台的FLOPs大小确实没有什么说服力。

CNN的FLOPs计算公式

                

Android jni提高浮点运算效率 浮点运算 gpu_Android jni提高浮点运算效率

Android jni提高浮点运算效率 浮点运算 gpu_并行度_02

是卷积操作,

Android jni提高浮点运算效率 浮点运算 gpu_并行度_03

为bias操作,2表示为MAC操作(包含累加及累乘)。H、W是输出的feature map的大小,

Android jni提高浮点运算效率 浮点运算 gpu_卷积_04

  

Android jni提高浮点运算效率 浮点运算 gpu_并行度_03

表示输入输出的通道数,K是卷积核大小。

CNN的#paras计算公式

#paras=

Android jni提高浮点运算效率 浮点运算 gpu_并行度_06

 

python计算FLOPs的库

flops_counter