模型复杂度与硬件性能的衡量

1. 模型复杂度的衡量

参数数量(Params)——空间复杂度:指模型含有多少参数,直接决定模型的大小,也影响推断时对内存的占用量

  • 单位通常为 M,通常参数用 float32 表示,所以模型大小是参数数量的 4 倍左右
  • 参数数量与模型大小转换示例:10M float32 bit = 10M × 4 Byte = 40MB

理论计算量(FLOPs)——时间复杂度:指模型推断时需要多少计算次数

  • 是 Floating Point Operations 的缩写(注意 s 小写),可以用来衡量算法/模型的复杂度,这关系到算法速度,大模型的单位通常为 G(GFLOPs:10亿次浮点运算),小模型单位通常为 M
  • 通常只考虑乘加操作(Multi-Adds)的数量,而且只考虑 CONV 和 FC 等参数层的计算量,忽略 BN 和 ReLU 等等。一般情况,CONV 和 FC 层也会忽略仅纯加操作的计算量,如 bias 偏置加和 shotcut 残差加等,目前有 BN 的卷积层可以不加 bias
  • PS:也有用 MAC(Memory Access Cost) 表示的

注意⚠️:
1)params只与定义的网络结构有关,和forward的任何操作无关,即定义好了网络结构,参数就确定了;FLOPs和不同的层运算结构有关,如果forward时在同一层(同一名字命名的层)多次运算,FLOPs不会增加

2)通常网络中的全连接层参数量较大,需要较大的内存,但其运算量较小;卷积层参数量较小,但运算量较大,是一种计算密集型的操作。此外,还有一些网络结构(如池化和Dropout)没有参数但存在计算
3)Model_size = 4*params  模型大小约为参数量的4倍

2. 硬件性能的衡量

算力:

  • FLOPS(Floating Point Of Per Second)计算平台倾尽全力每秒钟所能完成的浮点运算数(计算速度,fp32),理解为计算速度,单位一般为 TFLOPS
  • 计算公式一般为 处理器核心时钟频率 × 处理器核心数量 × 特定数据类型的指令吞吐量 × 2 ,后面乘以 2 是因为乘加视作两次浮点运算
  • eg:NVIDIA A100 GPU 频率为 1.41GHZ,处理器( Streaming Multiprocessors, SMs)数为 108,每个处理器 FP32 的 CUDA Cores 数量为 64,那么 PeakFLOPS = 1.41*108*64*2 = 19.49TFLOPS

带宽:

  • 计算平台倾尽全力每秒所能完成的内存(CPU 内存 or GPU 显存)交换量,单位一般为 GB/s(GByte/second)
  • 计算公式一般为 (内存核心时钟频率 × 2) × (内存位宽 / 8) × 通道数,内存频率乘以 2 是因为一个时钟周期传输 2 bit 数据(上升沿和下降沿各传送一次);内存位宽的单位为 bit,除以 8 转换为 Byte;现在的内存条一般通道数为 2
  • eg:某相机芯片带宽:(2000MHZ × 2) × (32 / 8) × 2 = 32GB/s ,NVIDIA A100 带宽:(1215MHZ × 2) × (5120 / 8) × 1 = 1555.2GB/s

3. 模型复杂度的计算公式

(K_h是卷积核的高度;K_w是卷积核的宽度; C_in是输入的通道数; C_out是输出的通道数,+1是考虑bais,H_out和W_out为输出特征图的高宽)

3.1 Params

  • 卷积层:Params =(K_h * K_w * C_in + 1)* C_out
  • 全连接层:Params = (C_in + 1) * C_out

不考虑bais:

  • 卷积层:Params = K_h * K_w * C_in * C_out
  • 全连接层:Params = C_in  * C_out

3.2 FLOPs

  • 卷积层:FLOPs = K_h * K_w * C_in * C_out * H_out * W_out = Params * H_out * W_out
  • 全连接层:FLOPs = C_in  * C_out

4. 计算模型Params和FLOPs的第三方库

  • thop库
  • torchstat库
  • torchinfo库
  • ptflops库
  • fvcore库
  • pytorch_model_summary库
  • torchsummary库

5. 复杂度对模型的影响

  • 时间复杂度决定了模型的训练/预测时间。如果复杂度过高,则会导致模型训练和预测耗费大量时间,既无法快速的验证想法和改善模型,也无法做到快速的预测;
  • 空间复杂度决定了模型的参数数量。由于维度的限制,模型的参数越多,训练模型所需的数据量就越大,而现实生活中的数据集通常不会太大,这会导致模型的训练更容易过拟合;
  • 当我们需要裁剪模型时,由于卷积核的空间尺寸通常已经很小(3x3),而网络的深度又与模型的表征能力紧密相关,不宜过多削减,因此模型裁剪通常最先下手的地方就是通道数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值