深度学习-计算量及GPU显存

时间:2024-03-30 15:50:47

1、计算量MACC与FLOP

MACC:表示一次乘法累加。

FLOP:表示计算量,比如一次乘法或加法运算。FLOPs为FLOP单位,因此1 MACC=2 FLOPs

我们通常统计计算量使用FLOPs(浮点运算数),但是这里我们使用MACCs或乘法累加数。

理论计算量用FLOPs表示,关系到算法速度,大模型的单位通常为G,小模型通道为M。注意两点:

  1. 理论计算量通常只考虑只考虑CONV和FC等参数层的计算量,忽略BatchNorm和PReLU等等。一般情况,CONV和FC层也会忽略仅纯加操作的计算量,如bias偏置加和shotcut残差加等,目前技术有BN的CNN可以不加bias。
  2. 理论计算量通常和实际ARM实测速度会有不一致,主要是理论计算量太过理论化,没有考虑不同硬件IO速度和计算力差异,最重要的是inference framework部署框架优化水平和程度差异,不同框架的优化的关注点不一样,同一框架对不同层的优化程度也不一样。Inference Framework以我用过的ncnn为代表。

2、参数数量

参数数量用params表示,关系到模型大小,单位通常为M,通常参数用float32表示,所以模型大小是参数数量的4倍。

float32是4个字节,因此模型大小字节数=参数量×4

3、GPU

这是 nvidia-smi 命令的输出,其中最重要的两个指标:

  • 显存占用

  • GPU 利用率

显存可以看成是空间,类似于内存。

  • 显存用于存放模型,数据

  • 显存越大,所能运行的网络也就越大

显存占用主要包括参数的显存占用、梯度与动量的显存占用、输入输出的显存占用、

只有有参数的层,才会有显存占用。这部份的显存占用和输入无关,模型加载完成之后就会占用。

深度学习中神经网络的显存占用有如下公式:

显存占用 = 模型显存占用 + batch_size × 每个样本的显存占用

 

GPU 计算单元类似于 CPU 中的核,用来进行数值计算。衡量计算量的单位是 flop: the number of floating-point multiplication-adds,浮点数先乘后加算一个 flop。计算能力越强大,速度越快。衡量计算能力的单位是 flops: 每秒能执行的 flop 数量

显卡简介:

深度学习-计算量及GPU显存

参考:https://zhuanlan.zhihu.com/p/31558973

https://zhuanlan.zhihu.com/p/37074222