MACC:表示一次乘法累加。
FLOP:表示计算量,比如一次乘法或加法运算。FLOPs为FLOP单位,因此1 MACC=2 FLOPs
我们通常统计计算量使用FLOPs(浮点运算数),但是这里我们使用MACCs或乘法累加数。
理论计算量用FLOPs表示,关系到算法速度,大模型的单位通常为G,小模型通道为M。注意两点:
理论计算量通常只考虑只考虑CONV和FC等参数层的计算量,忽略BatchNorm和PReLU等等。一般情况,CONV和FC层也会忽略仅纯加操作的计算量,如bias偏置加和shotcut残差加等,目前技术有BN的CNN可以不加bias。理论计算量通常和实际ARM实测速度会有不一致,主要是理论计算量太过理论化,没有考虑不同硬件IO速度和计算力差异,最重要的是inference framework部署框架优化水平和程度差异,不同框架的优化的关注点不一样,同一框架对不同层的优化程度也不一样。Inference Framework以我用过的ncnn为代表。参数数量用params表示,关系到模型大小,单位通常为M,通常参数用float32表示,所以模型大小是参数数量的4倍。
float32是4个字节,因此模型大小字节数=参数量×4
这是 nvidia-smi 命令的输出,其中最重要的两个指标:
显存占用
GPU 利用率
显存可以看成是空间,类似于内存。
显存用于存放模型,数据
显存越大,所能运行的网络也就越大
显存占用主要包括参数的显存占用、梯度与动量的显存占用、输入输出的显存占用、
只有有参数的层,才会有显存占用。这部份的显存占用和输入无关,模型加载完成之后就会占用。
深度学习中神经网络的显存占用有如下公式:
显存占用 = 模型显存占用 + batch_size × 每个样本的显存占用
GPU 计算单元类似于 CPU 中的核,用来进行数值计算。衡量计算量的单位是 flop: the number of floating-point multiplication-adds,浮点数先乘后加算一个 flop。计算能力越强大,速度越快。衡量计算能力的单位是 flops: 每秒能执行的 flop 数量
显卡简介:
参考:https://zhuanlan.zhihu.com/p/31558973
https://zhuanlan.zhihu.com/p/37074222