购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.1.3 计算量与内存访问代价

计算量指的是参数与特征进行乘、加等一系列操作的计算次数总和,因为四则运算都可以转为乘法操作与加法操作,所以一般只统计乘、加操作。

计算量的主要指标是FLOPs(Floating Point Operations),即浮点操作数。

一次多通道卷积的乘法操作数为( C out × H out × W out )×( K × K × C in ),每得到输出特征图中的一个元素,需要( K × K × C in -1)次加法,得到整个特征图的操作数为( C out × H out × W out )×( K × K × C in -1),如果再考虑偏置,总的加法操作数为( C out × H out × W out )×( K × K × C in )。

因为乘法的计算量远远大于加法,所以一般用乘法操作数作为FLOPs。

对于全连接层,假设输入神经元数量为 I ,输出神经元数量为 O ,则乘法操作数为 I × O ,乘法与加法总操作数为( I + I -1)× O + O

各个研究者的论文与具体代码实现中,计算方法可能会有些许差异,但相差不大。

另一个与FLOPs相关的指标为内存访问代价(Memory Access Cost,MAC),它用于计算输入特征图读取、输出特征图写入及特征权重的存储所需要的内存大小,一次多通道卷积的MAC计算如式(2.1)。

下面使用torchstat工具来统计FLOPs。

表2.2所示为simpleconv3模型的计算量统计结果。

表2.2 simpleconv3模型计算量统计结果

从表2.2可以看出,计算量和参数量并不完全线性相关,如conv1的参数量占比不到1%(336/1608722),但计算量远超过1%(等于342792/4716646)。

以第1个卷积层为例,输入为3个通道,输出为23个通道,输出特征图大小为23×23,下面计算其中的一些指标:FLOPs=(12×23×23)×(3×3×3)+12×23×23=177744(12×23×23对应偏置的乘法操作,其占比与卷积乘法部分相比可忽略不计);所有的乘法与加法操作总数为Madd=(12×23×23)×(3×3×3+3×3×3-1)+12×23×23=342792。

基于FLOPs和MAC,还可以得到计算量/访存比(Computation/Memory Access),这个值为模型计算量与内存大小的比值。比值越大,代表我们把更多的资源倾向于计算,而不是内存访问;比值越小,则代表我们把更多的资源倾向于内存访问,这个过程相比计算可能要耗费更多的时间。如果时间主要消耗在等待读写数据上,导致CPU利用率很低,那么该任务就是I/O密集型的。I/O密集型设备(I/O-bound Device)将无法实现最高的计算效率,导致模型时延增加,一般希望计算量/访存比要尽量大,以更高效地利用硬件资源。 bO04Douwir8WF3dc5OAapaAICgNFf0cu1DaMZ9c2wgfrAHrKvNEpayP8LqB5paUH

点击中间区域
呼出菜单
上一章
目录
下一章
×