一、卷积层参数计算

        卷积层需要关注的参数有conv(kernel_size,in_channel,out_channel),即卷积核大小,输入输出通道数,和偏差bias。

        计算公式:conv_param=(k_size*k_size*in_channel+bias)*out_channel

for example:

图像大小:640*640*3(用不到)

卷积核大小:3*3

输入通道大小:3

输出通道大小:64

则参数个数为:param=(3*3*3+1)*64=1792

二、全连接网络参数计算

        全连接层需要关注的参数有输入神经元数M和输出神经元数N。

参数计算公式:param=(M+1)*N

for example:

输入神经元:M=3

输出神经元:N=5

则参数个数为:param=(3+1)*5=20

三、衡量模型复杂度

        模型参数数量,直接决定了模型的大小,也影响推断时对内存的占用量。模型大小单位通常为M,参数通常用float32来表示,所以模型大小是参数数量的4倍左右。

        10M float32 bit =10M * 4 Byte =40MB

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

FLOPs=param*图像宽高={(3*3*3+1)*64=1792}*640*640=734003200FLOPs=7.34GFLOPs

(引用上方例子)

四、硬件性能衡量

算力

        计算平台倾尽全力每秒钟所能完成的浮点运算数(计算速度,fp32),单位一般为 TFLOPS(floating point of per second)

计算公式一般为 处理器核心时钟频率 × 处理器核心数量 × 特定数据类型的指令吞吐量 × 2 ,后面乘以 2 是因为乘加视作两次浮点运算

eg:NVIDIA A100 GPU 频率为 1.41GHZ,处理器( Streaming Multiprocessors, SMs)数为 108,每个处理器 FP32 的 CUDA Cores 数量为 64,那么 PeakFLOPS = 1.4110864*2 = 19.49TFLOPS

此时,处理上方例子所需时间为7.34GFLOPs/19.49TFLOPS=0.376*10^-3s(引用上方例子)

带宽:

        计算平台倾尽全力每秒所能完成的内存(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

Logo

更多推荐